• 締切済み

Linuxでマイクロ精度のスリープ

Core i3/i5/i7のCPUでLinux(CentOS5.4 kernel 2.6.18)を動かした時、 マイクロ秒の精度でスリープができずに困っています。 nanosleep()やclock_nanosleep(CLOCK_MONOTONIC,~)で100μ秒スリープさせ、 実際にスリープした時間をclock_gettime(CLOCK_MONOTONIC,~)で測定したところ、 Core i3/i5/i7いずれも約4msecスリープしてしまいます。(Jiffies?) 同じOSとテストプログラムでもCore2Duoなら誤差は数μ秒でした。 BIOSでマルチコアとHyper-Threadingをいずれも無効にすると、 Core i3/i5/i7でも数μ秒の誤差に収まったのですが、 マルチコアの恩恵が受けられないとCore iの意味がありません。 またカーネルだけ2.6.35に差し替えると100μ秒程度の誤差に改善されました。 しかし、できれば2.6.18のまま精度を上げられないかと考えています。 ・カーネル2.6.XXで修正された。 ・あるディストリビューションではパッチが出ている。 ・カーネルコンフィグで改善できる。 などなど もし情報お持ちでしたら教えて頂けないでしょうか。

みんなの回答

noname#29459
noname#29459
回答No.1

そこまで、わかっているなら 1)kernel付属のリリースドックをチェックする 2)linux kenelの管理は、gitに移行しているので、2.6.18以降のsleep処理の変更履歴をみる  をすれば、わかるでしょ。  それで、その差分を、自分で、2.6.18へ、バックポートする。

gaiamemo
質問者

お礼

回答ありがとうございます。 Release docsやkernel.orgのGitwebから探してみます。 カーネルについては初心者なので、 このような調査のとっかかりは大変助かります。

関連するQ&A