conf t

インフラエンジニアのメモ

sarの値は平均なのか

結論から言うと、平均の値でした。

sarの値はカーネルでシステム起動時から累積的にカウントされています。
sarの出力結果はこの累積の値から平均を出しています。
sysstatのサンプリング間隔はデフォルトで10分間隔なのでそれを前提に考えると、
ある時点の平均値を求める際、まず10分前の値と今の値から変化量を算出します。
その変化量を10分で割った値が今回のsarの値になります。([foo(T) - foo(T-dt)] / dt)

2.16. Are the measurements gathered by sadc cumulative or instantaneous values? Each counter maintained by the kernel is cumulative since system boot. As a consequence the measurements gathered by sadc are cumulative values. Moreover all per-second statistics displayed by sar are average values on the given time interval. So the value for counter foo at time T is calculated as: foo/s = [foo(T) - foo(T-dt)] / dt where dt is the interval given on the command line.

sarがどこから値をとっているかですが、
例えばインターフェースの送受信量は/proc/net/devから取得しているようです。
ソースコードのrd_stats.c内read_net_devに Read network interfaces statistics from /proc/net/dev. との記載。
実際に見てみると確かに表示するたびに値が増えていっているので
累積値が記録されていることがわかります。
以下一部だけ記載。

#  head /proc/net/dev
Inter-|   Receive                                                
 face |bytes    packets
    lo: 4076237385 34072152 
  eth0: 3348062086 15800903 
#  head /proc/net/dev
Inter-|   Receive           
 face |bytes    packets
    lo: 4076237385 34072152 
  eth0: 3348062811 15800908 

引用元: http://sebastien.godard.pagesperso-orange.fr/faq.html

参考: http://kenkenken0102.hatenablog.com/entry/2015/07/09/230556