CPUスケーラビリティ向上の難しさの実例:MySQLの実装に関して

アプリケーションの性能向上を目指した実装の例として、MySQLについて取り上げます。MySQLソースコードを丹念に読んだわけではありませんので、誤解がありましたら、ご指摘ください。

先月の話ですが、id:hyoshiokさんのMySQLの性能に関するエントリhttp://d.hatena.ne.jp/hyoshiok/20060301#p1で、コメントさせていただきました。

MySQLのmutexは、空回りをして待ちながらmutexの取得に何回かトライし、だめなら一旦あきらめてyeildする実装になっていました。しかし、この実装ではCPUスケーラビリティが低いと思います。予想されるlockの保持時間に合わせて、lockの保持時間がきわめて短い事が確実なlock→spinlock、比較的長時間保持されるlock→トライしてだめならすぐ寝るmutexと使い分けるような実装にする必要があります。また、可能であればthreadの優先度を制御して、lockを保持しているthreadの優先度を上げるべきでしょう。