Commit Graph
9322 Commits
Author SHA1 Message Date
Michal Schmidt 89439d4fc0 hashmap: rewrite the implementation
This is a rewrite of the hashmap implementation. Its advantage is lower
memory usage.

It uses open addressing (entries are stored in an array, as opposed to
linked lists). Hash collisions are resolved with linear probing and
Robin Hood displacement policy. See the references in hashmap.c.

Some fun empirical findings about hashmap usage in systemd on my laptop:
  - 98 % of allocated hashmaps are Sets.
  - Sets contain 78 % of all entries, plain Hashmaps 17 %, and
    OrderedHashmaps 5 %.
  - 60 % of allocated hashmaps contain only 1 entry.
  - 90 % of allocated hashmaps contain 5 or fewer entries.
  - 75 % of all entries are in hashmaps that use trivial_hash_ops.

Clearly it makes sense to:
  - store entries in distinct entry types. Especially for Sets - their
    entries are the most numerous and they require the least information
    to store an entry.
  - have a way to store small numbers of entries directly in the hashmap
    structs, and only allocate the usual entry arrays when the direct
    storage is full.

The implementation has an optional debugging feature (enabled by
defining the ENABLE_HASHMAP_DEBUG macro), where it:
  - tracks all allocated hashmaps in a linked list so that one can
    easily find them in gdb,
  - tracks which function/line allocated a given hashmap, and
  - checks for invalid mixing of hashmap iteration and modification.

Since entries are not allocated one-by-one anymore, mempools are not
used for entries. Originally I meant to drop mempools entirely, but it's
still worth it to use them for the hashmap structs. My testing indicates
that it makes loading of units about 5 % faster (a test with 10000 units
where more than 200000 hashmaps are allocated - pure malloc: 449±4 ms,
mempools: 427±7 ms).

Here are some memory usage numbers, taken on my laptop with a more or
less normal Fedora setup after booting with SELinux disabled (SELinux
increases systemd's memory usage significantly):

systemd (PID 1)                            Original   New    Change
dirty memory (from pmap -x 1) [KiB]            2152  1264     -41 %
total heap allocations (from gdb-heap) [KiB]   1623   756     -53 %
2014-10-30 19:50:51 +01:00
Michal Schmidt ce79279bff test: adjust max load factor in test_hashmap_many()
A reimplementation of hashmaps will follow and it will use 0.8.
2014-10-30 19:50:51 +01:00
Michal Schmidt 52fc5ce38c mempool: add a zeroing alloc function
Add mempool_alloc0_tile(). It's like mempool_alloc_tile(), but it
initializes the allocated tile's memory to zero.
2014-10-30 19:50:50 +01:00
Michal Schmidt b5de6d9842 util: add log2u(), log2u_round_up()
Two's logarithms for unsigned.
2014-10-30 19:50:50 +01:00
Lennart Poettering a09abc4ae0 memfd: rename memfd.h to memfd-util.h to avoid any confusion with any libc provided headers 2014-10-30 18:32:37 +01:00
Lennart Poettering 73843b5258 memfd: always use our internal utility functions where we have them 2014-10-30 18:28:37 +01:00
Lennart Poettering 47f0f4eb1d memfd: drop memfd_get_name() as it is unused 2014-10-30 18:28:01 +01:00
Lennart Poettering c79e98eadd journal: when sending huge log messages prefer memfds over temporary files in /dev/shm
Previously when a log message grew beyond the maximum AF_UNIX/SOCK_DGRAM
datagram limit we'd send an fd to a deleted file in /dev/shm instead.
Because the sender could still modify the file after delivery we had to
immediately copy the data on the receiving side.

With memfds we can optimize this logic, and also remove the dependency
on /dev/shm: simply send a sealed memfd around, and if we detect the
seal memory map the fd and use it directly.
2014-10-30 17:36:02 +01:00
Lennart Poettering 45071fcaa0 memfd: always create our memfds with CLOEXEC set
We really shouldn't create fds ever that have the flag unset.
2014-10-30 16:23:34 +01:00
Lennart Poettering ef309a681f util: unify how we see srand() 2014-10-30 15:35:37 +01:00
Lennart Poettering 97768fc574 util: don't block on getrandom() 2014-10-30 15:27:53 +01:00
Colin Guthrie e3c72c21d6 sysusers: Preserve ownership and mode on /etc/passwd and friends
When running sysusers we would clobber file ownership and permissions
on the files /etc/passwd, /etc/group and /etc/[g]shadow.

This simply preserves the ownership and mode if existing files are
found.
2014-10-30 13:38:10 +00:00
Zbigniew Jędrzejewski-Szmek fec1530e6b systemctl: obey --state in list-unit-files 2014-10-29 23:48:10 -04:00
Zbigniew Jędrzejewski-Szmek 6c71341aee systemctl: let list-{units,unit-files } honour --type
The docs don't clarify what is expected, but I don't see any reason
why --type should be ignored.

Also restucture the compund conditions into separate clauses for
easier reading.
2014-10-29 23:48:10 -04:00
Dave Reisner 74a550c5d8 missing.h: fix wrong __NR_getrandom syscall def
278 is vmsplice on x86_64. 318 is what we want:

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/syscalls/syscall_64.tbl
2014-10-29 20:41:46 -04:00
Kay Sievers a42cdff19f udev: path_id - update comments 2014-10-30 01:20:56 +01:00
Lennart Poettering 1f70b0876a busctl: add new "capture" verb to record bus messages in libpcap compatible files, for dissection with wireshark 2014-10-30 01:13:54 +01:00
Dave Reisner 1ab19cb167 nspawn: ignore EEXIST when creating mount point
A combination of commits f3c80515c and 79d80fc14 cause nspawn to
silently fail with a commandline such as:

  # systemd-nspawn -D /build/extra-x86_64 --bind=/usr

strace shows the culprit:

  [pid 27868] writev(2, [{"Failed to create mount point /build/extra-x86_64/usr: File exists", 82}, {"\n", 1}], 2) = 83
2014-10-29 13:42:51 -04:00
Lennart Poettering ef7b6c0190 sd-bus: properly handle removals of non-existing matches 2014-10-29 17:58:43 +01:00
Lennart Poettering 793062063a missing: no tabs please, we are british 2014-10-29 17:08:18 +01:00
Lennart Poettering b244d9f374 missing: simplify memfd ifdeffery 2014-10-29 17:07:47 +01:00
Lennart Poettering 539618a0dd util: make use of the new getrandom() syscall if it is available when needing entropy
Doesn't require an fd, and could be a bit faster, so let's make use of
it, if it is available.
2014-10-29 17:06:32 +01:00
Susant Sahani d0159fdc7a sd-rtnl: add bridge port rtnl attributes.
Add bridge port attributes to sd-rtnl to configure
via networkd.
2014-10-29 10:59:59 +01:00
Susant Sahani 64c8407133 sd-rtnl: add support to set packet family type
This patch adds functionality to set family type
in the rtnl message for example PF_BRIDGE.
2014-10-29 10:59:46 +01:00
Tom Gundersen fcf81a54a4 sd-rtnl: mark nested attributes with the NLA_F_NESTED flag
The kernel mostly does not check this, but let's be consisntent and allways set it anyway. Based
on patch from Susant Sahani.
2014-10-29 10:52:07 +01:00
Tom Gundersen 0a2478a918 sd-rtnl: fix reading of nla type
We must filter out the 'network-byteorder' and 'nested' flags.
2014-10-29 10:51:07 +01:00
Susant Sahani 9243e967a3 networkd: add Patch of MTU discovery for IPIP and GRE
Add path of MTU disovery for IPIP and GRE Kind of tunnels
2014-10-29 10:54:01 +05:30
Susant Sahani 436b910f1f networkd: add back path of MTU discovery for SIT 2014-10-29 10:53:56 +05:30
Lennart Poettering 288c0991d5 test: use assert_se() when testing tables so that we get a useful error when something fails 2014-10-28 18:07:23 +01:00
Lennart Poettering 1378a3b5a1 service: add missing state table entry 2014-10-28 18:06:58 +01:00
Umut Tezduyar Lindskog db2cb23b5b core: send sigabrt on watchdog timeout to get the stacktrace
if sigabrt doesn't do the job, follow regular shutdown
routine, sigterm > sigkill.
2014-10-28 17:37:39 +01:00
Lennart Poettering f10af76de5 swap: don't add too many deps for swap files form /proc/swap 2014-10-28 17:37:06 +01:00
Kay Sievers cc821d02a3 udev: path_id - set supported_parent for well-known SCSI setups 2014-10-28 16:51:36 +01:00
Lennart Poettering f2288cc63f polkit: actually generate new InteractiveAuthorizationRequired error on the right occasions 2014-10-28 15:11:39 +01:00
Lennart Poettering 1b3a797f6f sd-bus: add support for new InteractiveAuthorizationRequired error from dbus spec 2014-10-28 14:59:48 +01:00
WaLyong Cho 8a188de9e0 mac: add mac_ prefix to distinguish origin security apis 2014-10-28 14:31:48 +01:00
Lennart Poettering ddb7d6b942 swap: drop noauto/nofail bools from Swap structure
We nowadays always set them to "false" anyway, hence let's get rid of
them entirely.
2014-10-28 14:31:25 +01:00
Lennart Poettering 47cb901e38 swap: replace Discard= setting by a more generic Options= setting
For now, it's systemd itself that parses the options string, but as soon
as util-linux' swapon can take the option string directly with -o we
should pass it on unmodified.
2014-10-28 14:31:25 +01:00
Martin Pitt 33488f1979 udev hwdb: Support shipping pre-compiled database in system images
In some cases it is preferable to ship system images with a pre-generated
binary hwdb database, to avoid having to build it at runtime, avoid shipping
the source hwdb files, or avoid storing large binary files in /etc.

So if hwdb.bin does not exist in /etc/udev/, fall back to looking for it in
UDEVLIBEXECDIR. This keeps the possibility to add files to /etc/udev/hwdb.d/
and re-generating the database which trumps the one in /usr/lib.

Add a new --usr flag to "udevadm hwdb --update" which puts the database
into UDEVLIBEXECDIR.

Adjust systemd-udev-hwdb-update.service to not generate the file in /etc if we
already have it in /usr.
2014-10-28 14:28:18 +01:00
Lennart Poettering 090771492f sd-login: let's not needlessly yell at users
While GNOME/KDE are generally capitalized, systemd tools generally are
not, hence let's not start doing so in the XDG_CURRENT_SESSION
environment variable.
2014-10-28 12:31:11 +01:00
Zbigniew Jędrzejewski-Szmek ebc5788e88 manager: print warning on console before reboot
It will be printed even if a prompt is blocking other messages.
2014-10-27 23:17:49 -04:00
Zbigniew Jędrzejewski-Szmek 127d5fd156 manager: convert ephemeral to enum
In preparation for subsequent changes.
2014-10-27 23:02:54 -04:00
Zbigniew Jędrzejewski-Szmek 7c67f0f71a rpm: add user macros 2014-10-27 22:34:09 -04:00
Zbigniew Jędrzejewski-Szmek e46b13c8c7 manager: do not print anything while passwords are being queried
https://bugs.freedesktop.org/show_bug.cgi?id=73942
2014-10-27 22:33:14 -04:00
Zbigniew Jędrzejewski-Szmek 3fcd09602c cdrom_id: do not attempt to read past end of buffer
CID #1238437
2014-10-27 22:30:43 -04:00
Zbigniew Jędrzejewski-Szmek dec23413ec selinux: make sure we do not try to print missing fields
UID or GID of 0 is valid, so we cannot use that to distinguish whether
calls to sd_bus_creds_get_* succeeded, and the return value from the
function is the only way to know about missing fields. Print "n/a" if
the fields are missing.

CID #1238779
2014-10-27 22:30:43 -04:00
Timofey Titovets 3769415e65 login: remove multi-seat-x 2014-10-28 02:24:46 +01:00
Lennart Poettering f189ab18de job: optionally, when a job timeout is hit, also execute a failure action 2014-10-28 02:19:55 +01:00
Lennart Poettering fa1b91632c core: remove system start timeout logic again
The system start timeout as previously implemented would get confused by
long-running services that are included in the initial system startup
transaction for example by being cron-job-like long-running services
triggered immediately at boot. Such long-running jobs would be subject
to the default 15min timeout, esily triggering it.

Hence, remove this again. In a subsequent commit, introduce per-target
job timeouts instead, that allow us to control these timeouts more
finegrained.
2014-10-28 01:42:13 +01:00
Lennart Poettering 294330896d journald: be nice to coverity, add an extra assert
coverity otherwise assumes that the chain object might be NULL.
2014-10-27 23:50:53 +01:00