Влияние выполнения кода ядра на среднюю нагрузку в топ?
Я пытаюсь проверить количество процессоров, которые iptables использует для NAT. Возможно, будет точнее сказать "количество ЦП, которое использует модуль ядра netfilter".
Подход, который я выбрал, состоял в том, чтобы попытаться лишить систему всех процессов пользовательского пространства, запустить потоковую передачу и проверить Load average
в топе. В этом случае средние значения загрузки довольно низкие, как будто на процессор не влияет маршрутизация пакетов.
Однако, прочитав немного о том, что означает средняя нагрузка ( здесь), кажется, что она представляет не загрузку процессора, а длину очереди процесса.
Насколько я понимаю, выполнение модулей ядра не рассматривается как процесс, поэтому он никогда не будет указан в очереди процессов.
Означает ли это, что единственный способ обнаружить перегрузку процессора с помощью кода ядра - запустить его с кодом пользовательского пространства и увидеть, что код пользовательского пространства не работает из-за нехватки процессорного времени?
Простой пример для постановки вопроса. Если бы в коде ядра была ошибка "Ожидание при занятости", как бы вы обнаружили, что ядро перегружает процессор?
1 ответ
Вы можете просто добавить свои собственные правила трассировки (для примера используйте неиспользуемый порт tcp):
for table in $(</proc/net/ip_tables_names);do while
read dsc nam foo ;do
if [ "$dsc" == "Chain" ];then
iptables -t $table -I $nam -p tcp --dport 8 -j LOG --log-prefix "start-${table}-${nam} "
iptables -t $table -A $nam -p tcp --dport 8 -j LOG --log-prefix "end-${table}-${nam} "
fi
done < <(iptables -n -t $table -L)
done
Когда правила будут готовы, вы можете установить соединение из другого места:
nc 192.168.1.31 8
(UNKNOWN) [192.168.1.31] 8 (?) : Connection refused
Чем заглянуть в свой kern.log
:
Dec 22 12:15:33 localhost kernel: [4237698.275654] start-nat-PREROUTING IN=br0 OUT= PHYSIN=eth0 MAC=01...
Dec 22 12:15:33 localhost kernel: [4237698.275662] end-nat-PREROUTING IN=br0 OUT= PHYSIN=eth0 MAC=01...
Dec 22 12:15:33 localhost kernel: [4237698.275674] start-filter-INPUT IN=br0 OUT= PHYSIN=eth0 MAC=01...
Dec 22 12:15:33 localhost kernel: [4237698.275681] end-filter-INPUT IN=br0 OUT= PHYSIN=eth0 MAC=01...
Dec 22 12:15:33 localhost kernel: [4237698.275688] start-nat-INPUT IN=br0 OUT= PHYSIN=eth0 MAC=01...
Dec 22 12:15:33 localhost kernel: [4237698.275695] end-nat-INPUT IN=br0 OUT= PHYSIN=eth0 MAC=01...
Правила этого теста могут быть удалены просто:
iptables-save |
sed -ne '/^\*/{s/^.//;h;};
/dport 8 -j LOG/{G;s/^-A\(.*\)\n\(.*\)$/iptables -t \2 -D\1/;p}
' | sh