Отладка blktrace io seek
Я использую отладочный дисковый ввод-вывод blktrace, как я могу узнать, когда и где происходит физический поиск на диске?
- Геометрия жесткого диска
hdparm -g /dev/sdl
/dev/sdl:
geometry = 1191062/255/63, sectors = 19134414848, start = 0
- журнал регистрации
btrace /dev/sdl > sdl.log
- прочитайте 255*63*512=8225280 байт со смещения 0 (предположите, что эти сектора находятся в одном цилиндре)
fd, err := syscall.Open("/dev/sdl", syscall.O_DIRECT|os.O_RDWR, 0666)
syscall.Seek(fd, 0, 0)
syscall.Read(fd,67108864)
- анализ sdl.log
grep -E "D|C" sdl.log | sort -rk 6 |awk '{if($6=="D") s[$8"+"$10]=$4 e;else s[$8"+"$10]=($4-s[$8"+"$10])*1000}END{for(j in s)print j,s[j]}' | sort -t '+' -n | sort -nk 2
output:
offect(sector)+Size(sector) ms
0+1024 1.72621
1024+1024 1.9837
2048+1024 2.03655
3072+1024 2.0971
4096+1024 2.15011
5120+1024 28.2263 (why here wait 26ms? what the disk doing)
6144+1024 28.239
7168+1024 28.2949
8192+1024 28.3519
9216+1024 28.4166
10240+1024 28.4768
11264+1024 28.5427
12288+1024 34.0283
13312+1024 34.0824
14336+1024 34.4364
15360+705 35.01
...
Я ожидаю, что диск читает много непрерывных (логических и физических) секторов и происходит один раз за поиск, но вывод сбивает с толку.