Olá. Aqui é a Komiya do OPS.
É assim que calcular o valor a ser colocado em RPS_cpus de acordo com o número de núcleos de CPU.
Há um pedido para distribuir o processamento de interrupções de rede entre múltiplos núcleos. (Especialmente servidores de cache)
Confiei em pessoas que pudessem fazer isso e pedi que dessem o melhor até agora.
[shell]# core=1 # eco "obase=16; ibase=10; $( ( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 1 # core=2 # eco "obase=16; ibase=10; $( ( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 3 # core=4 # eco "obase=16; ibase=10; $(( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' f # core=5 # echo "obase=16; ibase=10; $(( ( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 1f[/shell]
Receita do chef baseada nela (desculpa, bash)
[shell]$ vim site-cookbooks/base_setting/recipes/rps_cpus.rb -------------- pacote "bc" não_if\ "qual bc" ação :install end
Pacote "irqbalance" não_if\ "rpm -qa|grep irqbalance" ação: instalar fim
O serviço "IRQBALANCE" suporta :status => true, :restart => true, :reload => :true action [ :enable, :start ] fim
rps_path="/sys/class/net/eth0/queues/rx-0/rps_cpus" rps_flow_path="/sys/class/net/eth0/queues/rx-0/rps_flow_cnt" rps_sock_path="/proc/sys/net/core/rps_sock_flow_entries"
bash "set-rps_flow" faz apenas_if "ls #{rps_flow_path}" código <-EOC echo="" 4096=""> #{rps_flow_path} cpucore='cat /proc/cpuinfo|grep -c process' sock_num='echo "4096 * ${cpucore}"|bc -l' echo ${sock_num} > #{rps_sock_path} cpubitmap='echo "obase=16; ibase=10; $(( 2 ** ${cpucore})) -1" | bc | tr '[A-Z]' '[a-z]'' eco ${cpubitmap} > #{rps_path} fim do EOC --------------[/shell]
< referência>
No CentOS 6.2, tentei distribuir o processamento de interrupções de rede para múltiplos núcleos usando RPS/RFS Embora seja uma NIC habilitada por RSS, o processamento de interrupções não é distribuído para múltiplos núcleos... Como o irqbalance não estava funcionando, documento RH Informações sobre como especificar o valor de rps_cpus
------------------------------
Exemplo 1:
Para usar CPU 0, 1, 2 e 3 para a fila rx-0 em eth0, defina o valor de rps_cpus para f (1+2+4+8 = 15 em hexadecimal) da seguinte forma:
Exemplo 2:
Para usar as CPUs 4, 5, 6 e 7 para a fila tx-0 em eth0, defina o valor de rps_cpus para f0 (16+32+64+128 = 240 em hexadecimal) da seguinte forma:
------------------------------
Em VIOPS06, falei sobre os casos mais recentes do kernel Linux, como RPS e RFS.
1. Por exemplo, o RPS&RFS foi implementado para garantir suporte eficiente multi-core para aplicações com NICs não compatíveis com RSS, mas e quanto a ambientes virtualizados?
Houve um patch para suporte a multi-queue para virtio-net e vhost-net para KVM. Não está confirmado se foi fundido (não foi fundido no LinuxCon 2011).
Se for virtual em vez de físico, eu realmente não entendi, mesmo que tivesse marcado /proc/intterupts.
http://tsuchinoko.dmmlabs.com/?p=519" target="_blank"> Interface de rede multi-fila (fixa) | Blog Tsuchinoko
Por enquanto, este é o lugar. Obrigado por ler.
20140404 pós-escrito: Aparentemente as configurações desaparecem quando o sistema operacional é reiniciado. Parece melhor escrever em rc.local ou algo assim.
[shell]vi /etc/rc.local ----------------- echo 'ffff' > /sys/class/net/eth0/queues/rx-0/rps_cpus echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt echo 32768 > /proc/sys/net/core/rps_sock_flow_entries -----------------[/shell]
</-EOC>