iotop жалуется “CONFIG_TASK_DELAY_ACCT не включен в ядре” только для определенного процесса

Вопрос или проблема

Я пытаюсь использовать 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).

Вопросы:

  1. Что может заставить iotop думать, что CONFIG_TASK_DELAY_ACCT не включен для конкретного процесса, когда я знаю, что он включен?
  2. Могу ли я это исправить?
  3. Не упустил ли я что-то очевидное?

Обновление:

Из документации ядра по учету задержек:

Учет задержек по умолчанию отключен при загрузке. Чтобы включить, добавьте:

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:

  1. Отредактируйте /etc/default/grub, добавив “delayacct” как опцию для записи GRUB_CMDLINE_LINUX_DEFAULT. Если вы ранее не изменяли эту строку, она изменится с

    GRUB_CMDLINE_LINUX_DEFAULT=""
    

    на

    GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
    
  2. Запустите “sudo update-grub”

  3. Перезагрузите систему, и все должно заработать

Углубляясь в фантастический ответ и объяснение @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 для выравнивания последовательностей. Мы проанализируем возможные причины этой проблемы, пути ее решения и проверим, не упустили ли мы что-то важное.

Причины возникновения проблемы

  1. Отсутствие активированной опции delayacct при загрузке: Несмотря на то что в конфигурационном файле ядра (/boot/config-3.7.10-1.11-desktop) параметр CONFIG_TASK_DELAY_ACCT=y указывает на то, что поддержка учета задержек включена, по умолчанию эта возможность может быть выключена при запуске системы. Без явного включения delayacct в параметрах загрузки ядро не будет собирать данные о задержках.

  2. Динамическое управление параметрами: С версии ядра 5.14.x вариант учета задержек (task delay accounting) можно включать и отключать в реальном времени. Если опция была выключена до запуска процесса BWA, хранящиеся за ним данные о задержках не будут доступны для iotop.

  3. Различия в утилитах: Если вы просто используете iotop, возможно, стоит попробовать iotop-c, который может работать более стабильно в вашем контексте.

Решение проблемы

  1. Включение delayacct в параметрах загрузки: Если вы хотите, чтобы учет задержек был активирован после каждой перезагрузки, вам необходимо отредактировать файл конфигурации загрузчика GRUB:

    • Откройте /etc/default/grub и измените строку GRUB_CMDLINE_LINUX_DEFAULT следующим образом:
      GRUB_CMDLINE_LINUX_DEFAULT="delayacct"
    • После этого выполните sudo update-grub и перезагрузите систему.
  2. Включение параметра в реальном времени: Вы также можете временно включить учет задержек, выполнив следующую команду до запуска iotop:

    sudo sysctl kernel.task_delayacct=1

    Обратите внимание, что эта команда активирует учет задержек только для процессов, запущенных после ее выполнения.

  3. Использование 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.

Оцените материал
Добавить комментарий

Капча загружается...