Мне нужен очень точный способ определения времени частей моей программы. Я мог бы использовать для этого обычные часы с высоким разрешением, но это вернет время настенных часов, а это не то, что мне нужно: мне нужно время, потраченное на выполнение только моего процесса.
Я отчетливо помню, что видел патч для ядра Linux, который позволял мне синхронизировать мои процессы с точностью до наносекунды, за исключением того, что я забыл добавить его в закладки, а также забыл название патча :(.
Я помню, как это работает, хотя:
При каждом переключении контекста он будет считывать значение часов с высоким разрешением и добавлять дельту двух последних значений ко времени выполнения запущенного процесса. Это дает точное представление фактического времени процесса с высоким разрешением.
Обычное время процесса поддерживается с использованием обычных часов, которые, как я полагаю, имеют точность до миллисекунд (1000 Гц), что слишком велико для моих целей.
Кто-нибудь знает, о каком патче ядра я говорю? Я также помню, что это было что-то вроде слова с буквой перед или после него — что-то вроде «rtimer» или что-то в этом роде, но я точно не помню.
(Другие предложения тоже приветствуются)
Совершенно честный планировщик, предложенный Марко, — это не то, что я искал, но выглядит многообещающе. Проблема, с которой я столкнулся, заключается в том, что вызовы, которые я могу использовать для получения времени процесса, по-прежнему не возвращают достаточно детализированные значения.
- times() возвращает значения 21, 22 в миллисекундах.
- clock() возвращает значения 21000, 22000, с той же степенью детализации.
- getrusage() возвращает такие значения, как 210002, 22001 (и некоторые подобные), они выглядят более точными, но значения выглядят одинаково.
Так что теперь проблема, которая у меня, вероятно, возникла, заключается в том, что у ядра есть нужная мне информация, я просто не знаю системного вызова, который ее вернет.