процедура в Linux, сохраняются ли измененные значения после перезагрузки?

#linux #linux-kernel

#linux #linux-ядро

Вопрос:

я хочу изменить /proc/sys/kernel/sched_rt_runtime_us . Будут ли изменения в файле сохраняться даже после перезагрузки? когда ядро считывает это обновленное значение?

Ответ №1:

Нет, /proc не является постоянным. Однако большинство дистрибутивов Linux будут считывать начальные значения из файла, такого как /etc/sysctl.conf . В этом случае вы можете установить это значение sysctl.conf как:

 kernel.sched_rt_runtime_us = yourvaluehere
  

man sysctl Подробнее см..

Комментарии:

1. я создал файл /etc/sysctl.conf выше, а затем выполнил запуск $ service procps. не видел обновленного значения в файле /proc . Обновляется ли он?

Ответ №2:

/ proc предоставляет значения структур данных, внутренних для ядра, которые хранятся в ОЗУ, поэтому нет, изменение не является постоянным. Если вы хотите, чтобы эффект сохранялся постоянно, вы должны либо добавить строку, изменяющую значение, в сценарий инициализации, чтобы значение изменялось во время загрузки, либо вы должны изменить значение по умолчанию в исходном коде ядра. Для некоторых значений proc (но, вероятно, не для этого) вы также можете использовать параметр командной строки ядра.

Комментарии:

1. Также, если я изменю /proc/sys/kernel/sched_rt_runtime_us , вступит ли это в силу немедленно?

2. Загрузчик передает ядру командную строку с определенными параметрами и аргументами, которые влияют на поведение ядра во время выполнения. Хотя здесь это не очень актуально. Мне нужно было бы взглянуть на исходный код, чтобы быть уверенным на 100%, но я уверен, что изменение sched_rt_runtime_us вступит в силу немедленно.

3. когда я пытаюсь его отредактировать. в нем говорится: «sched_rt_runtime_us» E667: сбой Fsync. Есть идеи, что здесь не так?

4. Вы не должны редактировать файлы proc с помощью редактора, а вместо этого читать и записывать их с помощью оболочки (cat для чтения, echo для записи). Например, если вы хотите установить значение sched_rt_runtime_us равным 1000, вы должны ввести следующее: echo 1000 > /proc/sys/kernel/sched_rt_runtime_us

5. Использование синтаксиса Antti выше не сработало для меня даже с sudo. Вместо этого мне пришлось написать это следующим образом: sudo sysctl -w kernel.sched_rt_runtime_us = 1000000 (миллион микросекунд = 1 секунда).