Interface Bridge causa alta utilização da CPU

Interface Bridge causa alta utilização da CPU

Estamos enfrentando um problema estranho com um servidor que temos em nosso laboratório. Especificamente, o servidor mostra alta utilização da CPU em processos de baixa prioridade (cor azul em htop), com 50% dos núcleos parecendo ter 100% de utilização, conforme mostrado na captura de tela abaixo.

htop alta utilização

Porém, na lista de processos em execução não há nenhum processo que consuma esta CPU:

$ ps aux --sort pcpu | head -n 20
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    10:42   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    10:42   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   10:42   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    10:42   0:00 [kworker/u96:0]
root         8  0.0  0.0      0     0 ?        S    10:42   0:00 [rcu_sched]
root         9  0.0  0.0      0     0 ?        S    10:42   0:00 [rcu_bh]
root        10  0.0  0.0      0     0 ?        S    10:42   0:00 [migration/0]
root        11  0.0  0.0      0     0 ?        S    10:42   0:00 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    10:42   0:00 [watchdog/1]
root        13  0.0  0.0      0     0 ?        S    10:42   0:00 [migration/1]
root        14  0.0  0.0      0     0 ?        S    10:42   0:00 [ksoftirqd/1]
root        16  0.0  0.0      0     0 ?        S<   10:42   0:00 [kworker/1:0H]
root        17  0.0  0.0      0     0 ?        S    10:42   0:00 [watchdog/2]
root        18  0.0  0.0      0     0 ?        S    10:42   0:00 [migration/2]
root        19  0.0  0.0      0     0 ?        S    10:42   0:00 [ksoftirqd/2]
root        21  0.0  0.0      0     0 ?        S<   10:42   0:00 [kworker/2:0H]
root        22  0.0  0.0      0     0 ?        S    10:42   0:00 [watchdog/3]
root        23  0.0  0.0      0     0 ?        S    10:42   0:00 [migration/3]
root        24  0.0  0.0      0     0 ?        S    10:42   0:00 [ksoftirqd/3]

Causa do problema: Depois de rastejar um pouco, descobrimos que ao desabilitar a interface bridge que configuramos no servidor ( ifdown br0), a utilização da CPU cai para estados normais após 5 a 10 segundos. Se reativarmos a ponte, a utilização aumentará novamente, semelhante à imagem acima.

O que tentamos: Tentamos desabilitar libvirtdo serviço caso isso fosse um problema com as VMs no servidor, mas não há esperança nisso. Também desabilitamos dockere containerd, mas nada mudou também. Também removemos e reinstalamos bridge-utilsno servidor e também renomeamos a interface para br1, mas o problema ainda persiste. Por último, também inicializamos com uma versão de kernel diferente, mas ainda nada.

Alguém já enfrentou algum problema semelhante antes?

Especificações do servidor:

$ uname -a
Linux cheetara 4.4.0-174-generic #204-Ubuntu SMP Wed Jan 29 06:41:01 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="16.04.7 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.7 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

---- Editar Nosso servidor possui duas interfaces de rede p4p1e p4p2. Atribuímos um IP estático a cada interface através do servidor DHCP (por conveniência, digamos que sejam 137.100.1.11e 137.100.1.12). Nosso /etc/network/interfacesarquivo está assim:

auto lo
iface lo inet loopback

auto p4p1
iface p4p1 inet manual

auto br0
iface br0 inet static
  address 137.100.1.11
  broadcast 137.100.1.255
  netmask 255.255.255.0
  gateway 137.100.1.200
  dns-nameservers 137.100.1.210 137.100.1.220 8.8.8.8 8.8.4.4
  bridge_ports p4p1

auto ib0
iface ib0 inet static
  address 10.1.0.2
  netmask 255.255.255.0

auto ib1
iface ib1 inet static
  address 10.0.0.2
  netmask 255.255.255.0

onde ib0e ib1são interfaces infiniband não relacionadas à rede externa.

Além disso, o roteamento é o seguinte:

$ ip route show
default via 137.100.1.200 dev br0 onlink
10.0.0.0/24 dev ib1  proto kernel  scope link  src 10.0.0.2 linkdown 
10.1.0.0/24 dev ib0  proto kernel  scope link  src 10.1.0.2 linkdown 
147.102.37.0/24 dev br0  proto kernel  scope link  src 147.102.37.24 

Responder1

Para velocidades mais altas (no meu caso foram 10 Gbps), o recurso de descarregamento da NIC não está funcionando corretamente. Conseqüentemente, a CPU está cuidando de todo o trabalho pesado. Os pacotes são manipulados pela pilha de rede do kernel.

A ativação de quadros Jumbo (tamanho MAX MTU) e o aumento do tamanho do buffer de anel reduziram a carga na CPU.

ip link set dev <interface> mtu <value>
ethtool -G <interface> rx <value> tx <value>

Se o recurso de descarregamento da NIC estiver disponível, ele deverá ser ativado.

ethtool --offload <interface> tx on rx on

Você também pode usar outros métodos de ajuste de desempenho listados aqui. Fonte:https://sysadmin.miniconf.org/2016/lca2016-jamie_bainbridge-network_performance_tuning.html

informação relacionada