Whamcloud - gitweb
b=1760
Refactor the async ocp IO API to use less cpu on the client. With these
changes streaming writes are no longer cpu-bound in llite. The major
changes are to queue dirty pages for IO at commit_write() and reduce the
per-page book-keeping (bye otree!).
Pages are now associated with llite book-keeping for the duration of their
stay in the page cache. A patch is needed in most kernels before 2.4.21 to
add the removepage callback to tear down this association as pages leave
the page cache. Because of this the lustre kernel version is upped to 25.
now, in detail:
- get rid of osc page queue plugging. instead we track pages for much longer
in the queue and only fire rpcs when we have either enough to produce optimal
rpcs or there are 'urgent' pages in the osc that must leave.
- add some fields to the ocp to remember its position in the lov to remove
lov_stripe_offset() from the profiles.
- remove the nasty code for walking sb/inode dirty lists to find other pages to
jam down the obd at writepage time. (yay!)
- b=1755, b=1757, b=1810: make the dirty page limits and rpcs tunables really
per-osc, getting rid of the fragile and redunant tracking that was going on
in llite. this fixes the way commit_write sleeps for space in the cache
without creating an enormous bubble in the rpc pipeline. Also cover them
with osc spinlocks insted of using costly atomic ops.
- b=1750: add a 'read_ahead' tunable per superblock for disabling llite
read-ahead.
- b=1837, b=1761: add some callbacks so that the osc can call back into llite
when an rpc really fires. it wants to know if it has raced with a truncate
and also wants the most recent times in an obdo.
- b=1601: make commit_write's fallback to sync writes much clearer. it also is
more careful about extending i_size only for successful writes.
- add ll_removepage() which removes the ocp from the page and calls into the
osc to remove it form the queues at truncate time.
- teach read-ahead to really never block looking up pages in the page cache
by calling grab_cache_page_nowait() (duh)
- get rid of the otree that we used to track dirty offsets in objects. an
llite level hack for prefering its i_size that includes cache extensions
works until we implement the proper EOC communications to track i_size.
this adds the obd_lock_contains() call until that time.
- get rid of the old dead code for passing extents from ll_file_read to
readpage. also old 2.6 lli experiments.