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より2倍のシステムコールを実行します。 Altraには、呼び出しごとに2倍のコマンド数が必要です(163対84)。これにアーキテクチャ(aarch64対x86-64)の理由はありますか?