diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-05-27 15:49:17 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-06-10 09:36:58 +0200 |
commit | 4562c35527c199e1ed9b41d78c0dd81c88c655c9 (patch) | |
tree | a7888c25a109b9d05e1e4af86be2ca11611469a1 /src/core/unit.h | |
parent | 9ff7c5b031fb95783884f1e755b5875712f46ea5 (diff) | |
download | systemd-4562c35527c199e1ed9b41d78c0dd81c88c655c9.tar.gz |
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.
Diffstat (limited to 'src/core/unit.h')
-rw-r--r-- | src/core/unit.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/core/unit.h b/src/core/unit.h index 6659406c2d..ffa003da6b 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -117,10 +117,10 @@ typedef struct Unit { FreezerState freezer_state; sd_bus_message *pending_freezer_message; - char *id; /* One name is special because we use it for identification. Points to an entry in the names set */ + char *id; /* The one special name that we use for identification */ char *instance; - Set *names; + Set *aliases; /* All the other names. */ /* For each dependency type we maintain a Hashmap whose key is the Unit* object, and the value encodes why the * dependency exists, using the UnitDependencyInfo type */ |