Как установить сходство процесса инициализации в Linux без использования grub? - PullRequest
0 голосов
/ 21 января 2019

Наше приложение может работать на различных архитектурах, все на машине ramfs.Для чрезвычайно быстрой обработки необходимо установить изоляцию ядра и сродство.В зависимости от архитектуры может потребоваться прикрепить его к гиперпотоку на numa 0 или numa 1. Мы не можем делать предположения до тех пор, пока машина не загрузится.

Из-за этого разнообразия мы не можем установить параметры изоляции в grub.Перезагрузка после настройки grub также не поможет, так как это машина ramfs.

Как мы можем задать все пользовательские процессы, порожденные systemd во время загрузки?Я знаю, что могу вызывать сам набор задач systemd при его вызове, но не могу найти, где это происходит.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

У меня наконец-то все заработало правильно. Вот как:

  1. Создайте скрипт по пути вашего местоположения. Я назвал мой set-system-affinity.sh. Его содержание должно включать:

    #!/bin/bash
    sed -i '/CPUAffinity/c\CPUAffinity=<whatever cpus should be configured>' /etc/systemd/system.conf
    systemctl daemon-reexec
    
  2. Создайте файл службы в /etc/systemd/system. Я назвал мой set-affinity.service.

  3. Настройте службу следующим образом:

    [Unit]
    Before=systemd-sysctl.service
    DefaultDependencies=no
    
    [Service]
    Type=oneshot
    ExecStart=/the/path/to/your/script/set-system-affinity.sh
    
    [Install]
    WantedBy=sysinit.target
    
  4. Выполнить sudo systemctl enable set-affinity.service

Если вы используете систему ramfs, как я, эти сценарии должны быть включены в образ, который загружается во время загрузки, и служба должна быть каким-либо образом включена в образ.

Как запустить сервис очень рано с помощью SYSTEMD

0 голосов
/ 21 января 2019

Как мы можем задавать все пользовательские процессы, порожденные systemd во время загрузки?

systemd.exec

Файлы конфигурации устройства дляслужбы, сокеты, точки монтирования и устройства подкачки совместно используют подмножество опций конфигурации, которые определяют среду выполнения порожденных процессов.

CPUAffinity =

Управляет привязкой ЦП к выполняемым процессам.Принимает список индексов или диапазонов ЦП, разделенных пробелами или запятыми.Диапазоны CPU определяются нижним и верхним индексами CPU, разделенными тире.Эта опция может быть указана более одного раза, и в этом случае указанные маски соответствия процессоров объединяются.Если назначена пустая строка, маска сбрасывается, все назначения до этого не будут иметь никакого эффекта


В качестве альтернативы, создайте системный модуль, который создает файл конфигурации топологии и завершает работу.Сделайте так, чтобы ваши другие сервисные модули зависели от этого модуля, чтобы они запускались после создания конфигурации топологии.Затем заставьте ваши сервисы читать файлы топологии и соответственно установить cpusets и аффинити при запуске (это можно сделать с помощью скрипта-обёртки).

...