
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.
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 libvirtd
o serviço caso isso fosse um problema com as VMs no servidor, mas não há esperança nisso. Também desabilitamos docker
e containerd
, mas nada mudou também. Também removemos e reinstalamos bridge-utils
no 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 p4p1
e p4p2
. Atribuímos um IP estático a cada interface através do servidor DHCP (por conveniência, digamos que sejam 137.100.1.11
e 137.100.1.12
). Nosso /etc/network/interfaces
arquivo 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 ib0
e ib1
sã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