udev-node: optimize device node symlink creation
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 13 Jan 2023 04:25:43 +0000 (13:25 +0900)
committerLennart Poettering <lennart@poettering.net>
Tue, 13 Jun 2023 20:51:00 +0000 (22:51 +0200)
commit331aa7aa15ee5dd12b369b276f575d521435eb52
treec2b2b04498f3ba6dea10ce64c99e412cf3f63b1a
parent0b75d6579b3eca89c31178e8e4225424273d96d8
udev-node: optimize device node symlink creation

If multiple devices requested the same device node symlink with the same
priority, then previously we read O(N^2) of files saved in
/run/udev/links.

This makes if the requested symlink already exists with equal or higher
priority, then the symlink is kept, and skip to read all existing files,
except for one related to the current device node, in /run/udev/links.
Hence, the total amount of file read becomes O(N).

This improves performance of testcase_simultaneous_events_2 added by the
previous commit about 30%.
Before (32.8 sec):
```
 ## 3 iterations start: 11:13:44.690953163
 ## 3 iterations end: 11:14:17.493974927
```
After (23.8 sec):
```
 ## 3 iterations start: 11:17:53.869938387
 ## 3 iterations end: 11:18:17.624268345
```

This is based on the idea and analysis by Franck Bui.

Replaces #25839.

Co-authored-by: Franck Bui <fbui@suse.com>
src/udev/udev-node.c