summaryrefslogtreecommitdiff
path: root/udev/lib/libudev.h
diff options
context:
space:
mode:
authorAlan Jenkins <alan-jenkins@tuffmail.co.uk>2009-05-21 22:22:37 +0200
committerKay Sievers <kay.sievers@vrfy.org>2009-05-21 22:22:37 +0200
commitf503f6b22fa54d1a65156a51d8b3311190c73ae5 (patch)
tree5003144371ce463fe5ba2387b9777cd8cddd24ad /udev/lib/libudev.h
parentf9b3f88f71f5bdfb18aa4bfba00d72fa41fdf286 (diff)
udevd: implement a more efficient queue file format
Directory lookups show up in profiling. The queue files are responsible for a large proportion of file-related system calls in udev coldplug. Instead of creating a file for each event, append their details to a log file. The file is periodically rebuilt (garbage-collected) to prevent it from growing indefinitely. This single queue file replaces both the queue directory and the uevent_seqnum file. On desktop systems the file tends not to grow beyond one page. So it should also save a small amount of memory in tmpfs. Tests on a running EeePC indicate average savings of 5% *udevd* cpu time as measured by oprofile. __link_path_walk is reduced from 1.5% to 1.3%. It is not completely clear where the rest of the gains come from. In tests running ~400 events, the queue file is rebuilt about 5 times. Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Diffstat (limited to 'udev/lib/libudev.h')
-rw-r--r--udev/lib/libudev.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/udev/lib/libudev.h b/udev/lib/libudev.h
index 9346eb4ddd..9b51ea3300 100644
--- a/udev/lib/libudev.h
+++ b/udev/lib/libudev.h
@@ -115,6 +115,8 @@ unsigned long long int udev_queue_get_udev_seqnum(struct udev_queue *udev_queue)
int udev_queue_get_udev_is_active(struct udev_queue *udev_queue);
int udev_queue_get_queue_is_empty(struct udev_queue *udev_queue);
int udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue, unsigned long long int seqnum);
+int udev_queue_get_seqnum_sequence_is_finished(struct udev_queue *udev_queue,
+ unsigned long long int start, unsigned long long int end);
struct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev_queue);
struct udev_list_entry *udev_queue_get_failed_list_entry(struct udev_queue *udev_queue);
#endif