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