![데비안의 alloc_skb에 있는 deactivate_slab.isra.82의 비용을 줄일 수 있는 방법이 있습니까?](https://linux55.com/image/189532/%EB%8D%B0%EB%B9%84%EC%95%88%EC%9D%98%20alloc_skb%EC%97%90%20%EC%9E%88%EB%8A%94%20deactivate_slab.isra.82%EC%9D%98%20%EB%B9%84%EC%9A%A9%EC%9D%84%20%EC%A4%84%EC%9D%BC%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
deactivate_slab.isra.82
통화 __alloc_skb
(15%+ CPU 시간) 로 인해 병목 현상이 발생하는 UDP 사용량이 많은 워크플로가 있습니다 . alloc 메소드는 Intel 카드 드라이버 내에서 가장 자주 호출되는 것으로 보이지만(RX 경로라고 가정함) send 시스템 호출에서도 호출됩니다.
이러한 병목 현상으로 인해 10G 서버에서는 약 1.1Gbps만 푸시할 수 있으며, 이 오버헤드를 줄이기 위해 조정할 수 있는 커널 매개 변수가 있는지 알고 싶습니다. 아마도 SKB의 사용 가능한 목록 크기를 늘려서 kernel-malloc 경로가 자주 적중되지 않습니다.
slub_debug
이 기능은 데비안에서 기본적으로 활성화되어 있어 애플리케이션 속도가 더욱 느려지는 것을 확인했습니다 (850Mbps에서 1.1Gbps로).
답변1
이것은 slub_debug 옵션에 대한 나의 오해입니다. 이 옵션을 끄는 올바른 방법은 "slub_debug=-"입니다. "slub_debug=off"는 슬랩 디버깅 검사를 비활성화하지만 모든 디버깅 코드를 비활성화하는 것은 아닙니다.
디버그 모드를 적절하게 비활성화하면 UDP가 많은 워크로드에서 성능이 크게 향상되었으며 더 이상 병목 현상을 일으키는 명백한 단일 커널 기능이 없었습니다.