On 9/20/19 9:04 AM, Martin Kletzander wrote:
On Fri, Sep 20, 2019 at 10:28:18AM +0100, Richard W.M. Jones wrote:
The readahead filter is a self-configuring filter that makes sequential reads faster when the plugin is slow (and all of the plugins we use here are always slow).
@@ -133,9 +142,17 @@ let common_create plugin_name plugin_args plugin_env = if have_selinux then ( (* label the socket so qemu can open it *) add_arg "--selinux-label"; add_arg "system_u:object_r:svirt_socket_t:s0" ); + + (* Adding the readahead filter is always a win for our access + * patterns. However if it doesn't exist don't worry. + *) + if Sys.file_exists (filterdir // "nbdkit-readahead-filter.so") then ( + add_arg "--filter"; add_arg "readahead"
Just out of curiosity, wouldn't it be cleaner, at least in the future, to add an option in nbdkit to report filters it can load? Of course it would require newer nbdkit in the long run.
Checking for file existence for filters is somewhat less fragile than for plugins, because all filters are built in-tree (we've specifically documented that we don't provide ABI guarantees for filters, so the only sane way to use a filter is to compile it at the same time/version as the nbdkit binary that will load it). But you do have a point that checking for files is still more fragile than just asking nbdkit whether a given filter exists: $ nbdkit --dump-plugin --filter=nosuch null nbdkit: error: cannot open filter 'nosuch': /usr/lib64/nbdkit/filters/nbdkit-nosuch-filter.so: cannot open shared object file: No such file or directory $ echo $? 1 $ nbdkit --dump-plugin --filter=cache null path=/usr/lib64/nbdkit/plugins/nbdkit-null-plugin.so name=null ... $ echo $? 0 Similarly for --help. But notice: $ diff -u <(nbdkit --dump-plugin --filter=cache null) \ <(nbdkit --dump-plugin null) $ diff -u <(nbdkit --help --filter=cache null) <(nbdkit --help null) --- /dev/fd/63 2019-09-20 09:31:43.184428823 -0500 +++ /dev/fd/62 2019-09-20 09:31:43.185428824 -0500 @@ -23,15 +23,6 @@ Please read the nbdkit(1) manual page for full usage. -filter: cache (nbdkit caching filter) -(/usr/lib64/nbdkit/filters/nbdkit-cache-filter.so) -cache=MODE Set cache MODE, one of writeback (default), - writethrough, or unsafe. -cache-on-read=BOOL Set to true to cache on reads (default false). -cache-max-size=SIZE Set maximum space used by cache. -cache-high-threshold=PCT Percentage of max size where reclaim begins. -cache-low-threshold=PCT Percentage of max size where reclaim ends. - plugin: null (/usr/lib64/nbdkit/plugins/nbdkit-null-plugin.so) size=<SIZE> Size of the backing disk So we could probably improve --dump-plugin to ALSO show details about the filter (such as a second path=), the way --help does, or even add a 'nbdkit --dump-filter filtername' to work in isolation. But while you'd have to wait for a future nbdkit release to get more details from --dump-plugin, and/or a way to list all available filters (think search permissions on a directory), you already have a way with current nbdkit to check existence of a filter (think read permissions on a directory). -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org