Kernel
Para todos aquellos que nos interesa la compilación del kernel esta es una lectura obligada. Excelente FAQ de la gente de www.buntulug.com.ar.
Preguntas frecuentes del Kernel
1. ¿Qué es System.map?
2. ¿Dónde copio el archivo System.map?
3. ¿Dónde obtengo una lista de opciones para pasarle a make?
4. ¿Qué son los MTRRs?
5. ¿Qué son las interrupciones?
6. ¿Qué es HPET Timer Support?
7. ¿Qué es Provide RTC Interrupt?
8. ¿Qué es Power Management Timer?
9. ¿Qué es TSC?
10. ¿Qué es PIT?
11. ¿Qué es APIC e IO-APIC?
12. ¿Cual es la diferencia entre el temporizador PIT, HPET, RTC, ACPI, APIC y TSC?
13. ¿Qué es RTC Class?
14. ¿Qué es Enhanced Real Time Clock Support?
15. ¿Cuántos temporizadores tengo?
16. ¿Qué es High-Memory support?
17. ¿Qué es High Resolution Timer Support?
18. ¿Qué es Tickless System (Dynamic Ticks)?
19. ¿Qué es Memory-Split
20. ¿Qué es Enable Kernel Irq Balancing?
21. ¿Qué son los IO-Schedulers?
22. ¿Qué es SMP?
23. ¿Qué es SMT?
24. ¿Qué es Multi-core Scheduler?
25. ¿Qué es Preemption Model?
26. ¿Qué es Preempt the Big Kernel Lock?
27. ¿Qué es NUMA?
28. ¿Qué es Memory Model?
29. ¿Qué es IOMMU?
30. ¿Qué es Machine Check?
31. ¿Qué es Timer Frequency?
32. ¿Qué es CPU Frequency Scaling?
33. ¿Qué es Message Signaled Interrupts?
34. ¿Qué es ELF Binaries?
35. ¿Qué es MISC Binaries?
36. ¿Qué es a.out Binaries/Support?
37. ¿Qué es IA32 Emulation?
38. ¿Qué es Packet Socket?
39. ¿Qué es Unix Domain Socket?
40. ¿Qué es QoS/Fair Queuing?
41. ¿Por qué falta el mouse USB en Input Device Support?
42. ¿Qué es Virtual Terminal?
43. ¿Qué es Support for Console on Virtual Terminal?
44. ¿Qué es Unix98 PTY Support?
45. ¿Qué es Direct Rendering Manager?
46. ¿Qué es VGA Text Console?
47. ¿Qué es ALSA y OSS?
48. Qué es HID?
49. ¿Qué es Native Language Support?
50. ¿Cómo instalo los drivers Legacy de nVidia?
¿Qué es System.map?
Este archivo es simplemente un archivo de texto que incluye una lista con direcciones de memoria y los símbolos correspondientes. Cuando el kernel informa de algún error el mismo es logueado por el daemon klogd, el cual accede al archivo System.map para reemplazar mensajes como:
Error en la dirección de memoria 0xC123456
por mensajes como
Error en la función via_tx
Bibliografía: http://www.dirac.org/linux/system.map/
¿Dónde copio el archivo System.map?
Si vamos a tener un solo kernel basta con copiarlo en /boot/System.map, pero si vamos a tener más de un kernel disponible entonces lo copiamos en /boot/System.map-version. Ej: /boot/System.map-2.6.11. Aunque al día de hoy todos los programas que necesiten de System.map deberían ser capaz de buscarlo en /usr/src/linux-2.6.version/System.map.
¿Dónde obtengo una lista de opciones para pasarle a make?
Fácil, vamos a /usr/src/linux y escribimos el comando make help.
¿Qué son los MTRRs?
Los Memory Type Range Registers son una serie de registros que tiene el microprocesador que le permiten acceder a la memoria de distintas maneras, obteniéndose así un desempeño óptimo.
¿Qué son las interrupciones?
Las interrupciones son una forma de avisarle al procesador que hay algo que hacer, sin ellas no podríamos tener un sistema multitarea. Cada vez que llega una interrupción el procesador deja de hacer lo que estaba haciendo, atiende la interrupción, y luego vuelve a lo que estaba haciendo. En Linux podemos ver una estadística sobre las interrupciones pidiéndole los contenidos del archivo /proc/interrupts:
# cat /proc/interrupts CPU0 CPU1 0: 3860 2757868 IO-APIC-edge timer 1: 78899 60536 IO-APIC-edge i8042 8: 0 0 IO-APIC-edge rtc 9: 0 0 IO-APIC-fasteoi acpi 14: 38 38 IO-APIC-edge ide0 16: 14 1946749 IO-APIC-fasteoi nvidia 20: 123196 294424 IO-APIC-fasteoi ohci_hcd:usb2 21: 0 2 IO-APIC-fasteoi ehci_hcd:usb1 22: 0 51165 IO-APIC-fasteoi libata 23: 3388195 1090 IO-APIC-fasteoi HDA Intel, eth0 NMI: 14510 16620 LOC: 2761707 2761690 ERR: 0
La interrupción 0 corresponde al temporizador que mantiene la hora del día (en este caso es el viejo PIT), y sabiendo que este sistema genera una interrupción cada 10 ms, podemos ver que el sistema estuvo encendido (3.860 + 2.757.868) / 100 Hz = 2.762.728 / 100 Hz = 7 horas y media.
La interrupción 1 corresponde con el controlador del teclado/mouse, la 8va con el reloj RTC, etc.
NMI representa la cantidad de interrupciones no enmascarables, y la razón por la que hay tantas es que Linux las utiliza para controlar que el kernel no se bloquee, en caso de que el kernel se bloquee se mata al proceso actual y se muestran mensajes de depuración y quizás hasta se entre en panic.
LOC representa el temporizador APIC utilizado para controlar la ejecucación de los procesos.
Vean que la mayor parte de las interrupciones se reparten entre los dos microprocesadores, ya que el kernel de Linux implementa un balanceo de interrupciones (un tanto primitivo quizás). Excepto la interrupción LOC y NMI, ya que estas interrupciones son generadas internamente por cada uno de los micros.
Las interrupciones que se pueden balancear las llamamos interrupciones globales, mientras que las otras como LOC y NMI son locales. En el caso de un sistema monoprocesador la salida podría ser similar a la siguiente:
CPU0 0: 8342300 XT-PIC-XT timer 1: 22320 XT-PIC-XT i8042 6: 3 XT-PIC-XT floppy 8: 3 XT-PIC-XT rtc 9: 0 XT-PIC-XT acpi 14: 47865 XT-PIC-XT ide0 15: 128 XT-PIC-XT ide1 17: 17261 XT-PIC-XT eth1 18: 195637 XT-PIC-XT ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb4 19: 513569 XT-PIC-XT nvidia 20: 9566 XT-PIC-XT VIA8233 NMI: 0 ERR: 0
En este caso NMI es cero porque el kernel no genera ninguna, ya que no tiene sentido, porque si puede generar es porque no está bloqueado, si tiene sentido para el caso de múltipes procesadores donde un procesador puede “despertar” al otro. Además podemos ver que fue compilado sin soporte APIC, y la IRQ 0 se encarga tanto de mantener la hora del día como de controlar a los procesos.
¿Qué es HPET Timer Support?
El High Precision Event Timer es un temporizador que se encuentra en todas las computadoras medianamente nuevas, es el reemplazo natural del viejo temporizador usado en la época del DOS (el 8254/3). Tiene mayor precisión y además está compuesto por hasta 32 temporizadores, lo cual lo hace ideal para establecer alarmas. Es seguro compilar el soporte en el kernel incluso aunque nuestra computadora no tenga uno, en el caso de microprocesadores de 64 bits no nos ofrecen esta pregunta.
¿Qué es Provide RTC Interrupt?
Utiliza el HPET como fuente de interrupciones del reloj RTC, es decir, utiliza el HPET para emular al RTC, si no se selecciona se utiliza el RTC para esta funcionalidad. Pese a que todos los sistemas tienen un RTC a veces no funciona adecuadamente.
¿Qué es Power Management Timer?
Es el temporizador ACPI, uno de los tantos temporizadores que tiene nuestra PC. Todas las computadoras tinenen uno, sin embargo no todas las computadoras tienen HPET, entonces se recomienda incluir soporte ya que a veces se debe usar este temporizador.
¿Qué es TSC?
Es el Time Stamp Counter, un registro del microprocesador que aumenta su valor en cada ciclo, lo cual lo convierte en un temporizador de rápido acceso y alta resolución. Lamentablemente está sujeto a cambios en la frecuencia de trabajo del microprocesador, entonces en algunas computadoras se marca como “fuete no confiable” y no se usa. Tanto Intel como AMD prometen que el TSC no estará sujeto a cabmios en la frecuencia de trabajo del microprocesador, por lo cual en un futuro no muy lejano será muy seguro usarlo.
¿Qué es PIT?
El PIT es el famoso temporizador 8254/3, tiene una resolución muy baja por lo cual se usa unicamente si no está disponible el HPET.
¿Qué es APIC e IO-APIC?
El Advanced Programmable Interrupt Controller (APIC) es el reemplazo natural para el viejo PIC, se encarga de controlar las interrupciones y además incluye un temporizador. Todos los sistemas nuevos incluyen uno y aunque nuestro micro no lo haga es seguro habilitar esta opción. El IO-APIC es el controlador externo, que se encarga de hacerle llegar al micro las interrupciones generadas por los dispositivos. Es seguro habilitar esta opción también. En sistemas SMP es obligatorio.
¿Cual es la diferencia entre el temporizador PIT, HPET, RTC, ACPI, APIC y TSC?
Linux tiene basicamente dos cosas que hacer con los temporizadores, una es controlar el tiempo y la otra es controlar que los procesos no se ejecutan más de lo debido. Para controlar el tiempo dispone de una interrupción global (IRQ 0) que solamente le llega a uno de los micros, con esta interrupción actualiza el tiempo. Para controlar que los procesos no se ejecuten más de lo debido utiliza la interrupción generada por el temporizador APIC, la cual es local para cada microprocesador. Los temporizadores capaces de generar interrupciones son:
HPET
PIT (8254/3)
RTC
APIC
Tanto el HPET como el PIT pueden ser utiliados por Linux para controlar el IRQ 0 y actualizar el tiempo, el APIC se utiliza unicamente como interrupción local para controlar a los procesos y el RTC no se utiliza. Cada vez que Linux atiende la interrupción IRQ 0 aumenta un contador indicando la cantidad de “ticks” transcurridos desde el arranque del sistema, pero si una parte del kernel requiere más precisión (como por ej. la parte que devuelve la hora a los programas de usuario) puede llamar a cualquiera de los temporizadores para saber cuantos nanosegundo transcurrieron dentro del “tick” actual. ¿Cómo eligen a que temporizador llamar? Fácil, Linux tiene una lista de temporizadores ordenada por prioridad, de modo que siempre se llama al temporizador más preciso. En caso de que queramos modificar a que temporizador se llama podemos hacerlo mediante la interfaz que ofrece el kernel de Linux en /sys/devices/system/clocksource/clocksource0, allí hay dos archivos (available_clocksource y current_clocksource). Como se imaginarán el primero lista los temporizadores disponibles, y el segundo el que está en uso. Vale decir que si dejamos todo como está estamos más que bien, pero en caso de querer modificar la lista podemos hacer lo siguiente:
# cd /sys/devices/system/clocksource/clocksource0 # cat available_clocksource acpi_pm jiffies tsc pit # cat current_clocksource tsc # echo acpi_pm > current_clocksource # cat current_clocksource acpi_pm
Los temporizadores disponibles en Linux para medir el tiempo son:
hpet: Es más confiable que el TSC pero tiene mayor granularidad.
acpi_pm: Corresponde con el temporizador ACPI, es preferible al PIT y más confiable que el TSC, pero de muchísima mayor granularidad.
tsc: El temporizador ideal, tiene la mejor granularidad de todas, pero en muchos sistemas no es una fuente confiable.
pit: Uno de los peores, tiene mucha granularidad.
jiffies: El peor de todos, simplemente nos devuelve la cantidad de “ticks”, tiene una granularidad gigantésca de entre 1 ms y 10 ms (dependiendo de la frecuencia a la que esté nuestro kernel).
Vale decir que en sistemas de un único procesador hay una sola interrupción de reloj que se encarga tanto de mantener el tiempo como controlar a los procesos, es más, en un sistema de un único procesador no hay diferencia entre una interrupción local y una global.
¿Qué es RTC Class?
Es un controlador genérico para el Real Time Clock (Reloj de Tiempo Real) que sirve para generar interrupciones periódicas. Este controlador provee una interfaz estable a través de todas las arquitecturas.
¿Qué es Enhanced Real Time Clock Support?
Esta opción crea un dispositivo llamado /dev/rtc que nos permite justamente tener acceso al RTC, el cual podemos utilizar para crear temporizadores. Debemos recordar que Linux establece por defecto el límite al cual los programas de usuario pueden establecer la frecuencia del RTC en 64 Hz, mediante /proc/sys/dev/rtc/max-user-freq podemos establecer la máxima frecuencia a la cual lo pueden establecer los usuarios. El límite del hardware es 1024 Hz, por lo cual no vale la pena intentar establecerlo en nada mayor.
¿Cuántos temporizadores tengo?
HPET: Genera IRQ 0, provee opcionalmente de emulación RTC y además provee un mecanismo para generar alarmas/temporizadores. Accesible mediante /dev/hpet
8254: Genera IRQ 0, es el predecesor del HPET.
ACPI: No genera interrupciones, funciona a unos 3,58 MHz
APIC: Utilizado por el kernel para generar las interrupciones periódicas para cambiar de proceso.
RTC: Utilizado como fuente de interrupciones regulares para medir el tiempo o generar alarmas. Accesible mediante /dev/rtc
TSC: Utilizado para medir intervalos de tiempo muy cortos con bastante precisión. Accesible mediante la instrucción ensamblador rdtsc
¿Qué es High-Memory support?
Linux tiene problemas al acceder a más de 1GB de RAM en sistemas de 32 bits, la memoria alta le permite a Linux utilizar la memoria más allá de 1GB:
OFF: Deshabilitada la memoria alta, solamente puede manejar 1 GB aproximadamente (son unos 200MB menos).
4GB: Permite utilizar la memoria entre 1GB y 4GB.
64GB: Permite utilizar la memoria entre 1GB y 64GB.
¿Qué es High Resolution Timer Support?
Es uno de los avances introducidos al kernel de Linux luego del trabajo hecho por Igno Molnar, Con Kolivas, Thomas Gleixner y otros con respecto a interactividad y sistemas en tiempo real. Esta opción cambia el viejo modelo de Linux para manejar temporizadores por uno más nuevo y más orientado a sistemas que requieren de mucha precisión, de esta forma las alarmas dentro del kernel pueden responder mejor en un sistema interactivo o de tiempo real.
Para poder utilizar esta opción nuestro sistema debe contar por lo menos con el temporizador ACPI.
¿Qué es Tickless System (Dynamic Ticks)?
Toda la vida he imaginado un sistema operativo que no utilice un cronómetro generando interrupciones periódicas sino que lo programe como una alarma de modo que solamente avise cuando sea necesario. Imagínense la siguiente situación: el kernel no tiene nada que hacer y pone al procesador en un modo de bajo consumo, pero una interrupción del reloj lo despierta cada milisegundo, obviamente si no hay nada que hacer esto es ridículo. Sería mucho mejor parar el reloj y dejar que alguna reacción del usuario nos despierte, luego utilizamos uno de los tantos cronómetros que tenemos para obtener nuevamente la hora y no atrasarnos (RTC, TSC, etc.). Bueno, el kernel de Linux 2.6.21 tiene estas habilidades y se convierte (hasta donde yo se) en el primer sistema operativo en implementar semejante avance, ahora nuestra notebook ahorrará más baterías ![]()
Lamentablemente sólo está disponible para la arquitectura i386, pero ya vienen en camino los parches para amd64, PowerPC, y otras.
Veamos un ejemplo de lo que muestran las interrupciones en un sistema tickless:
CPU0 0: 181 IO-APIC-edge timer 1: 24982 IO-APIC-edge i8042 6: 3 IO-APIC-edge floppy 8: 3 IO-APIC-edge rtc 9: 0 IO-APIC-fasteoi acpi 14: 26713 IO-APIC-edge ide0 15: 130 IO-APIC-edge ide1 17: 16303 IO-APIC-fasteoi eth1 18: 136783 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb4 19: 103625 IO-APIC-fasteoi VIA8233 20: 336672 IO-APIC-fasteoi nvidia NMI: 0 LOC: 2576893 ERR: 0 MIS: 0
sabiendo que el comando uptime reporta 03:04:07, evidentemente los 181 ticks del temporizador no significan nada, veamos entonces el reloj APIC, este reporta 2.576.893 ticks, supongamos que funcionara a 1000 Hz, entonces:
2.576.893 / 1000 Hz = 2.576,893 segundos ==> 0,7158 horas, dista mucho de las 3:04:07
ahora supongamos que funcionara a 100 Hz, entonces:
2.576.893 / 100 Hz = 25.768,933 segundos ==> 7,158 horas, dista mucho de las 3:04:07
Las otras opciones del kernel son 250 Hz y 300 Hz, si hacen las cuentas verán que ninguna les da el valor adecuado, esto es porque es un sistema tickless, ya no depende de una interrupción periódica para llevar la cuenta de la hora ni de nada y esto es un gran avance en cuanto a rendimiento, ahora podemos tener un sistema interactivo sin necesidad de tantas interrupciones.
¿Qué es Memory-Split?
El problema que comentábamos antes también tiene otra solución si le decimos a Linux que utilice el espacio de direccionamiento virtual de forma diferente, pero hacer esto no es nada recomendable y sólo debemos hacerlo si realmente sabemos lo que hacemos. Por defecto se encuentra en 3GB/1GB (3GB para aplicaciones de usuario y 1GB para el kernel).
¿Qué es Enable Kernel Irq Balancing?
En un sistema multiprocesador/multinúcleo cada interrupción va dirigida hacia un procesador, ¿pero a cuál? por defecto van hacia el primer procesador, pero Linux es capaz de balancear la carga automáticamente, y esta opción habilita esta posibilidad. También es posible instalar el daemon irqbalance el cual realiza una mejor administración del balance de interrupciones, especialmente en sistemas con muchos procesadores. Esta opción también nos permite establecer la afinidad de las interrupciones a mano, simplemente escribiendo un valor en /proc/irq/nro_interrupcion/smp_affinity. En procesadores de 64 bits esta opción está siempre activa.
¿Qué son los IO-Schedulers?
Son planificadores de disco. Cada vez que un programa quiere leer algún archivo/directorio le envía una petición al kernel. El kernel busca en la caché si ya tiene cargado ese bloque de disco en memoria, y en caso de no ser así hace una petición al controlador de disco rígido para que busque ese bloque y lo traiga a memoria. El problema surge cuando el kernel recibe muchas peticiones juntas, ya que si bien se podrían servir en el órden en que llegan esto no es óptimo, en su lugar, el kernel deja al planificador de disco decidir en que órden se servirán las peticiones de modo que el disco realize el menor trabajo posible y las peticiones se cumplan lo antes posible.
¿Qué es SMP?
Significa Multiprocesamiento Simétrico y permite utilizar varios procesadores/núcleos.
¿Qué es SMT?
Cuando activamos la opción SMP aparece esta nueva opción, y sirve para decirle a Linux que esté alerta porque hay procesadores con HyperThreading. Esto le permite a Linux realizar ciertas optimizaciones en estos micros.
¿Qué es Multi-core Scheduler?
Es similar a SMT pero introduce optimizaciones para procesadores de múltiples núcleos.
¿Qué es Preemption Model?
Supongamos que el kernel se encuntra realizando una tarea cuando de pronto surge un evento pidiendo atención. ¿Qué debe hacer el kernel? ¿Seguir con lo que está haciendo y atenderlo después? ¿O interrumpir lo que está haciendo y antederlo ahora? Basicamente eso es lo que dice ‘Preemption Model:
No Forced Preemption: El kernel siempre termina lo que está haciendo y después atiende el evento. Esto es útil en aplicaciones que no requieran un buen tiempo de respuesta, como puede ser el cálculo en aplicaciones científicas, ya que maximiza la cantidad de trabajo producido por unidad de tiempo.
Voluntary Kernel Preemption: El kernel está autorizado a interrumpir el trabajo actual en ciertos puntos específicos para antender el evento.
Preemptible Kernel: El kernel siempre interrumpe lo que está haciendo para atender el evento, excepto en lugares específicos muy críticos. Esta opción da los mejores tiempos de respuesta, y es ideal para escritorios y otras aplicaciones interactivas.
Desde luego vale aclarar que el kernel jamás interrumpe lo que está haciendo si el evento que pide atención tiene menor prioridad.
¿Qué es Preempt the Big Kernel Lock?
Lamentablemente es algo que venimos arrastrando en Linux desde que se empezó a implementar el soporte SMP. El problema es que antes de tener soporte SMP el kernel accedía a estructuras importantes como quería, pero con soporte SMP no puede hacer esto ya que otro procesador podría estar accediendo a la misma estructura y eso podría terminar en desastre. La solución temporal que se propuso en su momento era indicar globalmente que se estaba en una “sección crítica” (Big Kernel Lock), por lo cual el procesador no podía interrumpirse por nada y además ningún otro procesador podía entrar en su propia “sección crítica”. Esa solución se fue reemplazando por indicadores locales de modo que varios procesadores pueden encontrarse al mismo tiempo en secciones críticas diferentes. Sin embargo hay todavía código que no se ha convertido al nuevo modelo y sigue utilizando el Big Kernel Lock. Esta opción permite interrumpir al kernel cuando se encuentra en una de estas mensionadas secciones críticas, y si bien no hay mucho código que se comporte de esta manera tan primitiva es mejor activarla si queremos buenos tiempos de respuesta.
¿Qué es NUMA?
En servidores grandes, con muchos procesadores, resulta ineficiente que todos los micros quieran acceder a la memoria al mismo tiempo; es por esto que en servidores grandes cada microprocesador tiene sus propios bancos de memoria. Esto introduce ventajas, pero también hay que tener en cuenta que un microprocesador accede más rapidamente a su memoria que a la memoria de otro micro. NUMA (Non Uniform Memory Access) introduce optimizaciones en el kernel para sistemas donde hay memorias de más rápido acceso que otras. Un ejemplo claro de esto es la plataforma 4×4 de AMD, ya que aquí tenemos dos procesadores de doble núcleo, cada uno con sus propios bancos de memoria. Lo normal es decir que NO a esta opción a menos que dispongamos de un sistema 4×4 de AMD, un sistema multiprocesador con micros Opteron (ojo que multiprocesador no es lo mismo que multinúcleo), un sistema Intel EM64T NUMA, o algún otro sistema de características similares con bancos de memoria separados para cada micro.
¿Qué es Memory Model?
Cuando el procesador debe comunicarse con algún dispositivo puede hacerlo de dos formas:
Con instrucciones especiales
Con entrada/salida mapeada en memoria
Esta última forma de comunicación es cada vez más común y consiste en redirigir una región de la memoria hacia el dispositivo en cuestión. En algunos sistemas estas regiones de memoria pueden no ser contigüas y superponerse con la memoria RAM, en sistemas como estos donde la memoria está tan “revuelta” le podemos decir al kernel que use el modelo de memoria “no contigüo”. En sistemas de 32 y 64 bits de Intel y AMD es más que seguro contestar modelo plano (“Flat Memory”), ya que nuestra memoria está bastante bien organizada, sin agüjeros ni cosas raras.
¿Qué es IOMMU?
Es una forma de permitir a los dispositivos realizar transferencias directas a memoria (DMA) a cualquier parte de la RAM incluso aunque los dispositivos estén limitados de fábrica. En procesadores AMD64 esto es hecho por el micro, en procesadores Intel esto es emulado por software.
¿Qué es Machine Check?
Es una característica de los procesadores Intel y AMD que sirve para informale al kernel de errores en el microprocesador. Se recomienda encarecidamente marcar esta opción y elegir más abajo el fabricante de la CPU para que el kernel pueda reaccionar adecuadamente. Si no marcamos esta opción, cuando ocurra un error en el microprocesador el sistema simplemente se reiniciará sin razón aparente.
¿Qué es Timer Frequency?
Es la frecuencia a la que trabaja el reloj. Poco y nada que ver tiene con mantener la hora del día, su trabajo es interrumpir la CPU para que el kernel pueda decidir si ejecutar otro proceso o seguir ejecutando el proceso actual, es lo que mantiene el sistema funcionando. Este valor tiene implicaciones relativamente importantes, imaginemos que el proceso que está ejecutándose actualmente debe hacerlo por 13 milisegundos más. Si la frecuencia es de 100 Hz sabemos que el reloj interrumpe 1 vez cada 10 ms, la primera vez que interrumpa al proceso le quedarán 3 ms más, la segunda vez que lo haga, el proceso ya habrá excedido su límite en 7 ms. Si la frecuencia es de 1000 Hz sabemos que el reloj interrumpe 1 vez cada 1 ms, al fin y al cabo de 13 interrupciones seguidas el proceso terminará su ejecución sin excederse ni un milisegundo. Evidentemente como pudimos ver una frecuencia de reloj baja trae implicaciones para la interactividad del sistema, pero una frecuencia de reloj alta interrumpe más veces a la CPU por lo cual se gasta más tiempo en decidir si el proceso se va a ejecutar o no, y por ende se reduce el trabajo producido por unidad de tiempo. Es más, ¡¡ imagínense estas implicaciones multiplicadas por la cantidad de procesadores que pueda tener un servidor !! Las opciones de las que disponemos actualmente son:
100 Hz: La mejor opción para servidores y otras aplicaciones donde se puede sacrificar un poco de interactividad en aras de la producción.
250 Hz: Una frecuencia un poco más eleveda que mantiene un poco mejor la interactividad y aún funciona bien para sistemas NUMA o SMP
300 Hz: Idem. al anterior pero se ajusta mejor a las frecuencias de video NTSC y PAL.
1000 Hz: Es la opción preferida para sistemas de escritorio u otros sistemas que requieran una rápida respuesta a eventos interactivos.
¿Qué es CPU Frequency Scaling?
Sirve para cambiar la frecuencia de trabajo de la CPU al vuelo, de esta forma ahorramos energía, ideal para laptops. Además de activar esta opción también deberemos más abajo elegir el driver para nuestro microprocesador, además debemos elegir como tomar las decisiones de subir y bajar la frecuencia. Lo mejor es utilizar userspace governor, ya que luego podemos instalar un daemon como powernowd (no tiene nada que ver con AMD) que controla muy bien la frecuencia. También podemos elegir otra opción como powersave o performance, pero por lo general son muy rudimentarios, como por ej. mantener la frecuencia siempre al mínimo o siempre al máximo.
¿Qué es Message Signaled Interrupts?
Es un mecanismo alternativo por el cual los dispositivos PCI pueden despachar interrupciones. Es seguro decir que si.
¿Qué es ELF Binaries?
Es el formato de archivos ejecutables y objetos compartidos de Unix (Linux, FreeBSD, OpenBSD, NetBSD, Solaris, etc.). ¡¡¡Es obligatorio decir que si!!!.
¿Qué es MISC Binaries?
Permite ejecutar otros archivos que no sean ELF. ¿Cómo? Pues basicamente permite registrar un programa para que ejecute ciertos tipos de archivos, supongamos que nosotros queremos ejecutar programas de Windows con WINE, entonces podemos decirle al kernel que ejecute los archivos .exe llamando al ejecutable de WINE, entonces en lugar de tener que escribir algo como:
wine ejecutable.exe basta con escribir ./ejecutable.exe
¿Qué es a.out Binaries/Support?
Es el viejo formato de archivos ejecutables y objetos compartidos, ha caído en desuso y a menos que necesitemos de programas MUY viejos y no tengamos acceso al código fuente no vale la pena marcar esta opción.
¿Qué es IA32 Emulation?
En procesadores de 64 bits (AMD64, x86-64, EM64T, IA32e) esta opción permite ejecutar programas de 32 bits. Se recomienda encarecidamente marcar esta opción.
¿Qué es Packet Socket?
Sirve para que los programas puedan hablar directamente con la placa de red. Es útil para algunos programas como tcpdump y aunque no pensemos utilizar estos programas marcarla no hace daño y podría venir a mano en un futuro
¿Qué es Unix Domain Socket?
Es un método de comunicación entre procesos, el servidor X11 y muchísimos otros programas utilizan estos sockets, a menos que quieras tener una sistema inútil debes marcar esta opción.
¿Qué es QoS/Fair Queuing?
Permite tener un control sobre las conexiones de red. Es útil para limitar el ancho de banda y ofrecer mejor servicio a programas que lo requieran (como VoIP). En una computadora de escritorio no tiene mucho sentido, pero si para un servidor/ISP.
¿Por qué falta el mouse USB en Input Device Support?
Porque el mouse USB entra dentro de la categoría HID. El soporte HID sirve para utilizar cualquier tipo de aparato de interacción con el ser humano a través de USB como el teclado, mouse, joystick, etc.
¿Qué es Virtual Terminal?
Esta opción nos permite tener varias terminales virtuales, es decir, emular varias terminales teniendo una sola terminal física (teclado y monitor). Es lo que nos permite utilizar la combinación de teclas ALT+Fn para cambiar la terminal. Es altamente recomendable marcar esta opción.
¿Qué es Support for Console on Virtual Terminal?
La consola es el dispotivo que recibe los mensajes del kernel, marcando esta opción le permitimos al kernel mandar mensajes a las terminales virtuales como si fueran consolas. El parámetro de arranque console=ttyX le indica a que terminal virtual debe mandar los mensajes.
¿Qué es Unix98 PTY Support?
Permite utilizar Pseudo Terminales. Este tipo de terminales se usan cuando ejecutamos la emulación de consola de GNOME o KDE, o cuando algún usuario se conecta mediante SSH o Telnet. Es altamente recomendable marcar esta opción. También debemos asegurarnos de montar el sistema de archivo devpts en la ubicación /dev/pts.
¿Qué es Direct Rendering Manager?
Habilita el soporte DRI, el cual sirve para acelerar el acceso a la placa de video. Los usuarios de nVidia no necesitan marcar esto, basta instalar los drivers correpondientes, los usuarios de otras placas deberán seleccionar el driver apropiado en el submenú.
¿Qué es VGA Text Console?
Es lo que nos permite usar Linux en modo texto utilizando el estándar VGA. ¡¡¡ Es obligatorio tener esto !!!
¿Qué es ALSA y OSS?
ALSA es Advanced Linux Sound Architecture y es el modelo actual para interactuar con las placas de sonido. OSS es Open Sound System y es el viejo sistema. Lo ideal es marcar el soporte para sonido como módulo, desmarcar soporte OSS y marcar soporte ALSA y los drivers necesarios (obviamente como módulos).
¿Qué es HID?
Es lo que nos permite interactuar dispositivos USB de interfaz humana como el teclado, mouse, joystick, etc.
¿Qué es Native Language Support?
Algunos sistemas de archivos (FAT, JOLIET, BEOS, etc ) necesitan saber como realizar la conversión entre su codifcación interna de nombres de archivo y la codificación de nuestro sistema. Aquí podemos elegir las distintas codificaciones)
¿Cómo instalo los drivers Legacy de nVidia?
Lamentablemente los drivers Legacy de nVidia no compilan así nomás con el kernel de Linux, pero jamás se imaginarían lo tonto que es corregír el problema . Lo único que hay que hacer es crear el siguiente archivo /usr/src/linux/include/linux/config.h, y luego lo rellenamos con un contenido similar al siguiente:
#ifndef __CONFIG__H__ #define __CONFIG__H__
Esto es así porque a partir de ciera versión del kernel de Linux se movió el contenido de config.h a autoconf.h. Con el archivo recién creado le estamos diciendo que cada vez que alguien pida este archivo vaya a buscar el contenido de autoconf.h, no es algo que haga falta entender, es simplemente código en el lenguaje de programación C.
Nota: Dejar un espacio extra al final del archivo (con esto evitamos un warning del GCC, aunque de todas formas el instalador de nVidia no nos avisa).
Fuente: http://buntulug.com.ar/
[...] Kernel [...]