著者: Jude Nelson 日付: To: dng@lists.dyne.org 題目: [DNG] vdev status update: performance, bugfixes, and udev events
Hey everyone,
I have the latest news for vdev:
* [EXPERIMENTAL] Vdevd now has actions and helpers that will cause it to
generate and propagate device events to libudev-compat clients.
Libudev-compat clients should receive hotplug events as they would have
with libudev, and they should be able to enumerate devices. This means
that it should be possible now to run X11 with vdevd and libudev-compat,
without needing an xorg.conf. To do so, you'll need to symlink vdev's
/dev/metadata/udev to /run/udev.
* Hardware database access performance has been significantly improved, and
made more accurate (i.e. it should now match all prefixes against the
device modalias, not just the longest one). By "significant", I mean by an
order of magnitude.
* As an optimization, vdevd can now run specially-crafted helper scripts as
"daemonlets." Instead of fork()/exec()'ing a shell for each action, vdevd
will instead fork() an action's command once and feed it a sequence of
device requests, encoded as a list of environment variables. When running
as a daemonlet, the command will be expected to run a loop that will parse
the request from vdevd, call the command's main body of code, and report
back the "exit" status. The heavyweight scripts (i.e. the ones that
benefit from this) have all been turned into daemonlets in this round of
commits. This leads to around 25% performance improvement (on average) for
each command.
* vdevd now benchmarks its actions, and writes performance information to
its logfile at the end of coldplug processing. Just to give a reference
frame: vdevd currently takes about 9 seconds to cold-process all of my
laptop's hardware (i.e. it's slower than udev, but not that much slower).
* libvdev is no longer a build target. Its code will instead be statically
linked to vdevd and vdevfs. This is to make installation and deployment
easier. There's no real loss to doing so--the library isn't that big in
the first place, and the only programs that will ever use it are vdevd and
vdevfs (note that libvdev is not at all related to libudev).
* Bugfixes:
-- the pre-seed script that runs before coldplug device processing can now
create device nodes, and signal to vdevd to run the associated helper
scripts anyway.
-- the pre-seed script will select the first free loop device (with losetup
-f) for the hardware database.
-- [NEEDS CONFIRMATION] the ifname.sh script should select the correct
config file now. I'm still chasing down a "Device or resource busy" bug in
renaming interface names, so please keep your eye out for it.
-- [NEEDS CONFIRMATION] the disk.sh helper should now generate /dev/disk
for USB disks.
Thanks to everyone who helped me test vdevd so far!
-Jude