Я пытаюсь собрать данные из нескольких источников на компьютере с Ubuntu 10.10 программным способом о производительности программы. Для всех других моих источников я смог собрать их, используя инструкцию RDTSC x86, а затем масштабировать их, используя gettimeofday, чтобы преобразовать в секунды в абсолютном времени. Однако, когда я начинаю пытаться согласовать эти источники данных с выводом выполнения трассировки sched_switch в / sys / kernel / debug / tracing, я сталкиваюсь с проблемой, поскольку вывод, который я вижу, происходит в секундах и микросекундах с некоторого неизвестного времени.
Шаги, которые я уже сделал:
1. Я определил, что ядро Linux внутренне также использует RDTSC, но добавляет некоторое смещение, которое оно собирает, но у меня, похоже, нет возможности получить его. Это делается также для каждого ядра, что означает, что мне придется попробовать все четыре ядра и определить лучшее, что кажется плохим решением этой проблемы.
2. Я пытался преобразовать RDTSC раз вокруг включения регистрации, чтобы увидеть, является ли хотя бы само преобразование согласованным (то есть некоторое постоянное смещение), но масштаб, кажется, не остается постоянным на протяжении всего цикла.
3. clock_gettime (CLOCK_MONOTONIC, ...), похоже, имеет очень похожее значение, но всегда отключается на неприемлемую величину (около полсекунды) и тоже не выглядит полностью согласованным.
Если я могу изменить то, как мои другие источники данных собирают свое время на то, что необходимо (при условии, что это не сильно повышает производительность), как я должен собирать время, чтобы координировать время между трассировкой и временем, которое я собираю? Есть какой-то способ изменить вывод на RDTSC, так что я могу просто использовать это, или есть системный вызов, который я могу сделать, чтобы получить то же время, что и вывод для трассировки? Заранее спасибо за любую помощь.