Вопрос или проблема
Я пытаюсь использовать iotop
, чтобы определить, ожидают ли процессоры ввода-вывода в любой момент для конкретной программы под названием bwa
(это программа для выравнивания последовательностей следующего поколения). Если я запускаю iotop
без указания конкретного процесса (-p pid
), я получаю всю ожидаемую информацию, включая SWAPIN
и IO>
, но процесс, который меня интересует, не отображается в списке. Если я затем указываю процесс, который меня интересует, iotop
жалуется, что “CONFIG_TASK_DELAY_ACCT не включен в ядре”. Для уверенности я проверил в конфигурационном файле ядра (/boot/config-3.7.10-1.11-desktop
), что CONFIG_TASK_DELAY_ACCT
включен (CONFIG_TASK_DELAY_ACCT=y
).
Вопросы:
- Что может заставить
iotop
думать, чтоCONFIG_TASK_DELAY_ACCT
не включен для конкретного процесса, когда я знаю, что он включен? - Могу ли я это исправить?
- Не упустил ли я что-то очевидное?
Обновление:
Из документации ядра по учету задержек:
Учет задержек по умолчанию отключен при загрузке. Чтобы включить, добавьте:
delayacct
в параметры загрузки ядра. Либо используйте
sysctl kernel.task_delayacct
для переключения состояния во время работы. Обратите внимание, что только задачи, запущенные после включения, будут иметь информацию оdelayacct
.
Из iotop-c
справки:
Начиная с версии ядра Linux 5.14.x
task_delayacct
настраивается во время выполнения и по умолчанию отключен. Эта настройка может быть изменена в интерактивном режиме с помощью сочетания клавиш Ctrl-T. В пакетном режиме выводится предупреждение, когда настройка отключена. Из командной строки это можно включить командой:$ sudo sysctl kernel.task_delayacct=1
и снова отключить командой:
$ sudo sysctl kernel.task_delayacct=0
Рекомендуется оставлять эту опцию отключенной, если вы не используете эту или другую программу мониторинга, так как при включении она влияет на производительность системы.
Блог Брока описывает, как это можно сделать в Ubuntu:
-
Отредактируйте
/etc/default/grub
, добавив “delayacct” как опцию для записи GRUB_CMDLINE_LINUX_DEFAULT. Если вы ранее не изменяли эту строку, она изменится сGRUB_CMDLINE_LINUX_DEFAULT=""
на
GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
-
Запустите “sudo update-grub”
- Перезагрузите систему, и все должно заработать
Углубляясь в фантастический ответ и объяснение @Irfan Latif, я использую это как псевдоним zsh:
alias iotopd='bash -c "sudo sysctl kernel.task_delayacct=1 && sudo iotop ; sudo sysctl kernel.task_delayacct=0"'
Обратите внимание на ; здесь после iotop, так как это будет выполнено при каждом завершении, а не только успешном.
Этот псевдоним установит параметр ядра, выполнит команду, а затем вернет его в 0. Полезно, если вы запускаете это только в одной сессии, но будет неудобно с несколькими пользователями.
Вы также можете запустить это как сценарий оболочки, что полезно, так как он завершает работу при выходе.
#!/bin/bash
# Этот скрипт включает учет задержек задач в ядре Linux, запускает iotop,
# затем при выходе устанавливает task_delayacct обратно в 0.
# Отключите учет задержек задач при выходе из скрипта
disable_task_delayacct() {
sudo sysctl kernel.task_delayacct=0
}
# Перехватите сигнал EXIT, чтобы вызвать функцию disable_task_delayacct
trap 'disable_task_delayacct' EXIT
# Включите учет задержек задач
sudo sysctl kernel.task_delayacct=1
# Запустите iotop с административными привилегиями
sudo iotop
Вы можете просто запустить это без перезагрузки, выполнив такую команду:
sysctl kernel.task_delayacct=1
К сожалению, некоторые другие ответы не помогли мне сегодня, но решением для меня было установить и использовать iotop-c
, который работает отлично в этой ситуации.
sudo apt install iotop-c
Ответ или решение
Решение проблемы с iotop и CONFIG_TASK_DELAY_ACCT
Введение
В данной статье мы рассмотрим проблему, связанную с утилитой iotop и сообщением об ошибке "CONFIG_TASK_DELAY_ACCT not enabled in kernel", которое возникает при попытке отслеживания специфического процесса, например, программы BWA для выравнивания последовательностей. Мы проанализируем возможные причины этой проблемы, пути ее решения и проверим, не упустили ли мы что-то важное.
Причины возникновения проблемы
-
Отсутствие активированной опции
delayacct
при загрузке: Несмотря на то что в конфигурационном файле ядра (/boot/config-3.7.10-1.11-desktop
) параметрCONFIG_TASK_DELAY_ACCT=y
указывает на то, что поддержка учета задержек включена, по умолчанию эта возможность может быть выключена при запуске системы. Без явного включенияdelayacct
в параметрах загрузки ядро не будет собирать данные о задержках. -
Динамическое управление параметрами: С версии ядра 5.14.x вариант учета задержек (task delay accounting) можно включать и отключать в реальном времени. Если опция была выключена до запуска процесса BWA, хранящиеся за ним данные о задержках не будут доступны для iotop.
-
Различия в утилитах: Если вы просто используете
iotop
, возможно, стоит попробоватьiotop-c
, который может работать более стабильно в вашем контексте.
Решение проблемы
-
Включение
delayacct
в параметрах загрузки: Если вы хотите, чтобы учет задержек был активирован после каждой перезагрузки, вам необходимо отредактировать файл конфигурации загрузчика GRUB:- Откройте
/etc/default/grub
и измените строкуGRUB_CMDLINE_LINUX_DEFAULT
следующим образом:GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
- После этого выполните
sudo update-grub
и перезагрузите систему.
- Откройте
-
Включение параметра в реальном времени: Вы также можете временно включить учет задержек, выполнив следующую команду до запуска
iotop
:sudo sysctl kernel.task_delayacct=1
Обратите внимание, что эта команда активирует учет задержек только для процессов, запущенных после ее выполнения.
-
Использование
iotop-c
: Убедитесь, что вы используетеiotop-c
, который более устойчив к подобным проблемам:sudo apt install iotop-c sudo iotop-c
Проверка на упущенное
- Убедитесь в том, что процесс BWA запущен под тем же пользователем: Если вы запускаете
iotop
с правами суперпользователя, проверьте, что iotop имеет доступ к информации о процессе BWA. - Проверьте логи: Ознакомьтесь с системными логами через
dmesg
или/var/log/syslog
, чтобы выяснить, нет ли связанных ошибок, которые могли бы повлиять на собираемую информацию о задержках. - Права доступа: Убедитесь, что у вас достаточно привилегий для мониторинга данного процесса.
Заключение
В этой статье мы рассмотрели проблематику, связанную с использованием iotop для мониторинга задержек процесса, и предложили несколько решений для активации учета задержек в ядре Linux. Проверка и активация параметра delayacct
должны помочь вам получить нужную информацию без дополнительных неудобств. В случае возникновения дальнейших вопросов вы можете обратиться за помощью в соответствующие сообщества или форумы, такие как Stack Overflow или специализированные группы по Linux.