64비트 Intel CPU(x86-64)보다 64비트 ARM(aarch64)에서 시스템 호출을 실행하는 데 시간이 더 오래 걸리는 이유를 아는 사람이 있습니까? 아래의 벤치마크 설정을 참조하세요.
- 64비트 ARM CPU: Ampere Altra Q80-30, 80코어, 3GHz
- 64비트 Intel CPU: Intel Xeon Gold 5317 CPU, 12코어(24스레드), 주파수는 최대 3GHz로 설정됨
운영 체제: Ubuntu 20.04 LTS, Linux 커널: 5.13.0-41-generic(ARM 및 Xeon)
벤치마크: UnixBench 시스템 호출(https://github.com/kdlucas/byte-unixbench) (https://github.com/kdlucas/byte-unixbench/blob/master/UnixBench/src/syscall.c)
실행 명령: ./syscall 10(혼합 시스템 호출의 경우) 또는 ./syscall 10 close(close()의 경우에만)
perf를 사용하여 실행을 프로파일링하고 다음과 같은 결과를 얻었습니다(./syscall 10 close의 경우).
Altra Xeon
Duration [s] 10 10
Throughput [lps] 23,194,919 47,938,768
Cycles 30,000,710,570 29,968,373,641
Instructions 37,767,647,457 40,044,878,500
IPC 1.26 1.34
Calls 231,949,190 479,387,680
Instructions per call 162.83 83.53
따라서 Xeon은 동일한 주파수(3GHz)에서 Altra보다 두 배 많은 시스템 호출을 수행합니다. Altra에는 호출당 2배의 명령 수가 필요합니다(163 대 84). 이에 대한 아키텍처(aarch64 대 x86-64) 이유가 있습니까?