Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bashのsleepコマンドはそんな厳密ではない(当然

高速で流れてくるワークだとかをカメラで判定するが、その時の時刻を可能な限り正確に……としたい人情はわかる。
わかるけど、Linuxの構造上そういう調整は根性据えてやらんといけない。

実際のところ

試しにカーネル他に全く細工をしていないUbuntu20LTS on WSLな環境でsleepの時刻を測ってみる。

shuzo@DESKTOP-4QNOKCC:~$ time sleep 1

real    0m1.018s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1

real    0m0.117s
user    0m0.000s
sys     0m0.016s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1

real    0m0.117s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.1

real    0m0.117s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.01

real    0m0.028s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.001

real    0m0.020s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.02

real    0m0.037s
user    0m0.000s
sys     0m0.000s
shuzo@DESKTOP-4QNOKCC:~$ time sleep 0.01

real    0m0.027s
user    0m0.000s
sys     0m0.000s

御覧のように、下二桁未満はあてにならない。
0.02秒はズレるらしい。
まぁ、そういうリアル処理が必要なら外部クロックに頼るなり、FPGAなりでやった方がいい気がする。