En mi último artículo, cubrí los conceptos básicos del fichaje en el software. Este mes continuamos nuestra discusión sobre la recuperación del reloj global, la sincronización del reloj distribuido y la sincronización de eventos.
En mi último artículo, cubrí los conceptos básicos del fichaje en el software. Este mes continuamos nuestra discusión sobre la recuperación del reloj global, la sincronización del reloj distribuido y la sincronización de eventos.
Recuperación de reloj global
Suponga que tiene varios agentes en un sistema complejo. Cada uno de estos tiene su propio reloj de referencia que da un sentido del tiempo. La noción del tiempo del agente está determinada por el número de tics de reloj de referencia que han pasado desde que comenzó.
Sincronizar acciones y compartir un reloj requiere que los agentes tengan un sentido del tiempo global común. Esto es fácil con sistemas de bus como USB y Firewire, ya que los buses tienden a llevar sus propios relojes. Sin embargo, para las interconexiones distribuidas basadas en paquetes, las cosas se vuelven más difíciles. Los estándares IEEE 1588, 1588v2, 802.1as y el estándar IETF NTP están diseñados para abordar específicamente el problema de la recuperación del reloj global distribuido.
La primera tarea del sistema es elegir a uno de los agentes como maestro. Es el reloj de este agente el que se convierte en el reloj global común. IEEE 1588 y sus variantes utilizan un protocolo de elección de liderazgo entre pares que intenta elegir el reloj de la más alta calidad entre los agentes. Garantizado para elegir al único maestro.
Una vez que se elige un maestro, cada agente debe conocer la siguiente información:
- ¿Es el reloj más lento/más rápido que el reloj maestro global? Si es así, ¿en cuánto?
- Hora actual según el reloj maestro.
El método básico utilizado es enviar periódicamente mensajes de sincronización desde el maestro a otros agentes. El mensaje contiene la hora global en que se envió el mensaje. El siguiente diagrama ilustra esta situación.
El esclavo conoce las marcas de tiempo de transmisión (Tm1, Tm2 y Tm3) realizadas por el maestro y las marcas de tiempo de recepción (Ts1, Ts2 y Ts3) realizadas por el esclavo. Dadas estas marcas de tiempo, podemos calcular la relación entre el reloj maestro y su propio reloj local. Por ejemplo, el siguiente cálculo mide la relación entre dos relojes.
razón_tasa = (Ts2 – Ts1) / (Tm2 – Tm1)
Se pueden filtrar varias mediciones de este valor para obtener variaciones promedio del tiempo de tránsito. El seguimiento del valor a lo largo del tiempo también sigue la deriva de los dos relojes relacionados.
Para convertir completamente entre la hora global y la hora local, el esclavo también necesita conocer la diferencia horaria del maestro. Es decir, necesitamos saber el tiempo de tránsito de los mensajes síncronos. Para ello, el maestro y el esclavo realizan un intercambio de mensajes bidireccional.
Suponga que los tiempos de tránsito son simétricos.
2 * tiempo de tránsito = (Ts1 – Tm1) + (Tm2 – Ts2)
Entonces,
tiempo de tránsito = 0,5 * ((Tm2 – Tm1) + (Ts2 – Ts2))
Tenga en cuenta que las marcas de tiempo Tm2 y Tm1 se obtienen con referencia a un reloj diferente de Ts2 y Ts1. Entonces el esclavo tiene que hacer el cálculo.
tiempo de transito = 0.5 * ((Tm2 – Tm1) + (Ts2 – Ts2) / rate_ratio)
Conocer este tiempo de tránsito permite que el esclavo calcule su desplazamiento con respecto al reloj maestro. Ahora tiene toda la información que necesita para convertir entre hora global y local y viceversa.
En la práctica, los protocolos de sincronización de tiempo como 802.1as son un poco más complicados que lo que se muestra aquí, pero la idea básica es la misma.
Sincronización de eventos
Una vez que se establece la sincronización del reloj global, los agentes locales pueden convertir la hora global a la hora local.
hora_local = relación_tasa * hora_global + compensación
Esto significa que dos agentes pueden sincronizar sus acciones. A cada uno se le asigna un tiempo global para ejecutar el evento. El agente convierte esta hora global a la hora local y programa el evento para que ocurra en ese momento.
Por supuesto, los eventos no ocurren exactamente al mismo tiempo. Recibo un error de sincronización. Este error consiste en:
- Error debido a la recuperación del reloj global.
- Errores debido a la variabilidad en la capacidad del agente para desencadenar eventos en horas locales específicas.
- Errores por fluctuaciones en el reloj local del agente desde la última sincronización.
La magnitud de estos errores depende de la tecnología de comunicación, el protocolo de sincronización, la precisión de las marcas de tiempo de los mensajes entre agentes y la sincronización de eventos locales dentro de los agentes.
Cuando se comunica a través de Ethernet utilizando IEEE 802.1 como protocolo de sincronización de tiempo y el agente es un dispositivo XMOS XCore, el error de sincronización puede ser inferior a 150 ns.
Recuperación de otros relojes basados en el reloj global
Puede ser necesario recuperar un reloj secundario utilizando la hora global como referencia. Este es el caso del estándar IEEE AVB 1722 en el que es necesario recuperar el reloj multimedia para poder enviar audio o vídeo de un extremo a otro.
En este caso, use un bucle de control para recuperar el reloj, como se describe en mi artículo anterior sobre el reloj de software. La diferencia en este caso es cómo se detecta el error.
Un agente que envía un reloj también puede enviar una estimación de cuándo ocurrirá un borde de reloj en particular. Cuando el esclavo se recupera y emite el reloj, podemos rastrear cuándo ocurrió realmente ese borde y obtener el delta entre el tiempo esperado y el tiempo real. La existencia de un reloj global permite que los agentes tengan una base de tiempo común para calcular deltas.
Este delta proporciona un término de error para alimentar el lazo de control PID. Sin embargo, hay un “te pillé” más a tener en cuenta. El propósito es recuperar el período del reloj. Esto hace que el delta entre el tiempo de borde previsto y el tiempo de borde real sea un error integral en lugar de un error proporcional. Esto significa que el error proporcional es la tasa de cambio de delta. Una vez que comprenda esto, puede ajustar sus lazos de control de forma estándar.