Intel, 코드 한 줄로 Linux 성능 4000% 가까이 증가, 40배 증가
컴퓨팅을 포함한 기술이 발전하는 데는 본질적으로 두 가지 방법이 있습니다. 성능을 높이거나 효율성을 개선하는 것입니다. 이러한 모든 최적화는 커뮤니티에서 환영합니다.
최적화에 대해 말하자면, Intel 커널 테스트 봇은 최근 한 줄의 코드 커밋으로 달성된 Linux 커널의 엄청난 성능 개선을 발견했습니다. 메모리 할당(malloc1) 중 "will-it-scale" 스케일링 테스트에서 무려 3889% 또는 거의 40배 더 빠른 처리량이 확인되었습니다. 이 테스트는 총 224개 스레드(각 8380H 칩은 28코어 56스레드 SKU)를 위한 4소켓 Intel Xeon Platinum 8380H(Cooper Lake) 베드에서 수행되었습니다.
커널 테스트 로봇은 will-it-scale.per_process_ops가 3888.9% 향상되었음을 확인했습니다.
commit: d4148aeab412432bf928f311eca8a2ba52bb05df("mm, mmap: 익명 매핑의 THP 정렬을 PMD 정렬 크기로 제한")
또한 Sapphire Rapids Xeon® Platinum 8480+에서 스트레스-ng 동안 "상당한 영향"을 보였습니다. 익숙하지 않다면, 스트레스-ng는 본질적으로 "Bogo ops" 또는 초당 허위 작업 기반 스트레스 테스트입니다.
궁금해하시는 분들을 위해 말씀드리자면, 문제의 커밋은 Transparent Hugepages(THP)와 Page Middle Directory(PMD)를 사용한 효율적 메모리 관리(mm) 및 메모리 매핑(mmap) 기술과 관련이 있습니다.
여기에서 필요한 변경 및 개선이 이루어지고 있으며, 따라서 앞으로 익명 매핑 크기는 TLB(Translation Lookaside Buffer) 및 캐시 앨리어싱 및 충돌로 인한 이전 성능 회귀를 수정하기 위해 PMD의 배수가 될 것입니다.
커밋 efa7df3e3bb5("mm: THP 경계에서 더 큰 익명 매핑 정렬") 이후 특정 주소 힌트 없이 최소 PMD_SIZE인 익명 메모리의 mmap()은 THP 백업 페이지의 이점을 얻을 수 있도록 PMD에 맞춰집니다.
그러나 이 변경 사항은 일부 작업 부하를 상당히 후퇴시키는 것으로 나타났습니다. [1]은 다양한 사양 벤치마크에서 후퇴를 보고하며 일부 플랫폼에서 cactusBSSN 벤치마크가 최대 600% 느려졌습니다. 벤치마크는 커밋 efa7df3e3bb5 이전에 대규모 THP 지원 영역으로 병합되었을 4632kB의 많은 매핑을 생성하는 것으로 보이며, 이제 PMD 경계에 맞춰진 여러 영역으로 조각화되어 간격이 있습니다. 그런 다음 후퇴는 주로 개별 영역의 정렬된 경계로 인해 벤치마크의 메모리 액세스 패턴이 TLB 또는 캐시 앨리어싱으로 인해 발생하는 것으로 보입니다.
efa7df3e3bb5 커밋으로 이분된 또 다른 알려진 회귀는 darktable [2] [3]이며 초기 테스트에서는 이 패치가 해당 회귀도 수정한다는 것을 보여줍니다.
회귀를 수정하면서도 THP 친화적인 익명 매핑 정렬의 이점을 얻으려면 매핑 크기가 최소 PMD 크기가 아닌 PMD 크기의 배수여야 한다는 조건을 추가합니다. cactusBSSN이 만든 것과 같은 이상한 크기의 매핑이 많은 경우 정렬이 중단되고 그 사이에 간격이 생기고 대신 자연스럽게 다시 병합됩니다.