]> git.ipfire.org Git - thirdparty/systemd.git/commit
core: store unit aliases in a separate set
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 27 May 2020 13:49:17 +0000 (15:49 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 10 Jun 2020 07:36:58 +0000 (09:36 +0200)
commit4562c35527c199e1ed9b41d78c0dd81c88c655c9
treea7888c25a109b9d05e1e4af86be2ca11611469a1
parent9ff7c5b031fb95783884f1e755b5875712f46ea5
core: store unit aliases in a separate set

We allocated the names set for each unit, but in the majority of cases, we'd
put only one name in the set:

$ systemctl show --value -p Names '*'|grep .|grep -v ' '|wc -l
564
$ systemctl show --value -p Names '*'|grep .|grep ' '|wc -l
16

So let's add a separate .id field, and only store aliases in the set, and only
create the set if there's at least one alias. This requires a bit of gymnastics
in the code, but I think this optimization is worth the trouble, because we
save one object for many loaded units.

In particular set_complete_move() wasn't very useful because the target
unit would always have at least one name defined, i.e. the optimization to
move the whole set over would never fire.
src/core/dbus-unit.c
src/core/load-dropin.c
src/core/load-dropin.h
src/core/unit.c
src/core/unit.h
src/shared/dropin.c
src/shared/dropin.h
src/systemctl/systemctl.c