linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

時間管理 - vread_tsc()

概要

タイムスタンプを返す

詳細

rdtsc_ordered()からプロセッサのタイムスタンプを取得し、取得した値をgtodcycle_lastメンバと比較する

比較の結果大きい値を返すが、rdtsc_ordered()から取得した値のほうが小さかった場合は空文字のインラインアセンブラ命令を実行する

空文字で実行する理由はコメントを読む限りGCCコンパイラがcmov命令を生成するからと読み取れる

おそらく他のCPUで書き換えられた値を正しく読み込めるようにするためだと思うが詳細は不明。。。

また、コメントでbarrier()を使わないのは必要ないからだと書かれているが、これは複数のCPUでデータの同期は不要で取得したデータが正しければ別のCPUで同期されてなかろうが関係ないってことだと思われる

いずれにせよよくわからない命令である