Я знаю время в dmesg
время начиная с начальной загрузки. Но мой конкретный вопрос, на этот раз вычисляется в запуске или конце процесса, упомянутого в строке?
Почему это важно?
возьмите этот пример:
[ 4.352025] floppy0: no floppy controllers found
[ 5.718270] random: nonblocking pool is initialized
[ 94.134265] Adding 2094076k swap on /dev/sda5. Priority:-1 extents:1 across:2094076k FS**
[ 96.988453] init: bootchart main process (274) terminated with status 127
Если время, вычисляется после окончания процесса, процесс в 3-й строке должен быть взят ответственный за медленную начальную загрузку.
Но если время вычисляется с начала процесса, 2-я строка должна проводиться ответственная за него.
Но это становится более сложным, когда мы проверяем dmesg
после начальной загрузки.
Возьмите это, например:
[28047.749604] wlp3s0: associated
[28941.112855] [drm:intel_pipe_update_end [i915]] *ERROR* Atomic update failure on pipe A (start=757985 end=757986)
[31407.938694] cfg80211: World regulatory domain updated:
[31407.938699] cfg80211: DFS Master region: unset
Этот разрыв 2466 не должен иметь никакого полезного значения.
Я много раз вижу существует беспорядок о который строка в dmesg
должно быть хранение, ответственное за медленную начальную загрузку.
Как мы можем сделать чувство времени в dmesg?
dmesg
не надежный тест того, сколько времени процесс начальной загрузки идет или где существуют узкие места. Согласно Wikipedia page
:
, Когда первоначально загружено, компьютерная система загружает свое ядро в память. На этом этапе драйверы устройств, существующие в ядре, настраиваются для управления соответствующей аппаратной. Такие драйверы, а также другие элементы в ядре, могут произвести вывод ("сообщения"), сообщив, что и присутствие модулей и значения любых параметров, принятых
, Другими словами, dmesg
само просто, собирают информацию, это - драйверы и другие системные процессы, которые производят те сообщения, и они могут произвести их в любом моменте времени. Между теми сообщениями там может или могло не быть другое порождение процессов, таким образом, это не индикатор сколько времени начальные загрузки системы.
dmesg
также собирает сообщения непрерывно из кольцевого буфера, таким образом, Ваша задержка 2466 не указывает на некоторый процесс зависания, просто событие имело место 2466 позже и независимо от того, что процесс был активен, в то время просто производит сообщение ядра.
то, Что Вы действительно хотите, однако, bootchart, который используется специально для цели найти узкие места в процессе начальной загрузки. Я только видел, что это быть сосланным через несколько форумов и на этом сайте, но никогда не использоваться меня, так не может дать Вам больше информации, чем это
Команда dmesg читает буфер printk ядра использование режима доступа пространства пользователя через /dev/kmsg
. Каждая запись имеет монотонная метка времени в микросекундах , который установлен, когда запись в журнале создается.
, Таким образом, вопрос не может быть, которые добавляют метку времени к dmesg (или ядро) зарегистрируется, но должен быть, когда ядро создаст запись в журнале для определенного действия, это делает.
, Поскольку я предполагаю, это может отличаться от действия до действия. Когда случай происходит к ядру, т.е. включите USB-устройство, ядро зарегистрирует это, как только это имеет применимую информацию. Когда ядро делает запланированную задачу, имеет смысл регистрировать результаты, когда задание сделано. Если это - сложное задание, возможно, это производит некоторые записи в журнале, в то время как это работает, но поскольку я предполагаю обычно после чего-то интересного, произошел, или небольшого количества времени не стало.
то, Как можно получить доступ к буферу printk ядра, объяснено здесь .
Поэтому, если Вы особенно хотите знать, зарегистрирована ли определенная запись вначале или конец действия, необходимо посмотреть в ядре - или модуль-sorcecode когда вызов программы функция журнала.
Читайте man dmesg
, особенно:
-d, --show-delta
Display the timestamp and time delta spent between messages. If
used together with --notime then only the time delta without the
timestamp is printed.
-T, --ctime
Print human readable timestamps. The timestamp could be
inaccurate!
The time source used for the logs is not updated after system
SUSPEND/RESUME.
значение метки времени является "микросекундами начиная с начальной загрузки/1000000" (похож "на секунды к 6 десятичным разрядам). Метка времени установлена на 0
при начальной загрузке.
Как сказанный @cmks, "микросекунды, так как начальная загрузка" значение копируется в запись в журнале, когда запись в журнале вставляется в буфер ядра. dmesg
интерпретирует это значение несколько различных путей. dmesg -T -d | less
покажет дельты. Я действительно читал Вопрос и ответ от @cmks