SPIN_DELAY()

PostgreSQL8.0では、スピンロックを取得するs_lock()にSPIN_DELAYマクロが追加された。
SPIN_DELAYはx86環境では、アセンブラでrep; nopを実行する。
rep; nopはPentium4およびXeon環境では、pause命令として解釈される。それ以外のx86-CPUでは、単なるnopとして解釈される。
Pentium4/Xeonのpause命令は、CPUにスピンループ中であることを知らせるヒントとして働き、スピンループを少し遅くする効果がある。スピンループを遅くすることにより、他のプロセスが処理を行う機会を増やし、システム全体のパフォーマンスが向上する。
Pentium4/Xeon環境でのスピンループの最適化については、Intelの資料に詳しく書いてある。
http://www.intel.co.jp/jp/developer/download/