If %util is 100%, svctm is just 1 / (r/s + w/s) seconds, 1000/(r/s+w/s) milliseconds. This is an inverse number of IOPS. In other words, svctm * (r/s+w/s) is always 1000 if %util is 100%. So checking svctm is practically as same as checking r/s and w/s (as long as %util is close to 100%). The latter (IOPS) is much easier, isn't it?
Yoshinori Matsunobu's blog: iostat: (r/s + w/s) * svctm = %util on Linux
をちょっと検証してみた。
stress コマンドで I/O 負荷をかけつつ、
[root@www****** ~]# stress --hdd 2 --timeout 20s stress: info: [4600] dispatching hogs: 0 cpu, 0 io, 0 vm, 2 hdd stress: info: [4600] successful run completed in 21s
iostat を見てみると、
[root@www****** ~]# iostat -dx 1|perl -lane '/^vda/ and printf(qq/IOPS:%d, svctm:%d, util:%d, IOPS*svctm:%d\n/,$F[3]+$F[4],$F[10],$F[11],$F[3]+$F[4]*$F[10])' IOPS:1225, svctm:0.82, util:100, IOPS*svctm:1008 IOPS:989, svctm:0.96, util:94, IOPS*svctm:949 IOPS:1368, svctm:0.67, util:92, IOPS*svctm:916 IOPS:439, svctm:2.28, util:100, IOPS*svctm:1000 IOPS:685, svctm:1.39, util:95, IOPS*svctm:952 IOPS:625, svctm:1.59, util:99, IOPS*svctm:993 IOPS:906, svctm:1.10, util:100, IOPS*svctm:996 IOPS:1536, svctm:0.64, util:98, IOPS*svctm:983 IOPS:832, svctm:1.19, util:99, IOPS*svctm:990 IOPS:1054, svctm:0.95, util:100, IOPS*svctm:1001 IOPS:952, svctm:1.01, util:96, IOPS*svctm:961 IOPS:1031, svctm:0.97, util:99, IOPS*svctm:1000 IOPS:1779, svctm:0.53, util:94, IOPS*svctm:942 IOPS:1238, svctm:0.81, util:99, IOPS*svctm:1002 IOPS:777, svctm:1.29, util:100, IOPS*svctm:1002 IOPS:1940, svctm:0.49, util:96, IOPS*svctm:950 IOPS:1335, svctm:0.71, util:94, IOPS*svctm:948 IOPS:869, svctm:0.99, util:85, IOPS*svctm:860
だいたいそんな感じになってる。