nginx 를 위 한 CPU 연결

앞에서 말 한 바 와 같이 taskset 은 프로 세 스 에 CPU 를 연결 할 수 있 지만 사후 연결 이기 때문에 nginx 는 소프트웨어 내부 에서 이 기능 을 실현 할 수 있 습 니 다.
원래 타 오 바 오의 텐 진 은 이 문 제 를 잘 해결 하고 한 줄 로 해결 했다.
worker_cpu_affinity auto;

그러나 어 쩔 수 없 이 tengine + pagesoped 를 컴 파일 하 는 데 실 패 했 습 니 다. nginx 의 바 인 딩 방법 을 연구 할 수 밖 에 없 었 습 니 다.
4 핵 CPU 의 경우 CPU 번 호 는 각각
0001 0010 0100 1000

또 다른 상황 은 쌍 핵 4 스 레 드, 두 개의 물리 적 커 널 로 나타 나 는 것 도 4 핵 이 고 사실은 '위 4 핵' 이 며 CPU 효율 을 높이 는 수단 으로 보통 intel CPU 이다.CPU 번 호 는 변 하지 않 지만 0001 과 0100 은 실제 같은 물리 적 핵심 이다.
우 리 는 쌍 핵 4 스 레 드, 4 핵 4 스 레 드 와 4 핵 8 스 레 드 의 차 이 를 비교 해 보면 알 수 있다.
쌍 핵 사선
# cat /proc/cpuinfo  |grep "core id"
core id         : 0
core id         : 1
core id         : 0
core id         : 1

4 핵 4 선
# cat /proc/cpuinfo  |grep "core id"
core id         : 0
core id         : 1
core id         : 2
core id         : 3

쿼 드 8 스 레 드
# cat /proc/cpuinfo  |grep "core id"
core id         : 0
core id         : 1
core id         : 2
core id         : 3
core id         : 0
core id         : 1
core id         : 2
core id         : 3

nginx worker 개 수 는 논리 적 핵심 수가 아 닌 물리 적 CPU 핵심 수 를 사용 하 는 것 을 공식 적 으로 권장 합 니 다.
쌍 핵 4 스 레 드 를 가정 하면 nginx worker 프로 세 스 가 2 개 있 습 니 다. (첫 번 째 논리 CPU 한 그룹, 다른 두 그룹)
worker_cpu_affinity 0101 1010;

4 핵 4 스 레 드 를 가정 하면 4 개의 nginx worker 프로 세 스 가 있 습 니 다. 그러면 바 인 딩 은 간단 합 니 다. 각각 바 인 딩:
worker_cpu_affinity 0001 0010 0100 1000;

4 핵 8 스 레 드 를 가정 하면 4 개의 nginx worker 프로 세 스 (제1 5 논리 CPU 1 조, 제2 6 1 조, 유추) 입 니 다.
worker_cpu_affinity 00010001  00100010 01000100 10001000;

물리 적 CPU 핵심 순서에 따라 연결 되 지 않 으 면, 예 를 들 어 쌍 핵 4 스 레 드,
worker_cpu_affinity 0011 1100;

이렇게 연결 하면 CPU 전환 이 비교적 빈번 해 집 니 다.
고급 CPU 라면 핵심 수가 매우 많 을 것 이 고 0 이 많 을 것 이 며 수 동 바 인 딩 은 멍청해 보이 고 신경 쓰 이지 않 지만 효과 가 있 는 것 은 사실이다.
update 2016-01-31
nginx - 1.9.10 시작, 증가 worker_cpu_affinity auto 기능.

좋은 웹페이지 즐겨찾기