Alan Jenkins | 28 Sep 12:57

[PATCH 0/2] udevd: Optimize "goto"

I seem to remember you mentioned this as a longer-term goal.  This was
in the context of the TODO item "rework rules to a match-action list,
instead of a rules array".

The idea was to move the scan for the label targeted by a goto rule
(udev_rules_iter_label), from run-time to parse-time.  It avoids
repeating the scan for every event.

I already had a patch for this specific idea.  I think it can be
implemented now without causing problems.  It's no big win - cachegrind
suggests it takes 5% off user cpu time - but it is progress.
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Alan Jenkins | 28 Sep 13:01

[PATCH 1/2] udevd: trivial cleanup in udev_rules_iter

diff --git a/udev/udev_rules_parse.c b/udev/udev_rules_parse.c
index 541d651..229096c 100644
--- a/udev/udev_rules_parse.c
+++ b/udev/udev_rules_parse.c
@@ -45,9 +45,9 @@ struct udev_rule *udev_rules_iter_next(struct udev_rules_iter *iter)
 	if (!rules)
 		return NULL;

-	dbg(iter->rules->udev, "current=%zi\n", iter->current);
+	dbg(rules->udev, "current=%zi\n", iter->current);
 	if (iter->current >= rules->bufsize) {
-		dbg(iter->rules->udev, "no more rules\n");
+		dbg(rules->udev, "no more rules\n");
 		return NULL;
 	}

@@ -65,7 +65,7 @@ struct udev_rule *udev_rules_iter_label(struct udev_rules_iter *iter, const char
 	size_t start = iter->current;

 next:
-	dbg(iter->rules->udev, "current=%zi\n", iter->current);
+	dbg(rules->udev, "current=%zi\n", iter->current);
 	if (iter->current >= rules->bufsize) {
 		err(rules->udev, "LABEL='%s' not found, GOTO will be ignored\n", label);
 		iter->current = start;

--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
(Continue reading)

Alan Jenkins | 28 Sep 13:02

[PATCH 2/2] udevd: Avoid repeated scans for goto targets (udev_iter_find_label)

The scans are now performed up-front at parse-time, instead of being
repeated for each event at run-time.

Cachegrind reports a 5% reduction in cpu cycles
(excluding the time spent in-kernel).

diff --git a/udev/udev_rules.c b/udev/udev_rules.c
index d4dcb06..9c37571 100644
--- a/udev/udev_rules.c
+++ b/udev/udev_rules.c
@@ -1529,7 +1529,7 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udevice)

 			if (rule->goto_label.operation != KEY_OP_UNSET) {
 				dbg(udevice->udev, "moving forward to label '%s'\n", key_val(rule, &rule->goto_label));
-				udev_rules_iter_label(&iter, key_val(rule, &rule->goto_label));
+				udev_rules_iter_goto(&iter, rule->goto_rule_off);
 			}
 		}
 	}
@@ -1609,7 +1609,7 @@ int udev_rules_get_run(struct udev_rules *rules, struct udevice *udevice)

 			if (rule->goto_label.operation != KEY_OP_UNSET) {
 				dbg(udevice->udev, "moving forward to label '%s'\n", key_val(rule, &rule->goto_label));
-				udev_rules_iter_label(&iter, key_val(rule, &rule->goto_label));
+				udev_rules_iter_goto(&iter, rule->goto_rule_off);
 			}
 		}
 	}
diff --git a/udev/udev_rules.h b/udev/udev_rules.h
index 02685e1..af96b81 100644
(Continue reading)

Kay Sievers | 28 Sep 14:39
Gravatar

Re: [PATCH 2/2] udevd: Avoid repeated scans for goto targets (udev_iter_find_label)

On Sun, Sep 28, 2008 at 13:02, Alan Jenkins <alan-jenkins <at> tuffmail.co.uk> wrote:
> The scans are now performed up-front at parse-time, instead of being
> repeated for each event at run-time.
>
> Cachegrind reports a 5% reduction in cpu cycles
> (excluding the time spent in-kernel).

Both patches applied.

Thanks,
Kay
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Gmane