On Sun 17-05-15 23:19:52, Alex Shi wrote:
On 05/15/2015 04:36 AM, Dmitry Monakhov wrote:
Alex Shi alex.shi@linaro.org writes:
Hi Dmitry&Theodore,
Someone said without the following patch on lts 3.10 kernel (which used as android base kernel). the write maybe very very slow, needs 1 or 2 seconds to finish.
In fact this was an optimization. wait_for_stable_page() is actually and optimized wait_on_page_writeback()
Hi, Dimtry, it *is* a optimization, the fault is just happened *without* this patch, not with this. :) The curious for me is why this patch has this effect. It looks like the new func just wait page wb when the device support data integrity. But Why the data integrity device need to wait wb, while other device don't need?
Because the disk driver may be computing checksum of the data before submitting it to the disk and if you change the data after the checksum is computed but before the DMA transfer is done, the checksum will not match.
BTW, how to know if my disk support data integrity. My harddisk spec said it has this feature, but my linux kernel with integrity supported don't have /sys/block/sdx/integrity.
The feature you are looking for is called DIF/DIX IIRC and not many disks support it.
Honza
see: void wait_for_stable_page(struct page *page) { struct address_space *mapping = page_mapping(page); struct backing_dev_info *bdi = mapping->backing_dev_info;
if (!bdi_cap_stable_pages_required(bdi)) return; wait_on_page_writeback(page);
} It is very unlikely the patch provokes such huge slowdown. Can you please repeat your measurements and double check your evidence.