519ae503e3
It's the same old story: 'struct sd_bus' is generally instantiated once, so bitfields, for which we pay with more complicated code in all users of this struct, are counterproductive. In some progs the structure may be instantiated a few times, but it's still not worth it because we save a few bytes of memory in one place and pay for this with many more bytes in the code. $ size build/libsystemd.so.0.39.0{.orig,} text data bss dec hex filename 2452757 65376 3768 2521901 267b2d build/libsystemd.so.0.39.0.orig 2451669 65376 3768 2520813 2676ed build/libsystemd.so.0.39.0 $ diff -u <(pahole build/libsystemd.so.0.39.0.orig) <(pahole build/libsystemd.so.0.39.0) ... - /* size: 1960, cachelines: 31, members: 105 */ - /* sum members: 1944, holes: 3, sum holes: 9 */ - /* sum bitfield members: 25 bits, bit holes: 2, sum bit holes: 31 bits */ + /* size: 1984, cachelines: 31, members: 105 */ + /* sum members: 1971, holes: 4, sum holes: 13 */ /* member types with holes: 1, total: 1 */ i.e. 2452757 - 2451669 = 1088 extra bytes of code and slower execution, to save 24 bytes of memory per instance of the struct. (But the number of cachelines doesn't change, so the smaller struct most likely has no effect on memory access, and the alignment of the struct most likely means that the memory saving is illusory too, we just end up with a few bytes of padding after the struct.) In the other structs, the alignment prevent the bitfield for having any effect on memory use, but the compiler would still generate more complicated code, i.e. we pay something for nothing. For example: $ diff -u <(pahole build/libsystemd.so.0.39.0.orig) <(pahole build/libsystemd.so.0.39.0) ... struct node_callback { struct node * node; /* 0 8 */ - _Bool is_fallback:1; /* 8: 0 1 */ + _Bool is_fallback; /* 8 1 */ - /* XXX 7 bits hole, try to pack */ /* XXX 3 bytes hole, try to pack */ unsigned int last_iteration; /* 12 4 */ @@ -455,15 +448,13 @@ struct node_callback * callbacks_prev; /* 32 8 */ /* size: 40, cachelines: 1, members: 6 */ - /* sum members: 36, holes: 1, sum holes: 3 */ - /* sum bitfield members: 1 bits, bit holes: 1, sum bit holes: 7 bits */ + /* sum members: 37, holes: 1, sum holes: 3 */ /* last cacheline: 40 bytes */ }; I kept the bitfield in sd_bus_slot because it prevents the struct from growing from 112 to 120 bytes by reducing the alignment requirement for subsequent fields, and we potentially can have this instantiated many times. |
||
---|---|---|
.clusterfuzzlite | ||
.github | ||
.semaphore | ||
catalog | ||
coccinelle | ||
docs | ||
factory | ||
hwdb.d | ||
LICENSES | ||
man | ||
mime | ||
mkosi.conf.d | ||
mkosi.images | ||
mkosi.profiles | ||
modprobe.d | ||
network | ||
pkg | ||
po | ||
presets | ||
rules.d | ||
shell-completion | ||
src | ||
sysctl.d | ||
sysusers.d | ||
test | ||
tmpfiles.d | ||
tools | ||
units | ||
xorg | ||
.clang-format | ||
.ctags | ||
.dir-locals.el | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.packit.yml | ||
.pylintrc | ||
.vimrc | ||
.ycm_extra_conf.py | ||
LICENSE.GPL2 | ||
LICENSE.LGPL2.1 | ||
meson.build | ||
meson.version | ||
meson_options.txt | ||
mkosi.conf | ||
NEWS | ||
README | ||
README.md | ||
TODO |
System and Service Manager
Details
Most documentation is available on systemd's web site.
Assorted, older, general information about systemd can be found in the systemd Wiki.
Information about build requirements is provided in the README file.
Consult our NEWS file for information about what's new in the most recent systemd versions.
Please see the Code Map for information about this repository's layout and content.
Please see the Hacking guide for information on how to hack on systemd and test your modifications.
Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.
When preparing patches for systemd, please follow our Coding Style Guidelines.
If you are looking for support, please contact our mailing list, join our IRC channel #systemd on libera.chat or Matrix channel
Stable branches with backported patches are available in the stable repo.
We have a security bug bounty program sponsored by the Sovereign Tech Fund hosted on YesWeHack