1. Introdução ao ptp4l
ptp4l é um software de código aberto para Linux e uma das implementações do IEEE 1588 Precision Time Protocol (PTP). Sua função é sincronizar os relógios de vários sistemas na rede e fornecer carimbos de data/hora de alta precisão. A seguir explica-se seu conceito, funções de implementação, vantagens e desvantagens e cenários de aplicação.
conceito:
PTP é um protocolo de rede usado para obter sincronização de relógio em sistemas distribuídos. ptp4l (implementação PTPv2 Linux) é uma implementação de protocolo PTP que suporta protocolo PTPv2, seleção de nível de precisão de clock (precisão de clock), compensação de atraso e outras funções. Ele pode sincronizar os relógios de vários nós PTP através da rede e fornecer carimbos de data/hora de alta precisão.
Perceba a função:
O ptp4l é frequentemente usado para obter sincronização de relógio e carimbo de data / hora de alta precisão e pode ser usado em sincronização de áudio e vídeo, aquisição e processamento de dados, transações financeiras, sincronização de sistemas de energia, controle industrial e outros campos. Ele fornece as seguintes funções principais:
-
Realize a sincronização do relógio: o ptp4l pode sincronizar os relógios de vários nós por meio do protocolo para obter sincronização de tempo de alta precisão.
-
Fornece carimbos de data e hora de alta precisão: o ptp4l pode registrar a data e hora dos dados recebidos e fornecer precisão de tempo em nível de subnanossegundos.
-
Suporta diferentes níveis de precisão: o ptp4l pode suportar diferentes níveis de precisão do relógio para obter uma sincronização de relógio de maior precisão.
-
Suporte para compensação de atraso: o ptp4l pode diagnosticar o atraso da rede e compensar o relógio de acordo com o atraso.
vantagem:
-
Alta precisão: o ptp4l fornece precisão de tempo em nível subnanossegundo, o que pode atender a cenários que exigem alta precisão de tempo.
-
Escalabilidade: o ptp4l pode sincronizar os relógios de vários nós através do protocolo e pode ser estendido para sistemas distribuídos.
-
Flexibilidade: o ptp4l pode se adaptar a diferentes cenários de aplicação configurando diferentes níveis de precisão de clock, compensação de atraso e outros parâmetros.
deficiência:
-
Limitado pelo suporte de hardware: A precisão da sincronização de tempo do ptp4l é limitada pelo suporte de hardware. Se o hardware não suportar sincronização de relógio de alta precisão, a precisão será limitada.
-
Depende da rede: o ptp4l implementa a sincronização do relógio através da rede, por isso é afetado por fatores como atraso da rede e largura de banda.
2. Cenários de aplicação:
O ptp4l é usado principalmente em cenários que exigem sincronização de relógio de alta precisão, como sincronização de áudio e vídeo, aquisição e processamento de dados, transações financeiras, sincronização de sistemas de energia, controle industrial e outros campos. Nestes cenários, é necessário sincronizar os relógios dos diferentes sistemas para obter elevada precisão e consistência, de forma a garantir a estabilidade e o funcionamento normal do sistema.
Aqui estão os breves passos para instalar e usar o LinuxPTP no CentOS 7:
-
Abra um terminal e instale o LinuxPTP com o seguinte comando:
sudo yum install linuxptp
-
Verifique se o LinuxPTP foi instalado com sucesso. Digite o seguinte comando no terminal:
ptp4l -v
Se o número da versão LinuxPTP for exibido, a instalação foi bem-sucedida.
-
Configure o LinuxPTP. Digite o seguinte comando no terminal:
sudo nano /etc/ptp4l.conf
Abra o arquivo de configuração e faça as alterações necessárias. Por exemplo, você pode alterar configurações de relógio, interfaces de rede física, interfaces de rede PTP e muito mais.
-
Inicie o LinuxPTP. Digite o seguinte comando no terminal:
[root@localhost ~]# ptp4l -i enp1s0 -f /etc/ptp4l.conf -m ptp4l[519569.670]: selected /dev/ptp0 as PTP clock ptp4l[519569.672]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[519569.672]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[519577.354]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[519577.354]: selected local clock 001b21.fffe.c4522a as best master ptp4l[519577.354]: assuming the grand master role
Isto iniciará o daemon PTP e o configurará para usar a interface eth0, executando com as configurações especificadas em /etc/linuxptp/ptp4l.conf.
-
Verifique a sincronização do relógio. Digite o seguinte comando no terminal:
[root@localhost ~]# phc2sys -s enp1s0 -w CLOCK_REALTIME -m phc2sys[519870.160]: CLOCK_REALTIME phc offset -172 s0 freq +44777 delay 749 phc2sys[519871.161]: CLOCK_REALTIME phc offset -177 s2 freq +44772 delay 758 phc2sys[519872.161]: CLOCK_REALTIME phc offset -173 s2 freq +44599 delay 758 phc2sys[519873.161]: CLOCK_REALTIME phc offset -25 s2 freq +44695 delay 743 phc2sys[519874.161]: CLOCK_REALTIME phc offset 44 s2 freq +44757 delay 745 phc2sys[519875.161]: CLOCK_REALTIME phc offset 34 s2 freq +44760 delay 751 phc2sys[519876.162]: CLOCK_REALTIME phc offset 61 s2 freq +44797 delay 745 phc2sys[519877.162]: CLOCK_REALTIME phc offset 42355 s2 freq +87109 delay 749 phc2sys[519878.162]: CLOCK_REALTIME phc offset 122 s2 freq +57583 delay 757 phc2sys[519879.162]: CLOCK_REALTIME phc offset -12775 s2 freq +44722 delay 745 phc2sys[519880.162]: CLOCK_REALTIME phc offset -12753 s2 freq +40912 delay 754 phc2sys[519881.163]: CLOCK_REALTIME phc offset -8903 s2 freq +40936 delay 744
Isto irá sincronizar o PHC (Ptp Hardware Clock) com o relógio real, garantindo assim que os relógios estejam sincronizados.
Acima estão as etapas básicas para instalar e usar o LinuxPTP no CentOS 7. Na verdade, você precisa saber mais sobre a configuração detalhada e o uso do LinuxPTP para garantir o funcionamento normal do sistema.
Parâmetros comuns
Os parâmetros comuns do ptp4l têm os seguintes significados:
usage: ptp4l [OPTION]... [INTERFACE]...
ptp4l is an implementation of the Precision Time Protocol (PTP) according
to IEEE standard 1588 for Linux. PTP is used to synchronize the clocks of
devices over a network. ptp4l, in conjunction with phc2sys, can be used to
synchronize the system clock to an external PTP clock.
OPTION list:
-C, --config-file load configuration from file
-g, --global-override enable global override of settings in configuration files
-i, --interface specify an interface to use
-m, --management enable the PTP management messages
-p, --priority select the priority1 and priority2 for PTP port
-s, --step-seconds step the clock if offset is greater than given seconds
-A, --announce-interval
interval in seconds between sending announce messages
-D, --drift-threshold drift threshold for the clock in seconds per second (default 1e-6)
-G, --domain specify PTP domain number (default 0)
-H, --pdelay-req-hops number of hops for pdelay-req messages (default 1)
-I, --init-delay initial delay before sending first announce message (seconds)
-M, --max-adjustable-offset
the maximum offset the clock can be adjusted in seconds
-O, --outlier-threshold
specify outlier threshold for the clock discipline
-P, --phc2sys enable phc2sys compatibility mode
-Q, --ptpengine-debug output debug information for ptpengine (use multiple times for more detail)
-R, --hw-timestamps use hardware timestamps instead of software
-S, --src-addr specify source IPv4 or IPv6 address (receiver mode only)
-T, --unicast-address specify unicast destination address instead of multicast
-U, --user-description
specify user description for PTP port
-V, --version print version number and exit
-W, --override-offset-allowed
override the offset if the difference is outside acceptable limits (default false)
-X, --set-timeout specify timeout in milliseconds for message receptions
-Y, --sync-rate-limit
limit the number of sync messages propagated per second
-Z, --pid-file write the PID of ptp4l to a file
-d, --debug-level output debugging information (use multiple times for more detail)
-f, --foreground stay in foreground and output messages to stdout
-h, --help display this help and exit
-l, --lock-file lock file used for PID file (default /var/run/ptp4l.lock)
-o, --one-step enable the one-step clock mode
-r, --priority1 specify PTP priority1 value (default 128)
-t, --priority2 specify PTP priority2 value (default 0)
-u, --unicast-dest specify unicast destination for PTP messages
-v, --verbose output verbose messages
See the ptp4l(8) man page for more information.
Alguns dos parâmetros comumente usados são usados da seguinte forma:
-C, --config-file
: Especifica a localização do arquivo de configuração, por exemplo-C /etc/ptp4l.conf
, .-i, --interface
: especifica o nome da interface a ser usada, por exemplo-i eth0
, .-m, --management
: Habilite mensagens de gerenciamento PTP, por exemplo-m
.-s, --step-seconds
: Avança o relógio se o deslocamento do relógio for maior que o número determinado de segundos, por exemplo-s 1
.-A, --announce-interval
: especifica o intervalo para envio de mensagens de anúncio, por exemplo-A 30
.-M, --max-adjustable-offset
: Especifica o deslocamento máximo pelo qual o relógio pode ser ajustado, por exemplo-M 0.1
.-Q, --ptpengine-debug
: gera as informações de depuração do ptpengine. Você pode usar-Q
a opção várias vezes para obter mais informações de depuração, por exemplo-Q -Q -Q
.-d, --debug-level
: gera informações de depuração, use várias-d
opções para obter informações de depuração mais detalhadas, por exemplo-d -d -d
.-f, --foreground
: executa como um processo em primeiro plano, envia mensagens para a saída padrão, por exemplo-f
.-h, --help
: exibe informações de ajuda, por exemplo-h
.-v, --verbose
: Imprima mensagens detalhadas, por exemplo-v
.
O método de utilização desses parâmetros pode ser determinado em combinação com cenários de aplicação específicos.
[root@localhost ~]# ptp4l -h
usage: ptp4l [options]
Delay Mechanism
-A Auto, starting with E2E
-E E2E, delay request-response (default)
-P P2P, peer delay mechanism
Network Transport
-2 IEEE 802.3
-4 UDP IPV4 (default)
-6 UDP IPV6
Time Stamping
-H HARDWARE (default)
-S SOFTWARE
-L LEGACY HW
Other Options
-f [file] read configuration from 'file'
-i [dev] interface device to use, for example 'eth0'
(may be specified multiple times)
-p [dev] PTP hardware clock device to use, default auto
(ignored for SOFTWARE/LEGACY HW time stamping)
-s slave only mode (overrides configuration file)
-t transparent clock
-l [num] set the logging level to 'num'
-m print messages to stdout
-q do not print messages to the syslog
-v prints the software version and exits
-h prints this message and exits
Anexo: erro: falha ao criar um relógio
ptp4l[519360.082]: interface 'enp4s0' não suporta modo de registro de data e hora solicitado,
falha ao criar um relógio
Este erro geralmente aparece em sistemas Linux e indica que o ptp4l não conseguiu ativar o modo de carimbo de data/hora PTP na interface de rede especificada. Os possíveis motivos são:
-
A interface de rede não suporta o modo de carimbo de data/hora PTP. Algumas interfaces de rede podem não suportar carimbos de data/hora de hardware ou software e, portanto, não podem ser usadas para sincronização PTP.
-
Privilégios insuficientes para ativar o modo de carimbo de data/hora PTP. Em alguns sistemas, é necessário executar ptp4l como administrador ou usuário privilegiado para acessar os recursos necessários do sistema.
Para resolver esse problema, tente as seguintes etapas:
-
Verifica se a interface de rede suporta o modo de carimbo de data/hora PTP. Você pode usar
ethtool
o comando para ver se uma interface de rede suporta carimbo de data/hora de hardware ou software. Por exemplo, use o seguinte comando para visualizarenp4s0
os recursos de carimbo de data/hora de uma interface de rede:sudo ethtool -T enp4s0
Se incluída na saída
PTPv2(IEEE 1588)
, a interface de rede suporta o modo de carimbo de data/hora PTP. Sem esta opção, significa que a interface de rede não suporta o modo de carimbo de data/hora PTP. -
Confirme se o usuário atual tem autoridade suficiente para ativar o modo de carimbo de data/hora PTP. Você pode tentar
sudo
executar ptp4l como administrador ou usuário privilegiado com o comando. -
Se você confirmar que a interface de rede suporta o modo de carimbo de data/hora PTP e o usuário atual tem privilégios suficientes, mas ainda encontrar esse erro, tente atualizar o kernel ou os drivers do sistema para garantir que o driver da interface de rede suporte o modo de carimbo de data/hora PTP.
Espero que as etapas acima possam ajudá-lo a resolver esse problema.
A interface não suporta o modo de carimbo de data/hora PTP:
A interface suporta o modo de carimbo de data/hora PTP: