Details
-
New Feature
-
Resolution: Unresolved
-
Minor
-
None
-
Lustre 2.8.0
-
None
-
3
-
9223372036854775807
Description
To read update records, it needs to do bulk buffer read between MDTs (see out_read()), and because we use osd_write to write update records into the disk see osd_write, which will write directly to buffer, so we have to use osd_read to read buffer back. But that has performance issue,
From Andreas
This is submitting the reads to disk as a series of separate reads (i.e. a seek between each one) which is inefficient. This should use the same method ofd_preprw_read() and ofd_commitrw_read() does for reading - dt_bufs_get(), dt_read_prep(), dt_bufs_put(). That submits all the pages to be read at once and will avoid any seek if they are contiguous on disk. Unfortunately, the code layering makes it difficult to reuse or share any code with tgt_brw_read() since tgt_brw_read() calls into ofd_* while this calls directly into dt_*. At a minimum, this should copy the checks in tgt_brw_read() to see if the client is evicted so that it doesn't block waiting for sends that could never finish, and have a comment referencing tgt_brw_read() so that we know the code should be similar.
But if we change the read to OST read style( use osd_read_prep etc), that might cause some cache conference issue.
Attachments
Issue Links
- is related to
-
LU-6741 OSP should use inline data for small requests
- Resolved