]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
doc/dev/osd_internals: add wbthrottle.rst 332/head
authorSamuel Just <sam.just@inktank.com>
Fri, 24 May 2013 20:35:14 +0000 (13:35 -0700)
committerSamuel Just <sam.just@inktank.com>
Tue, 28 May 2013 17:41:57 +0000 (10:41 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
doc/dev/osd_internals/wbthrottle.rst [new file with mode: 0644]

diff --git a/doc/dev/osd_internals/wbthrottle.rst b/doc/dev/osd_internals/wbthrottle.rst
new file mode 100644 (file)
index 0000000..14ba014
--- /dev/null
@@ -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.