mirror of
https://github.com/ceph/ceph
synced 2025-01-02 00:52:22 +00:00
doc/dev/osd_internals: add wbthrottle.rst
Signed-off-by: Samuel Just <sam.just@inktank.com>
This commit is contained in:
parent
4d53e9c940
commit
1c35556b56
28
doc/dev/osd_internals/wbthrottle.rst
Normal file
28
doc/dev/osd_internals/wbthrottle.rst
Normal file
@ -0,0 +1,28 @@
|
||||
==================
|
||||
Writeback Throttle
|
||||
==================
|
||||
|
||||
Previously, the filestore had a problem when handling large numbers of
|
||||
small ios. We throttle dirty data implicitely via the journal, but
|
||||
a large number of inodes can be dirtied without filling the journal
|
||||
resulting in a very long sync time when the sync finally does happen.
|
||||
The flusher was not an adequate solution to this problem since it
|
||||
forced writeback of small writes too eagerly killing performance.
|
||||
|
||||
WBThrottle tracks unflushed io per hobject_t and ::fsyncs in lru
|
||||
order once the start_flusher threshhold is exceeded for any of
|
||||
dirty bytes, dirty ios, or dirty inodes. While any of these exceed
|
||||
the hard_limit, we block on throttle() in _do_op.
|
||||
|
||||
See src/os/WBThrottle.h, src/osd/WBThrottle.cc
|
||||
|
||||
To track the open FDs through the writeback process, there is now an
|
||||
fdcache to cache open fds. lfn_open now returns a cached FDRef which
|
||||
implicitely closes the fd once all references have expired.
|
||||
|
||||
Filestore syncs have a sideeffect of flushing all outstanding objects
|
||||
in the wbthrottle.
|
||||
|
||||
lfn_unlink clears the cached FDRef and wbthrottle entries for the
|
||||
unlinked object when then last link is removed and asserts that all
|
||||
outstanding FDRefs for that object are dead.
|
Loading…
Reference in New Issue
Block a user