Linux 네트워크 응용 프로그램의 대기 시간을 줄이려고합니다. 특정 CPU 코어에 프로그램을 "바인딩"하는 두 가지 도구 인 taskset과 cpuset이 있다는 것을 배웠습니다.
- 어느 것을 선호해야합니까? 그것들은 낮은 수준에서 동등합니까?
- (처분) 내 응용 프로그램에는 단일 스레드가 있으며 대기 시간이 가장 짧은 고속 LAN 네트워크를 통해 단일 TCP 연결 (재 연결 없음)을 처리해야합니다. 내가 올바른 길에 있습니까?
Linux 네트워크 응용 프로그램의 대기 시간을 줄이려고합니다. 특정 CPU 코어에 프로그램을 "바인딩"하는 두 가지 도구 인 taskset과 cpuset이 있다는 것을 배웠습니다.
답변:
작업 세트 는 하나 이상의 CPU에 프로세스를 바인딩하기위한 것입니다. 기본적으로 초기 실행 또는 실행 중에 실행할 수 있는 위치를 지정 합니다. 최신 서버 장비에서 RHEL / CentOS를 사용하는 경우 numactl
권장됩니다 taskset
.
Cpuset / cset 은 CPU 차폐 용이며 Linux cgroup을 중심으로 구축 된 프레임 워크입니다. 프로세스 관리에 사용할 수있는 다른 도구가 있기 때문에 CHEL은 RHEL과 같은 특정 배포에서 인기가 없었습니다.
아래의 첫 번째 명령은 운영 체제의 작업을 CPU 코어 0 및 8로 제한하는 보호막을 생성합니다. 두 번째 명령은 현재 쉘 세션을 지정된 CPU 보호기로 이동하여 시스템 및 사용자 프로세스를 격리시킵니다.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
CPU에 바인딩 프로세스의 경로를 내려 가기 전에 확인하고 조정해야 할 다른 사항이 있습니다. 인터럽트 ( irqbalance
일부 비활성화), 절전 설정, 시스템 스케줄러, I / O 엘리베이터, 실시간 정책 ( chrt
).
Ubuntu의 낮은 대기 시간 TCP 설정을 참조하십시오.
여기 (의 선상 다음과 ./your_program 실행되며, 그 선택 랩퍼 어플리케이션 코어의) 예 irqbalance 정지 선택된 코어 및 그 블랙리스트 시작 SCHED_FIFO 선택된 코어와 우선 순위 (99).
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program
taskset
있습니다. cpuset을 사용하면 cpuset이 부여한 것에서 친밀감을 바꿀 수 없습니다.
numactl
??
sched_setaffinity
합니다.