Вы - более обеспеченное использование awk или sed
awk '/CK$/,/D$/' file.txt
ИЛИ
sed -n '/CK$/,/D$/p' file.txt
Если Вы настаиваете на grep, вот является GNU grep путем
grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt
Здесь
-P
активирует perl-regexp
-z
разделитель строки наборов к NUL. Это вынуждает grep рассматривать весь файл как одну одну строку
-o
печать, только соответствующая
(?s)
активирует PCRE_DOTALL, таким образом, .
находит любую символьную или новую строку
\N
соответствия что-либо кроме новой строки
.*?
находит. в нежадном режиме
(?<=..)
оглянуться утверждение
(?=..)
предварительное утверждение
Полный бестактовый режим, который активируется, например, с помощью. nohz_full=cpux-cpuy
действительно эффективен, только если есть только одна работающая задача на каждом nohz_full
ЦП:
Adaptive-ticks does not do anything unless there is only one runnable task for a given CPU, even though there are a number of other situations where the scheduling-clock tick is not needed.
(ср. Документация/таймеры/НО _HZ.txt)
Таким образом, если вы проверяете nohz_full
ЦП с помощью ps, имеет смысл явно искать исполняемые задачи -, например.:
$ ps -e -L -o cpuid,pid,lwp,state,pri,rtprio,class,wchan:20,comm \
| awk '$1 == '$mycpunr
(т.е. посмотрите на столбец состояния)
Это означает, что можно иметь некоторые дополнительные задачи на nohz_full
ЦП, если они не запускаются.
Всего лишь nohz_full=
, ничто не мешает ядру планировать пользовательские/ядерные потоки на выбранных процессорах. Таким образом, обычно также изолируются эти процессоры, чтобы избежать вмешательства со стороны других потоков. Например, с:
nohz_full=cpux-cpuy isolcpus=cpux-cpuy
(ср. Параметры ядра Linux)
С этими параметрами поток на изолированном nohz_full
ЦП все еще может быть прерван, например. таймерами и обратными вызовами RCU.
Таким образом, если вы хотите свести к минимуму задержку вашего изолированного потока, вам необходимо отключить другие источники прерываний.
Вы можете проверить /proc/timer_list
таймеры, которые все еще активны на изолированных ЦП.
Типичными примерами таймеров, которые могут отображаться на изолированном ЦП, являются watchdog_timer_fn
и таймер, связанный с исключениями проверки машины (MCE ).
Вы можете отключить эти прерывания с помощью дополнительных параметров ядра , например.:
nowatchdog mce=ignore_ce
Просмотр счетчиков /proc/interrupts
— хороший способ проверить аппаратные прерывания. Другим источником прерываний являются Softirq, поэтому также необходимо проверять счетчики /proc/softirqs
.
Например, чтобы свести к минимуму прерывания, связанные с RCU, на изолированных ЦП, можно разгрузить обратные вызовы RCU на потоки ядра, перенести их на не -изолированный ЦП и освободить изолированный ЦП от необходимости уведомлять поток обратного вызова, добавив ядро. опция:
rcu_nocb_poll
Этот вариант требует, чтобы rcu_nocbs=
был эффективным,но nohz_full=
уже подразумевает rcu_nocbs=
для указанных процессоров.
Обратите внимание, что вы явно должны переместить разгруженные потоки обратного вызова RCU на вспомогательный ЦП -, явно задав сходство ЦП для этих потоков. Например, с тунцом (на ЦП 0):
# tuna -U -t 'rcu*' -c 0 -m
В документе ядра Documentation/kernel -per -CPU -kthreads.txt описаны дополнительные источники прерываний (, также известные как джиттер ОС ), и показано, как их найти с помощью запуск тестовой нагрузки с включенной трассировкой.