sw loadbalancer중 일부는 프로그램을 실행할때, cpu와의 상관관계를 정의내려줘야지 성능이 잘나오는 프로그램이 있다.
git katran이 대표적인 예이다.
https://github.com/facebookincubator/katran
GitHub - facebookincubator/katran: A high performance layer 4 load balancer
A high performance layer 4 load balancer. Contribute to facebookincubator/katran development by creating an account on GitHub.
github.com
이때, nic은 자신에게 들어오는 데이터를 대기시키는 queue가 존재하며, queue에 들어온 데이터를 처리하기위해 cpu에 interrupt를 건다. interrupt를 받은 cpu는 queue에 들어온 데이터를 처리해주는데, 이때 nic의 queue와 cpu를 어떻게 할당해주냐에따라서 내가 원하는 대로 cpu를 사용할 수 있게된다.
이러한 정보는 lspci -vv를 통해서 물리 nic이의 irq정보를 확인할 수 있는데, 그 정보는 /proc/irq/ 내부에 맵핑되어있는 정보이다.
예를 들어서 mellanox x4장비의 정보를 lspci -vv를 통해서 확인했을때 irq = 400이라고 나와있으면, mellqnox x4는 irq번호 400번에의해서 관리되고있고, /proc/irq/400/의 파일을 수정해주면 x4의 interrupt정보들을 조작해줄 수 있게된다.
이때 cpu와 mapping해주기위해서는 /proc/irq/400/smp_affinity파일을 수정해 줘야된다. 만약 1번 cpu에 mapping 해주기위해서는 echo 1>smp_affinity를 입력해주변되고 2번 cpu는 echo 2>smp_affinity를 입력해주면된다. smp_affinity는 16진법으로 이루어져있으므로, 고려해서 cpu를 매핑해주면 된다.
이렇게 cpu와 nic queue를 매핑했다면 최적성능을 위해 cpu와 물리적으로 가까운 메모리를 cpu에 할당해주면 된다. numa정보는 lscpu를 입력하면 cpu core에따른 numa정보를 확인할 수 있다.
'인프라' 카테고리의 다른 글
k8s 교육 키워드 정리 (1) | 2022.12.17 |
---|