Linux rseq機能でマルチコア性能を最大43倍向上
原題: Restartable Sequences
なぜ重要か
128コア以上のマルチコアCPUが普及する中、ロック不要で劇的な性能向上を実現する技術として重要
Linux 4.18以降のrestartable sequences(rseq)機能により、ロックやアトミック操作なしでスレッドセーフなデータ構造を作成可能。128コアCPUで最大43倍、96コアでも43倍の性能向上を実現。現在tcmalloc、jemalloc、glibc、cosmopolitanのみが使用。
Linux 4.18以降に搭載されたrestartable sequences(rseq)は、システムプログラミングの秘密兵器として注目されている。この機能により、ロックやアトミック操作を使わずにマルチコアCPU向けのスレッドセーフなデータ構造を構築できる。現在Linuxでのみ手書きアセンブリコードで利用可能だが、将来的に全OSが対応し、システムプログラミング言語とデータ構造ライブラリが書き換えられると予想される。
性能向上は劇的で、4コアRaspberry Pi 5では3倍、128コアAmpere Altra CPUでは34倍、96コアAMD Threadripper Pro 7995WXでは43倍の高速化を実現。現在tcmalloc、jemalloc、glibc、cosmopolitanのみが使用している。
rseqの仕組みは、Linux上でスレッド作成時にkernel提供の32バイトTLSメモリを使用し、スレッドの再スケジュール時にCPU番号を更新。従来1マイクロ秒かかっていたgetcpu()システムコールが1ナノ秒のmov命令で済む。さらにrseq_csフィールドによりアセンブリ命令シーケンスを指定でき、kernelがスレッドを異なるCPUに移動する際、プログラムカウンターが指定区間内にあれば指定したabort handlerへジャンプし、操作を再試行できる。