Details
-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
Lustre 2.8.0
-
3
-
17511
Description
The ladvise code from LU-4931 (http://review.whamcloud.com/12458) and the recent ZFS performance improvements for read have highlighted that there are some inconsistencies in osd_read_prep() and osd_bufs_get_read() between osd-ldiskfs and osd-zfs.
It would be best for ladvise on ZFS if it were possible to just call dmu_prefetch() on the specified range and not have to actually set up the pages and drop them again immediately.
On ldiskfs, it appears that osd_read_prep() seems somewhat broken since it is removing pages from cache just before they are read:
for (i = 0; i < npages; i++) { if (cache == 0) generic_error_remove_page(inode->i_mapping, lnb[i].lnb_page); }
which means that prefetching the page into OSS cache will be mostly useless, if it is discarded during the read phase immediately before reading it. I can understand dropping pages from cache for writes, but I'd think for reads it makes sense to leave them in cache if they are about to be used, especially if they are being explicitly prefetched.