Я отправляю сетевые пакеты от одного потока и получаю ответы на 2-й поток, который работает на другом ядре процессора. Мой процесс имеет размеры, время между отправляют и получают каждого пакета (подобный ping). Я использую rdtsc для получения с высоким разрешением, синхронизация низких издержек, которая необходима моей реализации.
Весь measurments выглядит надежным. Однако, я волнуюсь по поводу rdtsc точности через ядра, так как я читал некоторые тексты, которые подразумевали, что tsc не синхронизируется между ядрами.
Я нашел следующую информацию о TSC в Википедии
Постоянное поведение TSC гарантирует, что продолжительность каждого такта системных часов универсальна и поддерживает использование TSC как настенный таймер часов, даже если ядро процессора изменяет частоту. Это - архитектурное поведение, продвигающееся для всех процессоров Intel.
Тем не менее я волнуюсь по поводу accruracy через ядра, и это - мой вопрос
Я рекомендую вам не использовать rdtsc. Он не только не портативен, но и не надежен, и вообще не работает - на некоторых системах rdtsc обновляется неравномерно (например, если вы используете speedstep и т.д.). Если вы хотите получить точную информацию о времени, вам следует установить опцию SO_TIMESTAMP на сокете и использовать функцию recvmsg() для получения сообщения с временной меткой (с микросекундным разрешением).
Более того, временная метка, которую вы получаете с помощью SO_TIMESTAMP, на самом деле является временем, когда ядро получило пакет, а не когда ваша задача случайно заметила его.
В Linux вы можете использовать clock_gettime (3) с CLOCK_MONOTONIC_RAW, что дает вам разрешение в наносекундах и не зависит от ntp. обновления (если они были).