hi
время, проведенное, обрабатывая аппаратные прерывания. Аппаратные прерывания сгенерированы устройствами (сетевые платы, контроллер клавиатуры, внешний таймер, аппаратные датчики...), когда они должны предупредить о чем-то ЦП (данные прибыли, например).
Так как они могут происходить очень часто, и так как они по существу блокируют текущий ЦП, в то время как они работают, обработчики аппаратных прерываний ядра записаны, чтобы быть максимально быстрыми и простыми.
Если долго или сложная обработка должен быть сделан, эти задачи задерживаются с помощью вызова механизма softirqs
. Они планируются независимо, может работать на любом ЦП, может даже работать одновременно (ничего подобного не верен для обработчиков аппаратных прерываний).
Часть о твердом IRQs блокирование текущего ЦП и части о softirqs
способность работать никуда не точно корректна, могут быть ограничения и некоторые трудно, что IRQs может прервать других.
Как пример, "данные, полученные" аппаратное прерывание от сетевой платы, могли просто хранить информацию "карта ethX, должен быть обслужен" где-нибудь и расписание a softirq
. softirq
была бы вещь, которая инициировала маршрутизацию действительного пакета.
si
представляет время, проведенное в них softirqs
.
Хорошее чтение о softirq
механизмом (с небольшим количеством истории также) является Matthew Wilcox, я Сделаю Это Позже: Softirqs, Tasklets, Нижние половины, Очереди Задачи, Очереди заданий и Таймеры (PDF, 64k).
st
, "время кражи", только релевантно в виртуализированных средах. Это представляет время, когда реальный ЦП не был доступен текущей виртуальной машине — это было "украдено" от этого VM гипервизором (или для выполнения другого VM, или для его собственных потребностей).
Процессорное время бухгалтерский документ от IBM имеет больше информации во время кражи и ЦП, считающего в виртуализированных средах. (Это нацелено на аппаратные средства типа zSeries, но общее представление является тем же для большинства платформ.)
Канонический инструмент для этого был бы sed
.
sed -n -e 's/^.*stalled: //p'
Подробное объяснение:
-n
средства не распечатать что-либо по умолчанию.-e
сопровождается командой sed.s
заменяющая команда шаблона.^.*stalled:
соответствует шаблону, который Вы ищете плюс любой предыдущий текст (.*
значение любого текста, с начальной буквой ^
сказать, что матч начинается в начале строки). Отметьте это если stalled:
несколько раз происходит на строке, это будет соответствовать последнему вхождению.stalled:
, заменен пустой строкой (т.е. удален).p
средства распечатать преобразованную строку.Если Вы хотите сохранить часть соответствия, используйте обратную ссылку: \1
в сменной детали определяет то, что в группе \(…\)
в шаблоне. Здесь, Вы могли записать stalled:
снова в сменной детали; эта функция полезна, когда шаблон, который Вы ищете, является более общим, чем простая строка.
sed -n -e 's/^.*\(stalled: \)/\1/p'
Иногда Вы будете хотеть удалить часть строки после соответствия. Можно включать его в соответствие включением .*$
в конце шаблона (любой текст .*
сопровождаемый к концу строки $
). Если Вы не помещаете ту часть в группу, на которую Вы ссылаетесь в тексте замены, конец строки не будет в выводе.
Как дальнейшая иллюстрация групп и обратных ссылок, эта команда подкачивает часть перед соответствием и частью после соответствия.
sed -n -e 's/^\(.*\)\(stalled: \)\(.*\)$/\3\2\1/p'
Другой канонический инструмент, который Вы уже используете: grep
:
Например:
grep -o 'stalled.*'
имеет тот же результат, что и вторая опция Жиля:
sed -n -e 's/^.*\(stalled: \)/\1/p'
Флаг -o
возвращает -только-соответствующую
часть выражения, так что не вся строка, которая - разумеется - обычно выполняется grepом.
Для удаления "stalled :" из вывода можно использовать третий канонический инструмент, cut:
grep -o 'stalled.*' | cut -f2- -d:
Команда cut
использует разделитель :
и распечатывает поле 2 до конца. Конечно, это дело предпочтений, но синтаксис cut
я нахожу очень легким для запоминания.
Я использовал ifconfig | grep eth0 | cut -f3- -d:
, чтобы взять этот
[root@MyPC ~]# ifconfig
eth0 Link encap:Ethernet HWaddr AC:B4:CA:DD:E6:F8
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:78998810244 errors:1 dropped:0 overruns:0 frame:1
TX packets:20113430261 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:110947036025418 (100.9 TiB) TX bytes:15010653222322 (13.6 TiB)
и сделать его таким, как это
[root@MyPC ~]# ifconfig | grep eth0 | cut -f3- -d:
C4:7A:4D:F6:B8
Еще один канонический инструмент, который вы рассматривали awk
, можно использовать со следующей строкой:
awk -F"stalled" '/stalled/{print $2}' messages
Подробное объяснение:
-F
определяет разделитель для строки, т. е. «остановка». Все до разделителя адресуется с помощью $1
, а все после с помощью $2
. /reg-ex/
Ищет подходящее регулярное выражение, в данном случае "остановлено". {print $<n>}
-выводит n столбцов. Поскольку ваш разделитель определен как остановленный, все после остановленного считается вторым столбцом. там кажется более простой способ. просто сделай:
sed "s/installed.*//g"
, который удаляет все слова после «установлен».
for i in *
do
se=$(echo $i|sed "s/---.*//g")
echo $se
mv "$i" $se
done
sed … <messages
, так как Вы хотите обработать данные из файла. Для действия на данные, произведенные другой командой, Вы использовали бы канал:somecommand | sed …
. – Gilles 'SO- stop being evil' 08.11.2011, 03:02sed 's/^.*stalled//'
с тех пор-r
характерно для Linux и не работает над другими системами, такими как macOS, и здесь Вы не извлекаете пользы из него. – Gilles 'SO- stop being evil' 09.08.2017, 13:19