Где именно установлена метка времени?
Мне нужно знать, в какой точной точке установлена временная метка для получения или отправки кадров на сетевой карте. Я уже много искал, но не могу найти ничего, что действительно помогло мне. Для случая отправки это может быть, например:
- когда первый бит покинул сетевой кабель
- когда последний бит покинул сетевой кабель
- когда данные кадра были записаны в буфер
Я использую сетевую карту Intel 82541PI.
1 ответ
Недавно я провел некоторое исследование этого вопроса, но, например, авторы драйверов Linux могут добавить больше деталей или исправить меня, если я ошибаюсь. Краткое резюме: Когда берется временная метка, это зависит от устройства.
Например, на плате Intel I210 при использовании одношаговой метки времени PTP (т. Е. Еще не распространенного режима PTP, в котором указывается смещение для полезной нагрузки UDP, где метка времени PTP отправителя записывается с помощью NIC hw), тогда метка времени hw принимается правильно перед отправкой кадра из MAC в PHY. При скорости 1 Гбит это займет около 178 нс до тех пор, пока PHY не подключит преамбулу Ethernet к первому биту. Посмотрите в таблице данных NIC для вашей NIC для получения дополнительной информации, или проверьте исходный код драйвера Linux. Для I210 таблица данных доступна для публичного скачивания под названием "Таблица данных Intel® Ethernet Controller I210". Также обратите внимание, что пока не ясно, поддерживает ли драйвер Linux I210 (igb) одностадийную временную отметку. "Классический" способ сделать это - отправить пакет, получить метку времени hw в очереди ошибок сокета, а затем отправить метку времени hw в последующем пакете, это называется двухэтапной меткой времени hw tx и поддерживается многими другими сетевыми картами. Отметим также, что драйвер компенсирует задержку MAC-to-PHY в 178 нс.