SINTONIZANDO LINUX (CÓMO SACAR EL MÁXIMO PARTIDO DE TU MÁQUINA) <Author>Ramón Gutiérrez Camus <tt><htmlurl url="mailto:rcamus@jet.es" name="rcamus@jet.es"></tt> &nl; Maquetador Linuxdoc-SGML: Antonio Ismael Olea González, &nl; <tt><htmlurl url="mailto:olea@poboxes.com" name="olea@poboxes.com"></tt> <tt>2:345/108.9@fidonet.org</tt> <date>V1.0, 22 de septiembre 1995 <abstract> Fuertemente basado en un artículo de Clarence Smith publicado en la revista Linux Journal de Noviembre'94. <bf/Nota/: Aunque se sugiere la lectura de éste documento a cualquier usuario, resultará especialmente útil para aquellos poseedores de un sistema con una versión del núcleo anterior a la 2.0. </abstract> <toc> <sect>Introducción <p> El <bf/UNIX/ en general - y <bf/Linux/ no es una excepción - intenta sacar el máximo partido posible del hardware instalado en cada máquina. Lógicamente, cualquier Sistema Operativo necesita &dquot;conocer&dquot; esas características para poder usarlas de forma óptima. No todos tenemos el mismo tipo de disco, ni la misma clase de cd-rom, o la misma memoria instalada. Al proceso que se realiza para informar al núcleo de nuestro <bf/UNIX/ de esos detalles se le conoce genéricamente como &dquot;tunning&dquot; o sintonía. <sect>¿Qué es el núcleo? <p> Ya habrás comprobado como varía el rendimiento de una máquina basada en MS-DOS, simplemente con alterar algunos parámetros del CONFIG.SYS. Pues bien: en general, los <bf/UNIX/ no tienen un equivalente al CONFIG.SYS, en el que se le diga que &dquot;drivers&dquot; se deben cargar y para que dispositivos. <p> <bf/UNIX/ optimiza al máximo sus recursos y carga todos los drivers - junto con muchas otras cosas - en lo que genéricamente se denomina &dquot;kernel&dquot; o &dquot;núcleo&dquot;. Siguiendo con el símil, sería como si cada ordenador tuviera un IO.SYS y MSDOS.SYS recompilado para cada caso en concreto (salvando las distancias). Ni un sólo byte desperdiciado; nada de reservar espacio por si acaso algún día te decides a instalar alguna cosa en especial. <p> Recompilar el núcleo - hacer un &dquot;tuning&dquot; - no es algo exclusivo de <bf/Linux/. Cualquier <bf/UNIX/ necesita recompilar (más bien &dquot;Linkar&dquot; o enlazar) determinadas librerías para adaptarse a los cambios que se puedan hacer en el equipo. No solamente cambios hardware; también hay otros muchos par metros de configuración que podemos necesitar o no. (número máximo de procesos, soporte de red...). La única diferencia entre <bf/Linux/ y los dem s *IX es que, en el caso de <bf/Linux/, disponemos de todos los fuentes. En los demás, simplemente tenemos unas librerías y unos objetos preestablecidos por el fabricante. <sect>¿Por qué recompilar el núcleo? <p> Muchos usuarios recién llegados a <bf/Linux/ piensan que, una vez instalado correctamente, la instalación en sí misma es perfecta. Pues bien, nadie debe asumir que el Kernel instalado está perfectamente adaptado a cada situación. De hecho lo más probable es que NO LO ESTÉ. <p> En primer lugar, compilando un nuevo kernel sin piezas inecesarias puedes conseguir que tu <bf/Linux/ vaya considerablemente más rápido... mucho más rápido!. <p> Es segundo lugar, es posible que tengas dispositivos para los que no está capacitado el Kernel que se haya instalado &dquot;por defecto&dquot;. Date cuenta de lo construyeron para que funcionara en miles de máquinas consideradas estándar. Ese CD-ROM especial, esa tarjeta de sonido, una tarjeta de red local, ese SCSI tan maravilloso que sólo tú y otros cientos de Linusers tienen, no estar  contemplado en lo que los &dquot;constructores&dquot; de tu instalación decidieron poner como estándar. <sect>Vale, ¿y cómo? <p> Haciendo pruebas no vas a perder nada. Que no te asuste lo más mínimo, aunque no tengas ningún conocimiento previo de <bf/UNIX/ o de &dquot;C&dquot;. Insisto: Sólo tienes que ser un poco coherente con lo que el sistema te pregunte. <p> Por supuesto necesitarás tener los fuentes del kernel instalados (estarán en <tt>/usr/src/linux</tt>). Y lógicamente necesitas tener instalado el compilador de &dquot;C&dquot; (gcc). <p> Por otra parte son necesarios unos 8 Mb de memoria para poder compilarlo por lo que, si sólo tienes 4 Mb de RAM instalados, necesitarás usar memoria virtual. En este caso consulta la documentación (<bf/FAQ/) sobre como añadir memoria virtual a tu linux. (las ordenes swapon, mkswap etc.) <sect>Configurando el kernel <p> En esta ocasión, y sin que sirva de precedente, haz el &dquot;login:&dquot; como &dquot;root&dquot; y vete al directorio <tt>/usr/src/linux</tt>. No es imprescindible, pero te evitará algunos problemas. A continuación viene la tarea más delicada: Seleccionar qué opciones quieres incluir/excluir en el kernel que se va a generar para tí. Eso se hace mediante la orden <tt>make config</tt>. Es decir, teclea: <tscreen><code> # cd /usr/src/linux # make config </code></tscreen> <p> Empieza la tarea: El ordenador te va a hacer una larga serie de preguntas de las que se contestan con un simple Sí o No (Y/N). Con la ayuda del <bf/Linux Journal/ de noviembre (prácticamente voy a traducirlo) intentaré aclararte algunas de las más dudosas: <descrip> <tag/ Kernel Math emulation: CONFIG_MATH_EMULATION ?/ Si tienes un 486 o si tienes coprocesador matemático deberás contestar <em/N/ (No). Si no tienes un coprocesador matemático deberás contestar <em/Y/ (yes). El motivo es muy simple: Pongas lo que pongas <bf/Linux/ usará el coprocesador si está disponible, pero sí contestas &dquot;Y&dquot; incluirás toda la emulación de coma flotante en el núcleo con el consiguiente derroche de memoria. <tag/ XT harddisk support: CONFIG_BLK_DEV_XD ?/ En la mayoría de los casos la respuesta adecuada es <em/N/. Se refiere al tipo de controladora. Las controladoras de disco XT de 8 bits son muy raras en los actuales 386 y superiores. <tag/ TCP/IP Networking: CONFIG_INET ?/ De momento contesta <em/N/ salvo que tengas la inmediata intención de conectarte en alguna red local, o quieras acceder a otras redes mediante SLIP o PPP. Siempre tendrás la posiblidad de preparar un nuevo núcleo para trabajar en red. En caso contrario el deroche de recursos y de memoria es tremendo. <tag/ System V IPC: CONFIG_SYSVIPC ?/ Inter Process Comunication: Consume muy poca memoria. Tú decides. Si vas a utilizar el DOSEMU - pseudo-emulador de MS-DOS para <bf/Linux/ - es imprescindible. <tag/ Use -m486 flag for 486-specific optimization: CONFIG_M486/ Si tienes un i386 contesta <em/N/. Si pones una <em/Y/ tu 386 no irá más lento, pero gastará memoria inecesariamente. Si tienes un 486 contesta <em/Y/ y conseguirás que vaya un poquito más rápido. <tag/ Standard minix fs support: CONFIG_MINIX_FS/ Minix era el fs (File System) original de <bf/Linux/. En la actualidad está muy superado por otros tipos de sistemas de ficheros y sólo se mantiene para asegurar compatibilidad descendente. Contesta <em/N/. Los disquetes que usaste en la instalación utilizan este sistema de archivos. Si quieres acceder a ellos deberás poner <em/Y/. <tag/ Extended fs support: CONFIG_EXT_FS/ Lo mismo que minix fs. Contesta <em/N/. <tag/ Second extended fs support: CONFIG_EXT2_FS/ El ext2 File System es el mejor de todos los sistemas de archivos gobernados por <bf/Linux/. Está basado en el &dquot;Extended&dquot; (el anterior) y es el más popular y el que mejor soporte tiene. La respuesta deberá ser <em/Y/. <tag/ xiafs Filesystem support: CONFIG_XIA_FS/ Otro buen sistema pero mucho menos popular. La respuesta deberá ser <em/N/. <tag/ msdos fs support: CONFIG_MSDOS_FS/ Este sistema te permitirá acceder de forma transparente al sistema de archivos tipo FAT de tu MS-DOS. (a tu C: de toda la vida). Pon una <em/Y/ si quieres acceder a los ficheros de tus particiones ms-dos desde <bf/Linux/. <tag/ /proc filesystem support: CONFIG_PROC_FS/ El /proc no toca tu disco. Es una representación en memoria y en forma de directorio /proc de los procesos, RAM, etc. Podrás verlos mediante un simple ls y cancelarlos con un <tt/rm/. Bastantes utilidades lo usan. Muchas más ventajas que inconvenientes. Contesta <em/Y/. <tag/ NFS filesystem support: CONFIG_NFS_FS/ Sólo lo necesitarás si estas conectado en una red TCP/IP. Normalmente deberás contestar <em/N/. <tag/ Kernel profiling support: CONFIG_PROFILE/ Solo para &dquot;Linux's gurus&dquot;. Como dice el <bf/Linux Journal/, si necesitas leer ésto, contesta <em/N/. <tag/ Selection (cut and paste for virtual consoles)' :/ Esta opción permitirá que hagas &dquot;cut & paste&dquot; entre las diferentes consolas virtuales del <bf/Linux/. Por ejemplo, podrás marcar con el ratón un párrafo en una consola - cut - y copiarlo en mitad de tu editor de textos en otra - paste -. Todo ello en modo texto; esto no tiene nada que ver con X-Window. De momento pon <em/N/. Ya tendrás tiempo de recompilar si lo juzgas oportuno. Recientemente se ha creado un programa denominado <tt/gpm/ que realiza las mismas funciones cut-paste que &dquot;selection&dquot;. <tag/ Sonido/ <descrip> <tag/ Full driver? NO/ Contesta <em/N/. Si tienes una única tarjeta de sonido deberá configurar el kernel para manejar tu única tarjeta. NO te interesa tener TODOS los drivers para TODAS las tarjetas. <tag/ Disable? NO/ Dile <em/N/ y vete contestando aquellas preguntas relacionadas con tu tarjeta en particular. </descrip> </descrip> <sect>Creando dependencias <p> Llegado a este punto ya habrás creado un pequeño fichero con los datos de tu sistema. En función de las opciones que hayas escogido harán falta unos fuentes u otros. Ahora tienes que dejar claro cuales son las dependencias entre eso fuentes (#includes, #defines etc... Todo ese trabajo se reduce a teclear: <tscreen><code> # make depend </code></tscreen> <sect>Compilando el núcleo <p> Una vez creadas las dependencias, deberás compilar el kernel. Para ello bastará con que teclees: <tscreen><code> # make zImage </code></tscreen> <p> Dependiendo de la máquina/RAM que tengas puede tardar desde unos 15&dquot; en 486 rápido o en un Pentium hasta varias horas en un lento 386SX. <p> Cuando ese &dquot;make&dquot; haya terminado, habrá creado un fichero llamado /vmlinuz perfectamente adaptado a tus necesidades. No obstante el proceso de instalación todavía no ha terminado. Si apagas el ordenador (haciendo un shutdown) y lo vuelves a encender, comprobarás como tu sistema sigue siendo exactamente el mismo. Para poder usarlo hace falta instalar ese núcleo en tu sistema, o en un disquete si prefieres probarlo antes. <sect>Instalando el nuevo núcleo <p> Llegamos a la parte más crítica del tunning. Se trata de sustituir el viejo kernel por el nuevo recién creado. <p> Lo más habitual es instalar el kernel en el propio disco duro y servirnos del LILO (Linux Loader) para arrancar con él. El LILO nos permite, además, arrancar cualquier otro sistema operativo, lease MS-DOS, OS/2, etc. y también pasarle parámetros al núcleo en el momento del encendido. Sin embargo también es posible arrancar con el nuevo kernel desde un disquete creado al efecto. Intentaré detallarte las dos posibilidades. <sect1>Instalación en disco duro mediante <bf/LILO/. <p> Ventajas: Arranque rapidísimo. Eficaz al 100%. <p> Inconvenientes: Generalmente hay que tocar el <bf/MBR/ (master boot record). <p> El MBR es un miniprogramilla que selecciona en el momento del arranque la partición desde cual poner en marcha el sistema. Normalmente tu MBR estará  apuntado hacia tu &dquot;C:&dquot;. <p> Es una parte realmente delicada, por lo que deberás tratarla con sumo cuidado. En cualquier caso el MS-DOS puede volver a ponerte la original mediante la orden <tt>FDISK /MBR</tt>, por lo que no correrás más riesgos que los extrictamente necesarios cuando se manipula este tipo de información. Insisto: siempre puedes dar marcha atrás mediante la orden del msdos <tt>FDISK /MBR</tt>. <p> Con la ayuda de un programa <bf/Linux/ denominado <bf/LILO/ (LInux LOader) podrás modificar esa MBR para, por ejemplo, escoger entre poner en marcha el MS-DOS o cualquier otra versión de <bf/Linux/ que tengas instala en el momento del encendido. <p> El fichero de configuración de lilo se denomina <tt>/etc/lilo.conf</tt>. con la distribución <bf/Slackware/ viene una &dquot;ayuda&dquot; denominada <tt/liloconfig/ que, guiándote por menús, te permitir  crear ese fichero tan especial. <p> Para activar el lilo podrás ejecutar la orden: <tscreen><code> # make zlilo </code></tscreen> En el directorio <tt>/usr/src/linux</tt>. <sect>Resumen <p> Crea el fichero de configuración del <tt/lilo/ (léete su documentación) y configura, crea dependencias y activa el nuevo kernel en el <bf/lilo/. Traducido a unix queda como sigue: <tscreen><verb> # cd /usr/src/linux # make config # make depend # make zlilo </verb></tscreen> </article>