안녕하세요. OPS의 코미야입니다.
이것이 CPU 코어 수에 따라 RPS_cpus에 넣을 값을 계산하는 방법입니다.
네트워크 인터럽트 처리를 여러 코어에 분산 요청하는 내용이 있습니다. (특히 캐시 서버에서)
저는 할 수 있는 사람들에게 의지했고, 지금까지 최선을 다해 달라고 부탁했습니다.
[shell]# core=1 # 에코 "obase=16; ibase=10; $(( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 1 # core=2 # 에코 "obase=16; ibase=10; $(( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 3 # core=4 # 에코 "obase=16; ibase=10; $(( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' f # 코어=5 # 에코 "obase=16; ibase=10; $(( 2 ** ${core})) -1" | bc | tr '[A-Z]' '[a-z]' 1f[/shell]
셰프의 레시피를 바탕으로 한 것 (죄송합니다, bash)
[shell]$ vim site-cookbooks/base_setting/recipes/rps_cpus.rb -------------- 패키지 "bc" 하지 않음_if "Which bc" 행동 :설치 종료
패키지 "irqbalance" do not_if "rpm -qa|grep irqbalance" action :install end
서비스 "irqbalance"는 :status => true, :restart => true, :reload => :true action [ :enable, :start ] 끝
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" do._if "ls #{rps_flow_path}" 코드 <-EOC echo="" 4096=""> #{rps_flow_path} cpucore='cat /proc/cpuinfo|grep -c 프로세서' sock_num='echo "4096 * ${cpucore}"|bc -l' 에코 ${sock_num} > _path #{rps_sock} cpubitmap='echo "obase=16; ibase=10; $(( 2 ** ${cpucore})) -1" | bc | tr '[A-Z]' '[A-Z]'' 에코 ${cpubitmap} > #{rps_path} EOC 종료 --------------[/shell]
< 참고 자료>
CentOS 6.2에서는 RPS/RFS를 사용해 네트워크 인터럽트 처리를 여러 코어에 분산시키려 했습니다. RSS 지원 NIC임에도 불구하고 인터럽트 처리가 여러 코어에 분산되지 않습니다... irqbalance가 작동하지 않아서, RH 문서에서 rps 값을 지정하는 방법에 대한 정보_cpus
------------------------------
예시 1:
eth0의 rx-0 큐에 CPU 0, 1, 2, 3을 사용하려면 rps_cpus 값을 f(1+2+4+8 = 15)로 설정하세요:
예시 2:
eth0의 tx-0 큐에 CPU 4, 5, 6, 7을 사용하려면 rps_cpus 값을 f0(16+32+64+128 = 16진수로 240)로 설정하세요:
------------------------------
VIOPS06년에는 RPS와 RFS와 같은 최신 리눅스 커널 사례에 대해 이야기했습니다.
1. 예를 들어, RPS&RFS는 RSS 호환이 아닌 NIC를 가진 애플리케이션의 효율적인 멀티코어 지원을 보장하기 위해 구현되었지만, 가상화 환경은 어떻습니까?
virtio-net과 KVM용 vhost-net에 대한 다중 큐 지원 패치가 있었습니다. 이 사이트가 통합되었는지는 확인되지 않았습니다(2011년 LinuxCon에서는 통합되지 않았습니다).
만약 가상이라면, /proc/intterupts를 확인해도 잘 이해가 안 됐어요.
http://tsuchinoko.dmmlabs.com/?p=519" target=" _blank" > 다중 대기 네트워크 인터페이스 (고정) | 츠치노코 블로그
당분간은 이곳이 그 장소입니다. 읽어주셔서 감사합니다.
20140404 추신: 운영체제를 재시작하면 설정이 사라진다고 하네요. 차라리 rc.local 같은 곳에 쓰는 게 더 나은 것 같아요.
[shell]vi /etc/rc.local ----------------- 에코 'ffff' > /sys/class/net/eth0/queues/rx-0/rps_cpus 에코 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt 에코 32768 > /proc/sys/net/core/rps_sock_flow_entries -----------------[/shell]
</-EOC>