Доброго времени суток.
Есть результат запуска fio ( libaio, рандомное чтение, блок 4k, queue depth 32, process count 4 ) и одновременно сбор данных через
( date; iostat -x 2 ) > iostat.log
fio выдал
- clat avg 4.3 мс
- iops 29548
При этом iostat в это же время показывает
- await ~ 4.0 - 4.5 мс
- svctm ~ 0.13 - 0.15 мс
svctm хорошо сходится с iops ( 4 fc пути, нагрузка раскидывается равномерно, и это подтверждается графиками await(t), kbps(t) для отдельных путей ), поэтому
$ echo '1/(29548/4) ' | bc -l
.00013537295248409367
Но. судя по исходникам sysstat, svctm - синтетика, вычисляется исходя из загрузки диска, числа выполненных запросов и интервала измерения )
Потребитель видит 4.3 мс, это понятно. Но при этом может быть 4.16 мс запрос в ядре, потом один запрос улетает в fc и возвращается за 0.14 мс . А может быть и наоборот, в ядре время почти не тратится, пачка запросов улетает в fc и каждый в среднем выполняется 4.3, но выполняются одновременно.
Вопрос, возможно ли как-то оценить время, которое запрос ждёт в ядре?
Возможно ли снять статистику не с дисков, а с HBA?