現在 dtrace を使用して収集している kstat を介して統計を収集しようとしています。
カウントベースの情報ではなく、毎回新しいデータです。
kstat 出力の最小間隔は 1 秒です。ただし、必要なデータは 1 秒間に数回変更されます。dtrace を使用せずに、kstat が更新されるたびに kstat からデータを取得する方法 (API) はありますか?
現在 dtrace を使用して収集している kstat を介して統計を収集しようとしています。
カウントベースの情報ではなく、毎回新しいデータです。
kstat 出力の最小間隔は 1 秒です。ただし、必要なデータは 1 秒間に数回変更されます。dtrace を使用せずに、kstat が更新されるたびに kstat からデータを取得する方法 (API) はありますか?
外部でdtraceは、更新時に統計を取得する方法はありませんが、C libkstat APIkstatを使用すると、任意の 1 秒未満のサンプリング レートで統計を取得できます。
スクリプトで実行したい場合は、 perl apiもあります。
これを使用する非常に簡単な方法は、カスタマイズされたkstatコマンド (たまたま、既に kstat perl API を利用する perl スクリプトである) を作成し、デフォルトのタイマーの代わりに高解像度タイマーを使用するように変更することです。
$ sed '
s/sleep($interval);/Time::HiRes::usleep($interval*1000.);/
/use Sun::Solaris::Kstat/a\
use Time::HiRes;
' /usr/bin/kstat > /var/tmp/kstat_ms
$ chmod +x /var/tmp/kstat_ms
$ /var/tmp/kstat_ms -n lo0 500 3
module: lo instance: 0
name: lo0 class: net
crtime 19.559031813
ipackets 532
opackets 532
snaptime 4309.506435597
module: lo instance: 0
name: lo0 class: net
crtime 19.559031813
ipackets 534
opackets 534
snaptime 4310.008578348
module: lo instance: 0
name: lo0 class: net
crtime 19.559031813
ipackets 536
opackets 536
snaptime 4310.511617682