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