[Solucionado]Ubuntu se bloquea por minutos

3 06 2009

Desde que he instalado Jaunty Jackalope he tenido algunos «congelamientos» del sistema con una duración de  2 a 5 minutos, cada vez que enciendo el ordenador.

En uno de sus congelamientos me dió por revisar el Visor de Sucesos ( Sistema->Administración->Visor de archivo de sucesos ) y observé lo que pasa en ese instante y me encontré que aparece el siguiente error:

argordmel-laptop kernel: [ 1844.870846] Clocksource tsc unstable (delta = -730839562 ns)

En cada congelamiento aparece esa información con algunos valores delta diferentes, pero siempre negativos.

Investigando un poco me encontré con lo siguiente:

  • El por qué se congela

Todos los sistemas operativos necesitan llevar un seguimiento de la hora en la que se encuentra el sistema mientras éste está funcionando. Esto es imprescindible para crear todos los timestamps tan utilizados en los SO: los relativos a archivos, registro de logs, etc. Para realizar esta tarea, se dispone del IRQ (o interrupción) 0, que indica al núcleo del sistema operativo que debe actualizar la hora vigente. Al arrancar linux, el kernel elige un generador de reloj y mide el tiempo que se tarda en generar un pulso (normalmente se mide en nanosegundos), almacenando este valor. De esta forma, cada vez que se genera una interrupción 0 el núcleo aumenta en uno un contador de ticks de reloj, y al multiplicar por el tiempo de separación entre ticks es capaz de calcular la hora. Si se requiere mayor precisión, el sistema calcula el número de segundos transcurridos desde el último tick.

Por otro lado, los sistemas operativos multiproceso y/o multitarea necesitan controlar el tiempo de ejecución de cada proceso/tarea para repartir los recursos del sistema entre todas las aplicaciones que corren en el sistema. Esto lo hace con el generador de reloj APIC, que viene en el núcleo del procesador.

Desde la aparición de los procesadores Pentium y algunos equivalente (como AMD) se implantó un sistema de medición de tiempo llamado TSC, cuyo se uso se generalizó rápidamente.

TSC corresponde a la siglas de Time Stamp Counter. Es un registro de 64 bits que se encuentra en el núcleo del procesador y que va almacenando el número de ticks acumulados desde el último inicio/reinicio. Tiene un refresco muy rápido, es preciso y accesible, de ahí que sea el método más utilizado para control de tiempo en la plataforma x86. Sin embargo la evolución que han sufrido los procesadores en los últimos tiempos ha mermado la fiabilidad de este método para controlar tiempo.

Hace algo de tiempo se decidió que los procesadores no deben estar contínuamente al 100% de consumo energético. Desarrollado en principio para mejorar la duración de las baterías de portátiles, se implementó un sistema para hacer variar la frecuencia a la que trabaja el procesador y, consecuentemente, su consumo según las necesidades e indicaciones que tuviese el sistema en cada momento. Al ver lo efectivo que era tanto para ahorro de consumo como para evitar problemas de calentamiento, este sistema se ha portado posteriormente también a los PCs de escritorio. Pero este sistema plantea un problema: el TSC ha dejado de ser fiable. Por cada tick del reloj del procesador se aumenta el tsc, pero dependiendo del estado de velocidad, un tsc puede aumentar, por ejmplo, 800 veces en 1 segundo y 1600 al segundo siguiente. Este problema ocurre sobre todo con los AMDs, que simplemente han reconocido este problema y no parece que intentasen nada para solucionarlo, aunque algunos Intel también lo presentan.

En el caso de los procesadores multi-núcleo, al ser un registro, el TSC está presente en cada uno de los núcleos, y lo peor es que no es posible que todos vayan completamente sincronizados. Intel ha anunciado que está haciendo grandes esfuerzos por que los TSC de los núcleos de sus micros vayan bien sincronizados, pero de momento no han conseguido terminar de solucionar el problema. Por lo que parece los núcleos del procesador no propagan lo suficiente rápido los valores de sincronización y el kernel de linux se ve afectado.

Así pues si nuestro ordenador no es demasiado antiguo podemos estar afectados por este problema. Lo normal es que el kernel de Linux se percate poco después de arrancar de que el TSC no es una fuente fiable y la cambie por otra distinta. Sin embargo hay reportes de muchos otros usuarios que comentan que la máquina se les cuelga durante 2 minutos o incluso indefinidamente por este problema. Para ser  que por un motivo desconocido el kernel detecta el problema pero no cambia la fuente de reloj.

  • Por qué no se vuelve a bloquear al momento?

Una vez se ha congelado, el sistema detecta el problema y determina qué tipo de clocksource hay disponibles, y automáticamente lo cambia para prevenir posibles bloqueos futuros durante la sesión.

  • Como solucionarlo

La solución es sencilla, para ello tenemos que colocar en el menú de arranque que no utilice el «tsc» y el tipo de «clocksource» disponible que vamos a utilizar y lo hacemos de la siguiente manera:

1. Verificamos los clocksource disponibles. Abrimos una terminal en Aplicaciones -> Accesorios -> Terminal y ejecutamos:

$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource

El resultado, en mi caso es: hpet – acpi_pm – jiffies.

Posibles alternativas al TSC

Si tenemos el problema del TSC en nuestro sistema deberíamos optar por cambiar el clocksource. Las opciones más factibles son las siguientes:

  • HPET: Son las siglas de High Precission Event Timer, también conocido como reloj multimedia. Ha sido desarrollado conjuntamente entre Intel y microsoft, aunque en las plataformas AMD también se encuentra. Es un generador de reloj,  más rápido el el RTC (Real Time Clock), y se suele utilizar para sincronizaciones. Además puede generar interrupciones periódicas.
  • ACPI_PM: En realidad es el PMT (Power Management Timer). Es el generador de reloj destinado a gobernar el sistema ACPI de la máquina. Como consecuencia, todas las máquinas ACPI lo tienen.
  • JIFFIES: Variable usada en el sistema operativo linux que nos indica los ticks que han pasado desde que se arrancó el sistema. En cada interrupción del reloj interno del sistema se incrementa el valor de la variable en uno. Esta variable esta definida en el fichero del código del núcleo en linux/jiffies.h

2. Ahora editamos el menú de arranque:

sudo gedit /boot/grub/menu.lst

3. Para evitar posibles inconvenientes hacemos una copia de la primera opción de arranque y la pegamos debajo de la misma, ejemplo:

## ## End Default Options ##
title        Ubuntu 9.04, kernel 2.6.28-11-generic (original)
uuid        e55b54c1-4b50-4901-9644-182aca18f28a
kernel     /boot/vmlinuz-2.6.28-11-generic root=UUID=e55b54c1-4b50-4901-9644-182aca18f28a ro quiet splash
initrd      /boot/initrd.img-2.6.28-11-generic

title        Ubuntu 9.04, kernel 2.6.28-11-generic (Copia)
uuid        e55b54c1-4b50-4901-9644-182aca18f28a
kernel    /boot/vmlinuz-2.6.28-11-generic root=UUID=e55b54c1-4b50-4901-9644-182aca18f28a ro quiet splash
initrd     /boot/initrd.img-2.6.28-11-generic

.
.
.

4. Añadimos «notsc» y el «clocksource» a utilizar al final de la línea del kernel en cualquiera de las dos opciones de arranque pero solo en una , en mi caso utilicé hpet, un claro ejemplo:

title    Ubuntu 9.04, kernel 2.6.28-11-generic (Configurado)
uuid     e55b54c1-4b50-4901-9644-182aca18f28a
kernel   /boot/vmlinuz-2.6.28-11-generic root=UUID=e55b54c1-4b50-4901-9644-182aca18f28a ro quiet splash notsc clocksource=hpet
initrd   /boot/initrd.img-2.6.28-11-generic

title    Ubuntu 9.04, kernel 2.6.28-11-generic (Normal, sin hpet )
uuid     e55b54c1-4b50-4901-9644-182aca18f28a
kernel   /boot/vmlinuz-2.6.28-11-generic root=UUID=e55b54c1-4b50-4901-9644-182aca18f28a ro quiet splash  
initrd   /boot/initrd.img-2.6.28-11-generic

5. Reiniciamos el equipo y listo, ya tenemos un sistema operativo sin bloqueos inoportunos!!!

Espero que esta pequeña solución les funcione como a mí.  Recuerden que los agradecimientos también se ven reflejados en los comentarios.

Agradecimientos a Nefeli por su gran aporte e investigación realizada expuesto en su blog.


Acciones

Information

12 responses

4 06 2009
Fhera

Muy buen post, a mi no me pasa este tipo de congelamientos puesto k mi ordenador es un tanto antiguo (mi procesador un Pentium 4) pero reconozco k muchas horas habeis tenido que hechar para sacar el problema. Muchas Felicidades y gracias!!!

P.D: Realicé un post contando lo mismo y poniendo k es sacado de akí, si os molestó avisadme por favor. y muchas gracias nuevamente!!!

4 06 2009
Nefeli

Gracias por incluirme en los agradecimientos. Me alegra haber servido de ayuda, significa que el artículo ha cumplido su objetivo.

Por cierto, felicidades por tu blog, muy interesante!!

9 06 2009
jose luis

Es bueno saber de todo un poco, para asi mantener nuestro pc al 100%.

buen aporte de verdad…….

18 06 2009
FRARACEX

A mi se me bloqueaba con asiduidad y no le encontaba explicacion pero podria ser por esto. Lo estoy probando a ver que tal va. Muchas gracias por el aporte

14 07 2009
chpts

excelente post y excelente blog!!
felicidades hermano!

30 07 2009
Spidy

Yo he realizado esto y sigue bloqueandose, por lo menos he conseguido que el error del clocksource deje de aparecer XD, estoy a punto de darme por vencido…

30 07 2009
argordmel

@Spidy:

Tienes razón…cuando hice el post me funcionó perfectamente por una semana – mas o menos – pero de un momento a otro bash, un congelamiento tras otro y todo igual que antes.. 😦

Ayer actualicé el nucleo a la versión 2.6.28-14, y se han reducido notablemente esos bloqueos.

Tan solo quedará esperar a la próxima versión o hacer un downgrade a ibex.

Agur y saludos desde algún lugar de Colombia!!!

3 08 2009
Diego

Hola a todos

Tengo un pentium D y la verdad ubuntu no lo tomo. Cuando tenia instalado ubuntu estuve buscando mucho. Este problema nunca ha sido resuelto ni siquiera con la última version 9.04. He intentado de todo, incluso lo que mencionas ahora y no funciono. Llegue a compilar nuevamente el kernel cambiando algunos parámetros para que el error de diferencia no fuera manejado, pero tampoco funciono.

Lastima siempre me ha llamado la atención ubuntu. Pero como dicen «no hay mal que por bien no venga» ya llevo usando Mandriva desde hace más de un año y realmente estoy más que feliz.

8 01 2010
cesar

Hola buen dia hice el procediemiento q postearon y creo q algo hice mal ya q mi compu no inicia despues de que aparace el logo de ubuntu y la Barrita q se va llenando se queda en negro. que puedo hacer pls help

gracias

23 01 2010
Carlos

A mi me ocurre algo similar dese hace unos días en mi caso la secuencia que parece repetirse es:
pulseaudio[6498]: alsa-util.c: Device front:0 doesn’t support 44100 Hz, changed to 48000 Hz.

aparece en todos los cuelgues

he desactivado el inicio de esta aplicación a ver si no me pasa más veces…

27 01 2010
Al momento de colocar clocksource aparece orden no encontrada

Trate de hacer este proceso pero me aparece orden no encontrada

27 01 2010
argordmel

Revisa el comando, copia y pega…

Agur y cualquier cosa comentas!

Replica a chpts Cancelar la respuesta