Есть ли способ отключить протокол точного времени (PTP) на Intel I211 Gigabit с драйвером igb?
У меня материнская плата ASUS Pro WS X570-ACE с процессором AMD Ryzen 5700G, встроенным Intel I211 Ethernet и драйвером igb ver. 5.11.0-27. Также имеется встроенный Ethernet Realtek, но он отключен в BIOS. ОС — Linux Mint 20.2 с ядром 5.11.0-27-generic.
Всякий раз, когда загружается ОС, в выводе dmesg отображается следующее:
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
pps pps0: new PPS source ptp0
pps_ldisc: PPS line discipline registered
И появляются 2 устройства: /dev/pps0 и /dev/ptp0.
Я знаю, что это делает порт Intel I211, потому что если я запущуethtool -T enp5s0
на адаптере написано:
Time stamping parameters for enp5s0:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
The PTP Hardware Clock: 0
означает, что при этом создается файл /dev/ptp0 и, следовательно, /dev/pps0. Вот список соответствующих устройств в /dev/:
/dev/port /dev/ppp /dev/pps0 /dev/pps1 /dev/psaux /dev/ptmx /dev/ptp0 /dev/ptp1 /dev/ptp2
Причина, по которой этот PTP является для меня проблемой, заключается в том, что я использую GPS-приемник для установки времени.
У меня есть GPS-приемник, подключенный через встроенный разъем COM/Serial DB9, который я использую для установки времени на компьютере с точностью до микросекунды, используя количество импульсов в секунду (PPS), поступающее на контакт 1 по последовательному порту. GPSD и CHRONY позаботятся обо всем остальном... но проблема в том, что GPSD создает свое устройство PPS в /dev/pps1, а не в /dev/pps0 из-за PTP. GPSD обычно ожидает, что источником PPS будет /dev/pps0. GPSD работает, если я укажу в командной строке ссылку на /dev/pps1 в качестве источника PPS... но для блокировки и синхронизации потребуется еще несколько минут по сравнению с компьютером, на котором вообще нет PTP...
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
pps pps0: new PPS source ptp0
pps_ldisc: PPS line discipline registered
pps pps1: new PPS source serial0
pps pps1: source "/dev/ttyS0" added
Я просмотрел руководство Ethtool и руководство по сборке драйвера Intel IGB, но нет параметра, который можно было бы настроить для отключения HARDWARE_TIMESTAMPS. В Ethtool есть только ключ -T, который показывает возможность отметки времени... но никаких реальных параметров, которые вы можете установить с помощью ethtool -T/-t, нет.
Вопрос: Есть ли способ полностью отключить эту систему PTP?
1 ответ
Код для поддержки HC на некоторых картах Intel был добавлен примерно в 2011 году. Ethernet-контроллер Intel® I211-AT поддерживает аппаратную точную синхронизацию времени. Он включен, потому что разработчики модуля думают об этом следующим образом: (источник)
Если MAC имеет функции PTP, пользователи наверняка захотят включить их.
Короче: Ваш вывод верен. Тем не менее, вы можете сделать несколько вещей:
- Свяжитесь с разработчиками модуля и покажите свой вариант использования. Убедите их, что есть веские причины для отключения какой-либо функции, даже если она обычно считается желаемой и включена по умолчанию.
- Перекомпилируйте модуль с удаленным HC.
- Вместо этого попробуйте использовать сетевой адаптер Realtek.
- Попробуйте настроить gpsd так, чтобы он игнорировал устройства как
/dev/pps0
или/dev/ptp0
- согласно документации должно быть возможно:
Чтобы сообщить демону, что устройство отключено и больше недоступно, отправьте знак минус («-»), за которым следует имя устройства, а затем LF или CR-LF. Таким образом, чтобы удалить /dev/foo из списка поиска, отправьте «-/dev/foo\n».
Это также должно работать автоматически, изменяя файлы в разделе/etc/gpsd/device-hook
.