domingo, junio 14, 2015

Leap Seconds: Problemas en los ajustes horarios (1 de 2)

¿Alguna vez has tenido que poner manualmente en hora un reloj porque se atrasaba o se adelantaba? Que estés más o menos familiarizado con esta acción va a depender en gran medida de tu edad, ya que hoy en día la mayoría de los sistemas que te informan de la hora no necesitan de ti para estar en hora. Es por ello que hacer este tipo de ajustes manualmente es cada vez menos común.

Figura 1: Leap Seconds: Problemas con los ajustes horarios

La razón es que, como posiblemente muchos sepáis, la gran mayoría de los sistemas con los que trabajamos diariamente ajustan sus relojes auto-mágicamente, mediante el conocido como “Network Time Protocol” (NTP). Se trata de un protocolo que aun siendo sencillo en su comprensión y uso, también es muy complejo cuando se baja a estudiarlo al detalle. Para que os hagáis una ligera idea, cuando se realiza el ajuste horario con él, se tienen en cuenta factores tales como el tiempo de respuesta de los servidores de hora involucrados o la velocidad de la red, por citar algunos de ellos.

Al utilizar el protocolo NTP, la hora se obtiene conectándose con una fuente externa que mantiene ésta con gran precisión. Son los denominados relojes atómicos, que se basan en una señal constante, emitida por la energía de los electrones de un átomo. Esto hace que estos relojes sean capaces de mantener la hora con una enorme precisión, segundo tras segundo, durante años. Y ya que estamos hablando de segundos, hay que recordar que en algún momento de la historia, dicho segundo fue definido de acuerdo a la rotación de la tierra media que tuvieron los días entre 1750 y 1890, como una ochenta-y-seis-mil-cuatrocientos-ava parte (1/86.400) de esa duración.

Esto fue así hasta 1967 donde la medición de los segundos se hace tomando como base el tiempo atómico. Según la definición del Sistema Internacional de Unidades un segundo es la duración de 9.192.631.770 de oscilaciones de la radiación emitida en la transición entre los dos niveles hiperfinos del estado fundamental del isótopo 133 del átomo de Cesio (133Cs), a una temperatura de 0º Kelvin.

Los desajustes en la hora: Hora rotacional vs Hora perpetudad

Sin embargo, una de las desventajas de vivir en un planeta en continuo deshielo, afectado por terremotos, cuya agua siente cierta atracción por La Luna, a lo que le tenemos que sumar que además vivimos en un universo en continua expansión es que, donde dije 86.400 digo Diego

Figura 2: Explicación del problema de los Leap Seconds por XKCD

Así, muy pronto los científicos se dieron cuenta de que, por un lado, la hora definida por ellos, y que no sólo utiliza esta relación 1/86.400, sino que además la mantiene y perpetúa en precisos relojes atómicos, y por otro la hora definida en función de La Tierra y en cuanto a su posición rotacional, no eran exactamente iguales.

Esto es debido a, como ya adelantábamos, el hecho de que el Planeta Tierra no deje de ser una esfera imperfecta en la que asimismo se producen terremotos, erupciones volcánicas, y que además se ve afectado por fuerzas gravitacionales provenientes de La Luna (efecto marea). Estos factores, bien ralentizan, bien aceleran el movimiento de rotación de La Tierra, y en cualquier caso, por muy pequeñas que sean las variaciones, no nos dejan indiferentes en lo que a temas horarios se refiere.

Figura 3: El terremoto de Japón acortó los días

Figura 4: El Terremoto que causó el Tsunami también afectó a la duración de los días

Debido a esto, la rotación del Planeta Tierra se ha venido retrasando una media de 2 milisegundos al día durante las últimas décadas. O 1.4 milisegundos, si tenemos en cuenta los últimos siglos, basándonos en la observación de antiguos eclipses. Esta deceleración provoca que la hora rotacional se encuentre ligeramente retrasada con respecto a la hora perpetuada en los relojes atómicos. Para darnos una idea sobre la magnitud de este fenómeno, hace 500 millones años, esto es, hace 1/9 de la vida de La Tierra, cada día duraba 22 horas en lugar de 24.



Esto significa que si la optásemos por seguir ciegamente el tiempo que nos marcan los relojes atómicos, nos daríamos cuenta de repente un día tras millones de años (si seguimos por aquí, claro está), de que el mediodía se produciría justo en mitad de la noche…

Se trata por tanto de un conflicto entre el tiempo marcado por los relojes atómicos y que consideran un día como 86.400 segundos, y la hora civil de los humanos, que experimentan el día como un giro completo de La Tierra alrededor de su eje. Por tanto, estas fluctuaciones en la velocidad rotacional de La Tierra, hacen que, incluso teniendo relojes atómicos que son utilizados por los servicios globales de establecimiento horario, cada cierto tiempo tengamos que ajustar nuestra “hora civil” con la “hora solar”, para asegurarnos de que nuestra “hora civil” no difiere de la “hora rotacional” por más de 0.9 segundos. Es ahí donde entran en juego los denominados Leap Seconds.

Leap Seconds en los ajustes horarios

De cara a ajustar la hora civil a la hora rotacional de La Tierra, se introducen cada cierto tiempo ajustes a dicha hora civil, bien adelantándola 1 segundo o bien retrasándola 1 segundo. A estos ajustes los denominamos Leap Seconds, y ha habido 26 de estos ajustes desde que la medida fue implantada en 1972. Por ahora, todos estos ajustes han retrasado la hora civil en un segundo cada vez. Acumulamos por tanto 26 segundos, que representan la variación que se ha producido desde 1972 entre la hora atómica y la hora civil. Esto significa que en 26 ocasiones los días han durado 86.401 segundos en lugar de 86.400. Desde que la medida fue instaurada en 1972, únicamente se han introducido Leap Seconds en el último día de Junio, y en el último día de Diciembre, siempre a media noche.

Como ya sabemos, también existen los años bisiestos, que tienen un día más para compensar la discrepancia entre nuestro calendario de 365 días, y el tiempo real que tarda La Tierra en dar una vuelta completa alrededor del sol. En cualquier caso los años bisiestos están para ajustar el movimiento irregular de traslación, mientras que el Leap Second está para corregir el movimiento de rotación.

Por tanto, hasta ahora, hemos visto 2 horas distintas:
International Atomic Time (TAI): es la hora atómica dada por un gran número de relojes atómicos que operan en laboratorios a lo largo del globo, mantenidos por el Bureau International des Poids et Mesures.

Coordinated Universal Time (UTC): es la base para la “hora civil”. Difiere de la hora TAI por el número de Leap Seconds introducidos históricamente.
Ambos se relacionan entre sí con la siguiente fórmula:
 TAI = UTC + dAT
, donde dAT es el total de la suma algebraica de los Leap Seconds.
Figura 5: Leap Seconds introducidos históricamente

Permitidme que, por no complicar más las cosas, dejemos a un lado la “Hora GPS”, que es la que viene determinada por los satélites GPS, que también contienen relojes atómicos, sólo que además éstos se ven afectados, dado que se sitúan en la órbita terrestre, por la Teoría de la Relatividad, haciendo que el tiempo en ellos pase más despacio, y obligando a tomar una serie de medidas.

Figura 6: Variabilidad en la rotación de La Tierra

¿Cómo afectan los Leap Second a NTP?

La inserción de Leap Seconds en UTC, y por tanto en NTP, afecta al reloj del sistema y también a la conversión entre dicho reloj del sistema y la hora civil. Existen distintas opciones de cara a abordar la inserción de un Leap Second en el sistema.

Una posible aproximación consistiría en incrementar normalmente el reloj del sistema durante el Leap Second, y retrasarlo a posteriori, una vez que el Leap Second haya terminado. El problema de este enfoque es que la escala de tiempo es discontinua y ambigua, ya que una lectura de la hora que se produzca durante el Leap Second, se repetirá posteriormente. Ésta es la aproximación que utilizan por defecto los sistemas operativos Microsoft Windows, y GNU/Linux en ciertos modos de configuración.

Figura 7: Gestión de Leap Second en Windows Time

La otra opción sería mantener el reloj congelado (en la medida de lo posible) durante el Leap Second, dando eso sí, lecturas incrementales aproximadas de la hora durante este Leap Second. Posteriormente, tras pasar el Leap Second, la hora del sistema quedaría ajustada con la nueva hora UTC, también ajustada tras aplicar el Leap Second, y en línea de nuevo con la hora rotacional del planeta. En esta aproximación la hora se mantiene durante este segundo, y se sigue incrementando con normalidad durante el siguiente segundo, una vez transcurrido el Leap Second (con lo cual no hay que retrasar un segundo para compensar).

Dado que por lógica, tras dos lecturas consecutivas de la hora se espera que ésta haya incrementado, este efecto se simula de manera artificial en el kernel durante el Leap Second, y cada lectura del reloj provoca que el reloj NTP se adelante 1 ns. En la figura siguiente se observa cómo en el caso A el reloj no ha sido leído durante el Leap Second, mientras que en el caso B, sí que ha sido leído, y el valor de la hora ha sido incrementado ligeramente durante el Leap Second, efecto que será corregido tras el mismo.

Figura 8: Congelación del reloj

Existe el temor a que una aplicación voraz consulte el reloj un gran número de veces y lo más rápido que sea posible. Lo cierto es que al incrementar de manera artificial en 10 ns cada lectura, y teniendo en cuenta que la lectura de la hora del sistema tiene un overhead de unos 100 ns, al final del Leap Second, el tiempo total acumulado incluso en ese caso extremo no sería de más de 10 ms.

En la segunda parte veremos los bugs e issues que han provocado en el pasado y pueden provocar en el futuro los Leap Seconds.

Autor: Ángel Blázquez

10 comentarios:

Anónimo dijo...

Hasta 1967 se definía como la fracción 1/86 400 de la duración que tuvo el día solar medio entre los años 1750 y 1890 y, a partir de esa fecha, su medición se hace tomando como base el tiempo atómico. Según la definición del Sistema Internacional de Unidades:

Un segundo es la duración de 9 192 631 770 oscilaciones de la radiación emitida en la transición entre los dos niveles hiperfinos del estado fundamental del isótopo 133 del átomo de cesio (133Cs), a una temperatura de 0 K

Elias Jaime dijo...

Muy buena explicación sobre un tema tan interesante como complejo. Esperando la parte 2 :)

Unknown dijo...

Muy interesante. Lo había leído en otros lugares pero no tan bien explicado, y eso que parece difícil explicarlo de otra manera. Estaré pendiente para los bugs jaja.

Anónimo dijo...

Muy buen artículo. Me ha encantado la explicación de un tema igual de desconocido que de interesante.

Un par de cositas:

-ava, el sufijo para partitivos, es con "v".
- asimismo es una sola palabra.
- según mis conocimientos, la tierra tiene 4500 millones de años. 500 millones serían 1/9 de la vida total del planeta.

Por todo lo demás, genial aporte.

Anónimo dijo...

Muy buen artículo. Me ha encantado la explicación de un tema igual de desconocido que de interesante.

Un par de cositas:

-ava, el sufijo para partitivos, es con "v".
- asimismo es una sola palabra.
- según mis conocimientos, la tierra tiene 4500 millones de años. 500 millones serían 1/9 de la vida total del planeta.

Por todo lo demás, genial aporte.

Anónimo dijo...

Muy bueno pero , por favor, no omitas la explicación del tiempo GPS.
Impaciente por leer la segunda.

Unknown dijo...

oye viejo si hay algun buen libro de seguridad informatica que me puedas recomendar,te lo agradeceria mucho.

Chema Alonso dijo...

Gracias a los anónimos por los comentarios con correcciones, pasamos a actualizar el artículo...

Saludos!

Anónimo dijo...

Esto me ha hecho pensar ¿no habrá cosas similares con los años?. Sí, sí, todos sabemos el asunto de los años bisiestos, pero resulta que hay unos "50min" por ahí sobrando que al cabo de unas décadas podrían estar contando y unos segundos que en cientos o miles de años también.

Además que hay año sideral, año nosecual, año fulanodetal, etc, etc, etc; todos diferentes en minutos y segundos.

Anónimo dijo...

Es el mejor artículo que he leido nunca sobre este tema.

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares