Влияние выполнения кода ядра на среднюю нагрузку в топ?

Я пытаюсь проверить количество процессоров, которые 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
Другие вопросы по тегам