Messages in this thread | | | From | Jeff Moyer <> | Subject | Re: [PATCH] Avoid always dirtying mapping->flags on O_DIRECT | Date | Mon, 12 May 2014 10:46:19 -0400 |
| |
Jens Axboe <axboe@fb.com> writes:
> Hi, > > In some testing I ran today, we end up spending 40% of the time in > filemap_check_errors(). That smells fishy. Looking further, this is > basically what happens: > > blkdev_aio_read() > generic_file_aio_read() > filemap_write_and_wait_range() > if (!mapping->nr_pages) > filemap_check_errors() > > and filemap_check_errors() always attempts two test_and_clear_bit() on > the mapping flags, thus dirtying it for every single invocation. The > patch below tests each of these bits before clearing them, avoiding this > issue. In my test case (4-socket box), performance went from 1.7M IOPS > to 4.0M IOPS.
It might help to use the word cacheline somewhere in here. ;-) Out of curiosity, what workload were you running?
Acked-by: Jeff Moyer <jmoyer@redhat.com>
| |