[LU-7128] Performance improvements for out_read() Created: 10/Sep/15 Updated: 10/Sep/15 |
|
| Status: | Open |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | Lustre 2.8.0 |
| Fix Version/s: | None |
| Type: | New Feature | Priority: | Minor |
| Reporter: | Di Wang | Assignee: | WC Triage |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||
| Severity: | 3 | ||||||||
| Rank (Obsolete): | 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. |
| Comments |
| Comment by Alex Zhuravlev [ 10/Sep/15 ] |
|
both osd_read() and all forms of write operate on the same cache, so I don't expect any cache coherency issues. races are possible if no external locking is used, but this is normal. |