>>>>> Alex Tomas (AT) writes: AT> I see. though my point is a bit different: AT> say, there is an application that's doing big linear writes in order AT> to achieve good throughput. on the other hand, most of modern storages AT> are very sensible to request size and tend to suck serving zillions AT> of small I/Os. raid5 breaks all incoming requests into small ones and AT> handles them separately. of couse, one might be lucky and after submiting AT> those small requests get merged to larger ones. but only due to luck, AT> I'm afraid. what I'm talking about is expressly code in raid5 that AT> would try to merge small requests in some obvious cases. AT> for example: sorry, forgot to include the example ... there is 3 disks raid5 with chunk=64K. one does 128K request. and in make_request() we do something like this: struct context { struct bio *bios[FOR_EVERY_DISK]; }; /* initialize context with empty bio's */ for (all internal stripes) { sh = get_active_stripe(); add_stripe_bio(sh, bi, ...); handle_stripe(sh, context); } /* submit all non-empty bio's from the context */ and in handle_stripe(): instead of immediate calling generic_make_request() try to merge request to correspondend bio in the context. I understand there are few different limits to bio size, active stripes, etc. but what do you think about the idea in general? thanks, Alex - To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html