最近载一个项目中发现用netperf测试的网络延时波动较大,于是分析原因,同时也发现了netperf本身测量的问题。
发现netperf的结果
ELAPSED_TIME=60.03
MIN_LATENCY=2
MAX_LATENCY=20888
MEAN_LATENCY=399.72
P90_LATENCY=6
P99_LATENCY=11800
STDDEV_LATENCY=2084.31
THROUGHPUT=655.23
LOCAL_CPU_UTIL=1.13
REMOTE_CPU_UTIL=1.86
LOCAL_SD=1.132
REMOTE_SD=5.575
REQUEST_SIZE=-1
RESPONSE_SIZE=-1
ELAPSED_TIME=60.03
最小值极小,根据传输的数据包大小计算应该远远大于2us。分析了netperf代码,在send_omni_inner函数里有如下代码:
HIST_get_stats(time_hist,
&min_latency,
&max_latency,
&mean_latency,
&stddev_latency);
p50_latency = HIST_get_percentile(time_hist, 0.02);
p90_latency = HIST_get_percentile(time_hist, 0.90);
p99_