単純な Bash スクリプトのあいまいなまたは未定義の動作

単純な Bash スクリプトのあいまいなまたは未定義の動作
[root@localhost ~]# time cpumode 
Driver:   acpi-cpufreq
Boost:    disabled
Governor: ondemand
Average and maximum frequencies now: 2159MHz 2929MHz
Maximum allowed frequency is 3800MHz (out of 4928MHz)

real    0m0.214s
user    0m0.017s
sys 0m0.011s
[root@localhost ~]# time cpumode 
Driver:   acpi-cpufreq
Boost:    disabled
Governor: ondemand
Average and maximum frequencies now: 2431MHz 2738MHz
Maximum allowed frequency is 3800MHz (out of 4928MHz)

real    0m0.024s
user    0m0.018s
sys 0m0.013s

スクリプトの実行にかかる時間にはほとんど大きな違いがあり、ランダムに発生します。

どのように可能かわかりません。デバッグが有効な場合(最初の2行はコメントアウトされません)スクリプト常に0.134秒程度で動作します。

PC/ノートブックで再生できない場合でも心配しないでください。これは私の人生で一度も見たことがなく、説明できない奇妙な現象だ。次のように実行できますが、strace -f -t今はそうしたくありません;-)


Linux 5.19.4では、この動作を再現することはできません。

ベストアンサー1

同様の違いがあります。これは、CPU全体でプロセスをスケジュールする方法に関連しているようです。

「遅い」実行時の出力は次のとおりです。

./cpumode > /dev/null  0.03s user 0.01s system 19% cpu 0.189 total

または

0.03user 0.01system 0:00.20elapsed 21%CPU (0avgtext+0avgdata 4004maxresident)k
0inputs+0outputs (0major+5720minor)pagefaults 0swaps

zshstimeとGNUをそれぞれ使用します。出力を気にせず要因の場合は、ターミナル遅延を排除するために両方にtimeリダイレクトします。)> /dev/null

速く走っている間

./cpumode > /dev/null  0.03s user 0.02s system 125% cpu 0.035 total

または

0.03user 0.01system 0:00.03elapsed 125%CPU (0avgtext+0avgdata 4092maxresident)k
0inputs+0outputs (0major+5668minor)pagefaults 0swaps

CPU割り当ての違いを確認してください。

おすすめ記事