당사의 서버 솔루션은 다음을 사용하여 많은 터널 작업 요청(추가/업데이트/삭제)을 처리합니다.I/W 제어인터페이스 및 AF_INET 주소 계열 소켓. 에 대한. 숫자는 분당 100개 작업이며 서버에는 총 8,000개 이상의 터널이 있습니다.
터널 수가 증가함에 따라 우리는 이상한 동작을 관찰합니다. 터널 수가 증가함에 따라 ioctl이 커널에서 소비하는 시간의 무작위성이 증가합니다.
예: 평균적으로 약 100개의 터널. ioctl 작업 시간 범위는 100~150ms이지만 2000 이상에서는 100~10000ms입니다. 이 과정의 무작위성은 놀랍습니다.
스트레스처리 시간의 97% 이상이 ioctl에 소요되는 것으로 나타났으며 내부 타이머가 이를 확인합니다.
이것을 최적화할 수 있는 방법이 있나요? 커널 매개변수를 조정하면 될까요? 무작위성을 어떻게 설명하나요?
우리의 운영 체제는 Ubuntu Server 12.04입니다.
답변1
여기서 ioctl은 유죄가 아닌 것으로 밝혀졌습니다.스트레스이것이 실제로 사실임을 보여주지만 커널에 대한 더 깊은 분석은길(또는추적 명령)는 다음과 같이 보여줍니다.I/W 제어프로세서 스케줄러는 코어/컨텍스트 전환 중에 대부분의 속도 저하를 유발합니다.