이 글에서는 리눅스 커널의 CRC32C 알고리즘 구현에서의 중요한 최적화에 대해 다루고 있으며, 이는 Intel과 AMD CPU의 처리량을 향상시킬 것으로 기대됩니다. 이 패치는 crc_pclmul() 함수의 이진 코드 크기를 4546바이트에서 단 418바이트로 줄이는 보다 효율적인 루프 구조를 도입하여 놀라운 91% 감소를 달성합니다. 이 최적화는 코드 크기를 줄일 뿐만 아니라, 특히 retpoline이 활성화된 경우 실행 속도를 개선합니다.
이전 구현은 1에서 127회 반복되는 완전히 전개된 루프를 사용하여 이진 크기 증가와 간접 호출을 초래했습니다. 새로운 접근 방식은 루프 구조를 단순화하여 x86_64 CPU에서 더 나은 성능을 발휘할 수 있도록 하며, 이는 루프 예측이 효과적으로 이루어질 수 있습니다. 이 글에서는 루프 관리 명령어가 ALU 자원에 대한 CRC 명령어와 경쟁할 수 있지만, 루프를 네 번 정도로 적게 전개함으로써 이를 관리할 수 있다고 강조합니다.
전반적으로 이러한 변화는 리눅스 커널의 암호화 성능을 향상시키기 위한 더 넓은 노력의 일환으로, AES-GCM 및 AES-XTS 암호화 방법에 대한 다른 최적화와 함께 진행되고 있습니다. 이러한 개선의 의미는 암호화 기능에 의존하는 애플리케이션에 대해 상당하며, 더 빠른 처리 시간과 자원 소비 감소를 약속합니다.
* 이 글은
phoronix.com의 기사를 요약한 것입니다. 전체 기사의 내용은
이곳에서 확인하실 수 있습니다.