std::mutexの簡易性能評価メモ

2016年10月公開

std::mutex の簡易性能評価メモ

std::mutex の簡易な性能評価メモです.

性能評価手法

std::mutex の競合状態(コンテンション)は 2 つのスレッドを用意し,std::atomic<bool;> と短い時間のビジーループを用いて発生させています.ソースコードは gist にあります(競合ありの計算時間は,LockAndUnlockWithContention から LockAndUnlockWithPenalty を減ずることにより計算できます.Linux は競合発生時も処理時間が短いため,細かな差分を見極めるため kShortWait を 30 で計測しました.).
評価マシンは以下の通りです.
  • Mac OSX 10.10.2 (3 GHz Intel Core i7)
  • Debian 3.16.7 x86_64 GNU/Linux (Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz)

性能評価

評価対象となる動作 Mac での処理時間 Linux での処理時間
std::atomic<bool> を用いた lock/unlock 14 ns 14 ns
std::mutex を用いた競合なし lock/unlock 55 ns 29 ns
std::mutex を用いた競合あり lock/unlock 6100 ns 68 ns
Mac OSX では std::mutex の競合が非常に大きなペナルティがあるのに対して,Linux ではペナルティはあるもののそれほど大きなものではありませんでした.