Чтобы измерить вызовы на lseek
или аналогичные, вы можете использовать команду strace (например, $ strace myprog
- и, возможно, перенаправить вывод из strace в какой-либо файл, чтобы можно было подсчитать количество операций данного типа). В качестве альтернативы, вы могли бы, вероятно, обработать свой код, написав функцию-оболочку (или класс-оболочку), которая подсчитывает вызовы внутри оболочки, но это достаточно трудоемко, чтобы заставить эту работу работать для «всего».
Фактические движения головы на современных жестких дисках не легко (или даже невозможно) посчитать, так как это происходит внутри накопителя. В далеком прошлом интерфейс жесткого диска принимал запросы физических секторов и треков, поэтому вы могли, по крайней мере теоретически, выяснить, когда произошли большие изменения в количестве треков. В наши дни запрашивается только номер сектора 0 .. общее количество секторов, а количество секторов на дорожке обычно является переменным (больше секторов дальше). Это, кроме очевидного фактора, что это происходит глубоко в драйвере ОС, конечно же, и большинство людей на самом деле не хотят прибегать к инструментам драйвера жесткого диска - смена драйверов жесткого диска является довольно определенным способом полностью испортить Ваш диск ... Только КОГДА-ЛИБО делайте это, если у вас есть (как минимум) две машины, на одной из которых вы пытаетесь использовать измененный драйвер, а на другой - вашу машину для разработки. Там было сделано, что [хотя я не пытался сосчитать, ищет - мне нужно было изменить драйвер жесткого диска, чтобы он работал на причудливой системе, которая у меня была] ...;)