On Wed, Aug 10, 2011 at 5:08 PM, Jens Axboe <axboe@xxxxxxxxx> wrote: > On 2011-08-10 01:43, Kyungmin Park wrote: >> On Wed, Aug 10, 2011 at 3:52 AM, Jens Axboe <axboe@xxxxxxxxx> wrote: >>> On 2011-08-09 05:47, Kyungmin Park wrote: >>>> Hi Jens >>>> >>>> Now eMMC device requires the upper layer information to improve the data >>>> performance and reliability. >>>> >>>> . Context ID >>>> Using the context information, it can sort out the data internally and improve the performance. >>>> The main problem is that it's needed to define "What's the context". >>>> Actually I expect cfq queue has own unique ID but it doesn't so decide to use the pid instead >>>> >>>> . Data Tag >>>> Using the Data Tag (1-bit information), It writes the data at SLC area when it's hot data. So it can make the chip more reliable. >>>> First I expect the REQ_META but current ext4 doesn't pass the WRITE_META. only use the READ_META. so it needs to investigate it. >>>> >>>> With these characteristics, it's helpful to teach the device. After some consideration. it's needed to pass out these information at request data structure. >>>> >>>> Can you give your opinions and does it proper fields at requests? >>> >>> You need this to work on all IO schedulers, not just cfq. >> Of course if the concept is acceptable, I'll add the other IO schedulers also. >> >>> And since that's the case, there's no need to add this field since you can just >>> retrieve it if the driver asks for it. For CFQ, it could look like this: >>> >>> static int cfq_foo(struct request *rq) >>> { >>> struct cfq_queue *cfqq = rq->elevator_private[1]; >>> >>> if (cfqq) >>> return cfqq->pid; >>> >>> return -1; >>> } >> >> The actual user of these information is device driver. e.g., >> drivers/mmc/card/block.c >> So it's not good to use cfq data structure at D/D. some time later >> these are also used at scsi device drivers. > > No, what I'm suggesting above is the CFQ implementation. You would need > to wire up an elv_ops->get_foo() and have the IO schedulers fill it in. > If you notice, the above function does not take or output anything > related to CFQ in particular, it'll just return you the unique key you > need. > > It's either the above, or a field in the request that the schedulers > fill out. However, it'd be somewhat annoying to grow struct request for > something that has a narrow scope of use. Hence the suggestion to add a > strategy helper for this. Okay, I'll add new elevator function one for getting context or more hints. BTW, does it okay to call elevator function call at D/D? The quick-n-dirty call is like this at "drivers/mmc/card/block.c" struct elevator_queue *e = md->queue.queue->elevator; int context = -1; if (e->ops->elevator_get_req_hint_fn && req) { context = e->ops->elevator_get_req_hint_fn(req); > >>> As to the hot part, I think that would be better as just a request flag >>> like eg the meta flag. >> Yes it can use the JBD_flags at cfq. but same reason it's not proper >> reference at device drivers. that's reason to make a filed at request. >> >> Device driver should or must see the request data structure and don't >> refer the upper layer data structures. > > The device driver sees the struct request, which is where this flag ends > up. It's ext{3,4} series specific detection method. if user use the another filesystem, it's difficult to detect hot/cold. I'll more think about it. Thank you for suggestion. Kyungmin Park > > -- > Jens Axboe > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html