[LTP] [PATCH v2] syscalls/readahead02: limit max readahead to backing device max_readahead_kb
Tue Mar 5 17:55:03 CET 2019
----- Original Message -----
> On Tue, Mar 5, 2019 at 6:17 PM Jan Stancek <firstname.lastname@example.org> wrote:
> > Using system-wide "Cached" size is not accurate. The test is sporadically
> > failing with warning on ppc64le 4.18 and 5.0 kernels.
> > Problem is that test over-estimates max readahead size, which then
> > leads to fewer readhead calls and kernel can silently trims length
> > in each of them:
> > ...
> > readahead02.c:244: INFO: Test #2: POSIX_FADV_WILLNEED on file
> > readahead02.c:134: INFO: creating test file of size: 67108864
> > readahead02.c:263: INFO: read_testfile(0)
> > readahead02.c:274: INFO: read_testfile(1)
> > readahead02.c:189: INFO: max ra estimate: 12320768
> > readahead02.c:198: INFO: readahead calls made: 6
> > readahead02.c:204: PASS: offset is still at 0 as expected
> > readahead02.c:308: INFO: read_testfile(0) took: 492486 usec
> > readahead02.c:309: INFO: read_testfile(1) took: 430627 usec
> > readahead02.c:311: INFO: read_testfile(0) read: 67108864 bytes
> > readahead02.c:313: INFO: read_testfile(1) read: 59244544 bytes
> > readahead02.c:316: PASS: readahead saved some I/O
> > readahead02.c:324: INFO: cache can hold at least: 264192 kB
> > readahead02.c:325: INFO: read_testfile(0) used cache: 124992 kB
> > readahead02.c:326: INFO: read_testfile(1) used cache: 12032 kB
> > readahead02.c:338: WARN: using less cache than expected
> > Stop relying on used cache size, and use backing device readahead
> > limit instead.
> This is certainly better than 4K, but still feels like we are not really
> the API properly, but I'm fine with this fix.
> However... as follow up, how about extending the new
> tst_dev_bytes_written() utils from Sumit to cover also bytes_read
> and replace validation of readahead() from get_cached_size() diff
> to tst_dev_bytes_read()?
There is something similar based on /proc/self/io. We could try using
that to estimate max readahead size.
Or /sys/class/block/$dev/stat as you suggested, not sure which one is
more accurate/up to date.
> That feels like a much more deterministic test and in-fact readahead()
> validation is kind of like the reverse of sync_file_range() validation.
More information about the ltp