[make-initrd] [PATCH 0/3] Reimplement ueventd

Alexey Gladkov legion at altlinux.ru
Sat May 13 14:50:50 MSK 2023


On Thu, May 04, 2023 at 03:42:49PM +0200, Alexey Gladkov wrote:
> # Предыстория.
> 
> Когда-то давно в initramfs был один цикл, в котором обрабатывались все эвенты из
> udev и в конце каждой итерации производилась проверка возможности загрузиться.
> Это давало предсказуемый порядок, но создавало проблему с производительностью.
> Плюс ко всему этому требовался эвент, чтобы дать толчёк для проверки возможности
> дальнейшей загрузки.
> 
> Чтобы решить эти проблемы единый цикл был разделён на ueventd (обработчик
> эвентов) и polld (периодическое выполнение скриптов). Это позволило развязать
> эвенты и условия дальнейшей загрузки.
> 
> С появлением необходимости обработки эвентов от сетевых устройств, конфигурации
> терминалов и некоторых других, в ueventd была реализована поддержка нескольких
> очередей. Эвенты каждой очереди обрабатываются последовательно, но каждая
> очередь обрабатывается параллельно.
> 
> В то время распараллеливание было сделано через использование утилиты inotify из
> busybox. Это работало, но поскольку inotify это утилита общего назначения, то
> оптимизировать или кастомизировать работу демона было очень затруднительно.
> 
> # Изменения.
> 
> Ueventd был переписан с нуля на си. Это открыло возможность для оптимизаций,
> увеличило читабильность кода, дало возможность уйти от передачи эвентов через
> файловую систему.
> 
> Как следствие сейчас пропала необходимость в отдельном процессе polld. Его
> фунционал может обратно вернуться в ueventd в качестве отдельной очереди. Плюс
> проверка rootdelay теперь находится в этой отдельной очереди.
> 
> Возможно стоит пойти дальше и уйти от периодической проверки создав опять же
> поток эвентов и "базу данных". Но это справедливо и для текущей архитектуры
> эвентов.

Смерджено с follow-up исправлениями. Также смерджил патчсет создающий
общую библиотеку для утилит на си внутри initramfs.

> ---
> 
> Alexey Gladkov (3):
>   Reimplement ueventd
>   Replace polld by uevent queue
>   feature/kickstart: Reset rootdelay timer after kickstart
> 
>  data/bin/initrd-sh-functions                  |   8 +
>  data/bin/uevent-sh-functions                  |   3 +
>  data/etc/rc.d/init.d/poll                     |  25 +-
>  data/etc/rc.d/init.d/uevent                   |   9 +-
>  data/lib/uevent/each/post/.gitignore          |   0
>  data/lib/uevent/each/post/system-bootable     |   4 -
>  data/lib/uevent/extenders/.gitignore          |   0
>  data/lib/uevent/handlers/poll/100-extenders   |  22 +
>  data/lib/uevent/handlers/poll/300-boot-method |  29 +
>  .../poll/400-rootdelay}                       |  13 +-
>  data/sbin/polld                               |  45 --
>  data/sbin/process-boot-method                 |  16 -
>  data/sbin/ueventd                             | 180 ------
>  data/sbin/ueventd-queue                       |  65 +++
>  datasrc/ueventd/Makefile.mk                   |  13 +
>  datasrc/ueventd/logging.c                     |  63 ++
>  datasrc/ueventd/memory.c                      |  32 +
>  datasrc/ueventd/path.c                        |  80 +++
>  datasrc/ueventd/process.c                     |  17 +
>  datasrc/ueventd/queue-processor.c             | 116 ++++
>  datasrc/ueventd/ueventd.c                     | 551 ++++++++++++++++++
>  datasrc/ueventd/ueventd.h                     |  76 +++
>  .../kickstart/data/etc/rc.d/init.d/kickstart  |  11 +-
>  23 files changed, 1108 insertions(+), 270 deletions(-)
>  create mode 100644 data/lib/uevent/each/post/.gitignore
>  delete mode 100755 data/lib/uevent/each/post/system-bootable
>  create mode 100644 data/lib/uevent/extenders/.gitignore
>  create mode 100755 data/lib/uevent/handlers/poll/100-extenders
>  create mode 100755 data/lib/uevent/handlers/poll/300-boot-method
>  rename data/lib/uevent/{extenders/100-rootdelay => handlers/poll/400-rootdelay} (80%)
>  delete mode 100755 data/sbin/polld
>  delete mode 100755 data/sbin/process-boot-method
>  delete mode 100755 data/sbin/ueventd
>  create mode 100755 data/sbin/ueventd-queue
>  create mode 100644 datasrc/ueventd/Makefile.mk
>  create mode 100644 datasrc/ueventd/logging.c
>  create mode 100644 datasrc/ueventd/memory.c
>  create mode 100644 datasrc/ueventd/path.c
>  create mode 100644 datasrc/ueventd/process.c
>  create mode 100644 datasrc/ueventd/queue-processor.c
>  create mode 100644 datasrc/ueventd/ueventd.c
>  create mode 100644 datasrc/ueventd/ueventd.h
> 
> -- 
> 2.33.7
> 

-- 
Rgrds, legion



More information about the Make-initrd mailing list