# [GUIA] acelerar/optimizar el arranque y sistema linux gentoo

## asph

COMO ACELERAR Y OPTIMIZAR NUESTRA MAQUINA

tambien conocido como "como volar con gentoo" xD

Esta guía pretende explicar los diferentes métodos que están a nuestra disposición para optimizar y acelerar linux gentoo. Algunos de ellos son completamente seguros y no pueden dañar nuestro sistema (como el punto 1), aunque siempre se recomienda hacer copias de seguridad al modificar ficheros importantes.

INDICE

0. Como hacer pruebas sin correr riesgos

1. Optimización de los ficheros de inicio y configuración

2. Usando rc-update

3. Configuración de las cflags y ldflags

4. Usando hdparm

5. Ventajas de prelink

6. Gestionando la memoria Swap

7. Ccache

8. Instalando gentoo en varios pc's, distcc

9. USE's, que son y como se usan para optimizar el sistema

10. Modificando los ebuilds e inyectando paquetes

11. Halt vs Suspend

12. Xdelta - Deltup

13. NPTL

14. GCC

15. Filesystems [seguridad vs velocidad]

16. Scripts útiles

0. Como hacer pruebas sin correr riesgos

Para hacer pruebas con ebuilds, archivos de configuracion y demas, en su dia me hice una instalacion dentro de un chroot para no correr riesgos. Hay una guia en ESTE post para conseguir el mismo proposito, crear una instalacion de gentoo dentro de gentoo, para poder hacer las pruebas que querais sin dañar el sistema. También podeis usar vmware o uml, pero el metodo de chroot es mas sencillo. Una vez instale gentoo en el chroot, hice una imagen comprimida. Asi, cada vez que hago pruebas y algo sale mal, vuelvo a descomprimir la imagen y tengo otra instalacion limpia para seguir probando (y mi sistema no corre ningún riesgo).

1. Optimización de los ficheros de inicio y configuración

Hay algunas operaciones que se realizan al iniciar el sistema que no siempre son necesarias. Vamos a modificar los scripts para que en vez de hacer estas comprobaciones siempre, primero mire si son necesarias o no y luego las realice o no según convenga.

/etc/init.d/modules

cambiar:

```
ebegin "Calculating module dependencies" 

                /sbin/modules-update &>/dev/null 

                eend $? "Failed to calculate dependencies" 

```

por:

```
if [ /etc/modules.d -nt /etc/modules.conf ]

    then 

        ebegin "Calculating module dependencies" 

        /sbin/modules-update &>/dev/null 

        eend $? "Failed to calculate dependencies" 

    else

        einfo "Module dependencies are up-to-date"

fi 

```

Esto hará que sólo haga un "modules-update" si realmente es necesario porque ha habido cambios.

/etc/init.d/localmount

cambiar:

```
mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null
```

por:

```
mount -aFt nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null
```

Esto hará que inicie los mounts locales en paralelo, y no uno detras de otro.

nota: algunos han comentado que este tweak da problemas usando kernels inestables 2.6.9-rcX tipo nitro patchset o love sources.

/etc/init.d/bootmisc

cambiar:

```
if [ -x /sbin/env-update.sh ] 

then 

    ebegin "Updating environment" 

    /sbin/env-update.sh >/dev/null 

    eend 0 

fi
```

por:

```
if [ -x /sbin/env-update.sh ] 

then 

    if [ /etc/env.d -nt /etc/profile.env ] 

    then 

        ebegin "Updating environment" 

        /sbin/env-update.sh >/dev/null 

        eend 0 

    else

        einfo "Environment up-to-date"

    fi 

fi
```

Esto hará que sólo haga un "env-update" si realmente es necesario porque ha habido cambios.

/etc/conf.d/rc

cambiar:

```
RC_PARALLEL_STARTUP="no"
```

por:

```
RC_PARALLEL_STARTUP="yes"
```

Esto hará que el sistema inicie la carga de servicios en paralelo y no uno detrás de otro.

2. Usando rc-update

La gestión de los runlevels es muy facil en gentoo gracias a rc-update, que nos facilita muchísimo el trabajo:

para mirar como tenemos configurado el inicio:

```
# rc-update show
```

para quitar alguna aplicacion:

```
# rc-update del aplicacion runlevel
```

nota: sustituir runlevel por boot o default (aunque pueden crearse más), si se omite el runlevel la buscará en todos los runlevels y la quitará del runlevel en el que este la aplicación

para añadir alguna aplicación:

```
# rc-update add aplicacion runlevel
```

Yo lo tengo repartido entre boot y default, notese que algunas aplicaciones se tienen que cargar antes que otras ya que son necesarias (si editais los scripts de /etc/init.d/ podeis ver los depends de cada aplicación). Por ejemplo, para iniciar sshd, antes tendremos que iniciar los servicios basicos de red.

Recientemente me he creado otro runlevel (battery) en la que he puesto todo lo que quiero tener corriendo cuando este solo en bateria. Luego con la ayuda de acpid, lo he configurado para que cuando quito el cable de corriente pasa al runlevel battery, y si lo enchufo pasa a default otra vez.

Podeis mirar en que runlevel estais y que hay iniciado del mismo con el comando rc-status:

```
# rc-status

Runlevel: battery

acpid                                             started

alsasound                                      started

domainname                                  started

gpm                                              started

hdparm.battery                              started

local                                              started

metalog                                         started

speedfreq.battery                           started

vixie-cron                                       started

wireless.baterry                              started
```

más información sobre los RC- AQUI.

Para los que arrancan directamente a X (digo xdm ya sea con xdm, kdm o gdm..) he leido que poner el xdm en el nivel de rc boot en vez de default, hará que vaya cargando las X mientras paralelamente va cargando en background el resto de servicios ya que primero carga lo que ponemos en boot y luego el default (si surge alguna incompatibilidad porque requiere algun servicio tipo getty, ponedlo en el script de inicio de xdm como depend). Si alguien lo prueba que comente su experiencia.

3. Configuración de las cflags y ldflags

En cuanto a las CFLAGS (podeis configurarlas en /etc/make.conf) son parametros que le pasamos al GCC a la hora de compilar los paquetes con emerge. Aqui uno puede ser más o menos conservador, en ESTA página y en ESTA hay bastantes recomendaciones útiles. Personalmente, mis chost y cflags para mi PIV son las siguientes:

```
CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium4 -mcpu=pentium4 -O3 -pipe -fforce-addr -falign-functions=4 -fprefetch-loop-arrays -fomit-frame-pointer"
```

nota: los cflags cambian un poquito en las nuevas versiones de gcc (3.4.x), ya que -mcpu queda deprecated, y se usa -mtune. Ademas ya se acepta pentium-m como arquitectura. Los cflags de mi portatil con el gcc 3.4.x son los siguientes:

```
CFLAGS="-O3 -march=pentium-m -mtune=pentium-m -pipe -ftracer -fomit-frame-pointer"
```

Otra "flag" interesante es -frepo, que aunque aumenta el tiempo de compilación optimiza bastante los programas c++, y no tiene efecto sobre plain c. ATENCION, esta cflag trae problemas con bastantes problemas, asi que si te peta una compilación lo primero sera quitarla. Lo ideal es ponerla solo en CXXFLAGS, asi:

```
CXXFLAGS="${CFLAGS} -frepo"
```

El tema de las ldflags esta explicado y discutido AQUI y AQUI. Son optimizaciones para el dinamic loader (ld), asi que las optimizaciones irian por el mismo camino que prelink. Yo las hye estado probando y no me han dado ningún problema al compilar, y se nota en varios paquetes una ligera mejora (fluxbox, por ejemplo). Yo ya he añadido definitivamente a mi make.conf:

```
LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
```

Algo más conservador sería 

```
LDFLAGS="-Wl,-O1"
```

4. Usando hdparm

Otra utilidad importante es hdparm, que sirve para configurar correctamente el disco duro para que aproveche todas las opciones que este ofrece:

```
# emerge hdparm

# rc-update add hdparm default
```

Ver /etc/conf.d/hdparm

ver configuración actual:

```
# hdparm -i /dev/hda
```

test velocidad:

```
# hdparm -Tt /dev/hda
```

En mi caso, tengo el archivo /etc/conf.d/hdparm modificado asi para sacar el maximo rendimiento de mi disco duro:

```
hda_args="-d1 -X69 -c1"

cdrom0_args="-d1"
```

mas info sobre la configuración AQUI y:

```
# man hdparm
```

5. Ventajas de prelink

Prelink es una potente herramienta, ya que nos permite pre-linkear las librerias que requiere un binario antes de utilizarlo. En cristiano, en vez de buscar cada vez que ejecutamos el binario que librerias va a necesitar, lo que hace prelink es modificar el binario, añadiendo una pequeña descripción de las librerias requeridas. Esto evita cada vez tener que hacer la busqueda de librerias requeridas (shared libraries) por si ha habido cambios, ya que el ejecutable ya sabe cuales son.

Importante: Cada vez que se actualizan librerias que son requeridas por binarios (como glibc), se deben prelinkear otra vez los ejecutables.

Esto nos ofrece una optimización en el tiempo de ejecución que notaremos en aplicaciones grandes, como por ejemplo kde (ademas, si prelinkeamos el KDE ya no necesita cargar cada vez el kdeinit, cosa que aun lo hace más rápido). Los pequeños binarios son ya muy rapidos y no apreciaremos la diferencia.

Requerimientos: es necesario haber compilado los binarios con binutils-2.13.90.0.xx y gcc-3.2 o superior, y tener instalado glibc-2.3.1-r2 o superior. Ademas tened en cuenta que el tamaño de los binarios aumentará levemente, y para hacer el proceso necesitas tener suficiente espacio libre en el disco.

Procedimiento:

```
# emerge prelink
```

El archivo básico de configuración es /etc/prelink.conf

```
# prelink -afmR
```

Este es el uso típico y más común, que prelinkeará TODOS los binarios y mirará si ya estaban prelinkeados y los actualizará. 

Seguramente os dará algunos errores al hacer el prelink, ya que hay algunos binarios con los que no funciona (los comprimidos con upx, por ejemplo).

Más información AQUI, y/o man prelink.

6. Gestionando la memoria swap

En este apartado solo quería indicar un par de cosillas que nos pueden ayudar.

En primer lugar, si se dispone de dos discos es mucho mejor poner la partición de swap en el segundo disco (teniendo la partición raíz en el primero) ya que mejorará enormemente los tiempos de lectura y escritura.

También desaconsejar usar un archivo en vez de una partición swap. Yo lo probé en un ordenador, eliminé la partición de swap y cree un archivo llamado ./swap de 256 M, e indique a /etc/fstab que usase ese archivo como swap. Evidentemente este procedimiento hace el sistema más lento.

Otro concepto a tener en cuenta es el de "swappiness" (kernel 2.6+). Cuando un programa necesita memoria y la RAM esta llena, hay dos opciones: o bien se vacía la RAM un poco eliminando los datos más antiguos, o bien se tira de memoria swap (más lenta que la ram). En los nuevos kernels (en los 2.4 decide el kernel) 2.6, su puede añadir una variable para ayudar al kernel a decidir si debe vaciar una parte de la ram o usar la memoria de disco (swap):

/etc/sysctl.conf

```
vm.swappiness = 40
```

El valor puede estar entre 0 y 100, cuanto más cerca de 0 más tenderá el sistema a vaciar la ram, mientras que si lo ponemos cerca de 100 optará más frecuentemente por usar la memoria swap. Por defecto tiene un valor de 60. Yo en mi portatil lo tengo puesto a 25 (no quiero calentar más el disco!). Podeis usar ´free -m´ para ver las estadísticas de vuestra memoria en un momento dado.

7. Ccache

ccache es una aplicación (incluida en portage) que hace de cache para el compilador. Con este pequeño programa (no necesita configuración, simplemente se tiene que hacer un emerge), ganaremos tiempo al compilar los paquetes, sobretodo con los make's grandes (aunque usar cache al compilar paquetes pueda parecer que no tiene lógica ya que cada paquete es diferente, acelera sobretodo las instrucciones que siempre son las mismas, como make clean).

Una vez hecho el emerge se activa solo, podeis comprobarlo haciendo:

```
# emerge info | grep ccache

ccache version 2.3 [enabled]
```

8. Instalando gentoo en varios pc's, distcc

distcc es una herramienta que nos facilita mucho la vida si tenemos que instalar gentoo en varios ordenadores en la misma red. Puede combinarse con ccache, optimizando asi el tiempo de compilación. No voy a hablar mucho de esta herramienta ya que son pocos los que tienen que instalar linux en varios ordenadores. Simplemente decir que es mucho más rápido que el sistema convencional (cada uno compilando sus paquetes), y usando cross compiling no es necesario que los ordenadores sean iguales, o tengan el mismo procesador.. simplemente compartiran las tareas de compilación.

Más información AQUI.

9. USE's, que son y como se usan para optimizar el sistema

Las variables USE son una herramienta más que nos ofrece gentoo para configurar nuestra sistema a nuestro gusto. Por ejemplo, imaginemos que vamos a compilar apache (codigo simplificadopara facilitar la lectura):

```
# emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 +ssl 6,197 kB
```

Las opciones (+/-) que aparecen detras del nombre del programa que vamos a instalar (gracias a usar emerge -v) son los USE's que podemos usar para configurar la instalación de apache. Si, por ejemplo, no vamos a querer usar ssl con nuestro apache, podemos hacer:

```
# USE="-ssl" emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 -ssl 6,197 kB
```

Como vemos, ssl ya sale desactivado y se compilará apache sin soporte para ssl.

En este ejemplo, hemos usado una variable USE directamente al hacer el emerge, aunque puedes fijar las variables que quieras para todas las compilaciones en /etc/make.conf

Este método de poner el ACCEPT_KEYWORDS en la command line al hacer un emerge no esta recomendado, si no quieres tener el ~x86 en tu make.conf y por alguna razón necesitas algun paquete en su versión más novedosa (como drivers y cosas asi), hazlo asi:

```
# echo "app-editors/nano ~x86" >> /etc/portage/package.keywords
```

Es importante que a medida que vayamos instalando paquetes, miremos las variables USE del mismo para no compilar cosas que no vamos a usar. A veces modificando las variables USE, ya no serán necesarias algunas dependencias, ahorrando tiempo y espacio de disco. Por ejemplo, al hacer un emerge del bitchx nos quiere instalar X, xmms, y otras dependencias un poco absurdas para un cliente IRC de consola. Usando USE="-X -xmms" al hacer el emerge del bitchx nos ahorramos esas dependencias. 

Como veis, las variables USE son una poderosa herramienta para usar con emerge, nos permite tener un mayor control sobre como se van a compilar los paquetes que hemos seleccionado.

Teneis una lista de las variables USE en /usr/portage/profiles/use.desc

10. Modificando los ebuilds e inyectando paquetes

Este método es muy útil, pero también tiene su peligro ya que implica modificar ebuilds. Mantened siempre una copia de seguridad de los mismos antes de hacer modificaciones.

¿Que es inyectar un paquete y de que me sirve?

Nunca te ha pasado que vas a instalar un paquete, y como dependencias te requiere otro que no quieres instalar? Por ejemplo, muchos usuarios gestionan el kernel directamente (descargando las sources en /usr/src), y no usan portage para gestionar el kernel. Entonces, al emerger paquetes que necesitan los sources del kernel instalados (o que varia su funcionamiento en los kernels 2.4 y los 2.6, como alsa) intentarán instalar los development-sources (o gentoo-sources para 2.4). Vas a permitirlo, malgastando ancho de banda descargando 30 mb's, y luego instalando el paquete?? No... sobretodo porque sabes que no necesitas ese paquete.

Para hacer un inject, tienes que poner el nombre del ebuild concreto, no simplemente el nombre del paquete:

```
# emerge inject sys-kernel/development-sources-2.6.8.1
```

Lo único que hace inject es "engañar a portage", simulando que ese paquete ya está instalado.

En este caso concreto del alsa, también tendríamos que editar /var/cache/edb/virtuals y añadir "virtual/alsa sys-kernel/development-sources", para que ya no lo requiera (conste como instalado en el virtuals).

Esta opción de inject es, desde mi punto de vista, mucho más interesante que la de mask. La diferencia es que si masqueamos un paquete, y es dependecia directa de otro no nos dejará instalarlo, dejándonos colgados sin el programa que queríamos. La opción de masquear paquetes es más bien para evitar ciertas versiones de programas, y cosas asi. Para masquear paquetes simplemente los teneis que añadir en /etc/portage/package.mask

Para hacer un mask de una versión concreta:

```
=sys-kernel/development-sources-2.6.7
```

Para hacer un mask de un paquete en general:

```
=sys-kernel/development-sources
```

Tambien puedes usar los parametros <=> para hacer masks de versiones concretas, versiones anteriores, etc.

11. Halt vs Suspend

Nunca te has preguntado porque apagas el ordenador, si puedes suspenderlo a memoria o disco? Suspender el ordenador a memoria tiene el inconveniente de que gastará batería, y perderemos los datos en cuanto se agote la misma. Pero una opción más interesante es suspender a disco, con lo que el ordenador se "apaga", pero no perdemos la sesión.

De esta manera nos ahorramos iniciar todo el sistema y los servicios cada vez que vamos a usar el ordenador.

Yo he usado swsusp2 en mi portatil y funciona muy bien, aunque para instalarlo tienes que parchear el kernel. En ESTE post se explica (en ingles) como hacerlo, por lo que no voy a explicarlo aqui. Simplemente si alguien tiene algún problema o no puede instalarlo podeis postear en este hilo.

12. Xdelta - Deltup

En ESTE post se anunciaba la reaparición de deltup en una nueva versión "mejorada", que se basa en cuando se tiene que descargar un paquete nuevo, si se tiene alguna version vieja bajarse solo la diferencia entre los dos archivos. Por ejemplo, si tenemos bajado el gcc3.3 y sale el gcc3.4, al hacer el emerge del nuevo gcc deltup se conectaria al servidor y miraria si existe algun archivo DTU. En el caso de haberlo para la version que tienes bajada, se bajaria solo el DTU y formaria el archivo final en tu disco duro. Esto puede suponer una reducción muy considerable a la hora de descargar paquetes, que sobretodo apreciarán los usuarios con conexiones bajas tipo 56k o adsl compartidas. Siguiendo el procedimiento que se explica en el post lo tendreis funcionando en 5 minutos! Yo lo he estado probando y funciona bastante bien, aunque actualmente no lo uso porque tengo conexión de sobra. Eso si, lo recomiendo para usuarios que les duela en el corazon cuando emerge -u les muestra una lista muy grande.

El incoveniente seria que no se debe hacer demasiada limpieza de /usr/portage/distfiles, aunque si pueden borrarse los paquetes de versiones ya actualizadas.

13. Native POSIX Thread Library

Esta libreria (conocida como NPTL) puede mejorar mucho el rendimiento del sistema, ya que es hasta 4 veces más rápida que la estandar de linux (LinuxThreads) al crear nuevos threads. Lo ideal si se quiere usar nptl es instalar los linux26-headers y una version reciente de glibc y gcc. Para usar nptl simplemente teneis que recompilar glibc con el flag USE "nptl" activado.

nota: para usar nptl hace falta una version de gcc 3.x o superior!

AQUI teneis un enlace a una web en el que se habla de nptl y se postea el resultado de algunos benchmarkings.

14. GCC

GCC es sumamente importante, especialmente en una distribución como gentoo en la que los usuarios buscan optimizar su sistema. Usar una versión actual de gcc tiene varias ventajas ya que todo el codigo que generemos estará mejor optimizado, sobretodo porque las versiones nuevas de GCC trabajan bastante este aspecto (a partir de gc 3.4.X ya se puede usar -march=pentium-m para los procesadores centrino)

Instalar una version novedosa de gcc es fácil, simplemente haced un emerge de gcc con ~x86:

```
# echo "sys-devel/gcc ~x86" >> /etc/portage/package.keywords

# emerge -u gcc
```

15. Filesystems [seguridad vs velocidad]

Despues de probar varios filesystems, actualmente uso reiser4 por ser el más rápido. Creo que, a no ser que estemos hablando de servidores, es muy útil usar un sistema de archivos que sea rápido, y mantener nuestras copias de seguridad actualizadas. De todas formas, habiendo pasado por ext2, ext3, reiserfs, xfs, reiser4 y algunos otros de encriptación, NUNCA he tenido ningún problema de corrupción de archivos, y han habido varios cortes de luz. Entre un "emerge sync" en un sistema con ext3 y un un "emerge sync" en un sistema con reiser4 pueden haber varios segundos de diferencia (al hacer el primer emerge sync del sistema, que actualiza casi todos los paquetes del arbol se nota muchisimo la diferencia, quizas 1 o 2 minutos). Reiser4 aun no esta incluido en el kernel porque hace muy poco que ha salido la versión final, aunque existen parches que se incluyen en los kernels CK, nitro, love, etc.

Para convertir la partición / a reiser4, tendreis que haceros con un livecd que soporte reiser4 como ESTE, e instalar un kernel que lo soporte (ck-sources por ejemplo). Hay varias guias en el foro.

NOTA: Mucha gente se queja de que no encuentra Reiser4 en el menu de FileSystems del kernel, aseguraos de que en "kernel hacking" teneis desactivada la opción "use 4kb for kernel stacks instead of 8kb", que no es compatible con reiser4 por el momento, y ya os aparecerá la opción de reiser4 justo encima la opción de reiserfs.

16. Scripts útiles

Hay varios scripts que corren por los foros que son bastante útiles para gestionar nuestro sistema:

1- esearch

Este ya ha sido incluido en portage (podeis instalarlo con emerge esearch), y es una utilidad para hacer las busquedas en el arbol de portage más rápidas. Despues de cada emerge sync tendremos que actualizar la base de datos de esearch con eupdatedb (a no ser que usemos esync, que hace un emerge sync, eupdatedb y muestra una lista con los nuevos ebuilds a actualizar)

2- portagedb

Parte del mismo concepto de esearch, pero es más rápido (y tarda muchisimo menos en actualizar la base de datos). Aun es un proyecto joven y le falta trabajo, aunque promete bastante.

Más información AQUI.

3- Cruft

Este script nos generará una lista de todos los ficheros del sistema que podrían ser borrados. El eobjetivo es mantener el sistema limpio y ordenado. Hay que ir con cuidado con los falsos positivos, aunque en general funciona muy bien (muestra archivos de configuracion de paquetes que has desinstalado, logs antiguos, etc etc).

Más información AQUI.

3- Stale

Interesante script, que nos ayudara a mantener /usr/portage/distfiles con un tamaño optimo. El script hara una busqueda en ese directorio, y borrar (cuando se invoca con --nopretend) los archivos viejos, NO los actuales.

Es decir, que si tenemos libtool-1.3.5.tar.gz y libtool-1.5.2.tar.gz, borrara el archivo libtool-1.3.5.tar.gz (es muy comodo, ya que primero muestra la lista y despues los borra tras tu aceptación). Se lia un poco con ficheros tipo font-arial-iso-8859-1 y font-arial-iso-8859-2, en los que la numeración no correspone a la version (lo mismo con glib y gtk con sus respectivas versiones 1.x y 2.x).

Más información AQUI.

4- Porthole

Interfaz hecha en python (+gtk) para portage, que nos ofrece un aspecto más visual, y nos facilita la gestion del sistema. Esta incluida en portage, bastará con un emerge porthole.

4- guitoo

Otra interfaz para portage, realizada con QT (para los amantes de kde). Aun es un proyecto joven, aunque promete bastante.

Más información AQUI.

-en constante progreso y actualización 11/01/2005-

----------

## luisfeser

Interesante post   :Very Happy: 

Pero el truco de los mulos esta bien? me da errores y no carga algunos modulos  :Confused: 

Pero el del localmount se nota mucho, si  :Smile: , y el del env-update, pues nos se, jeje. Pero en general si k se nota bastante.

----------

## asph

sorry, habia un pequeño error en el script  :Razz: 

ya lo he arreglado y he añadido tambien que cuando no es necesario hacer el update de los modulos o el del environment lo diga (up-to-date).

un saludo

----------

## Soulcito

Creo que otro *truco* o mas que todo un consejo, seria iniciar en el arranque SOLO los servicios que siempre se usan y son indispensables, los que no lo son se podrian inicializar manualmente si se diera el caso. No creo que sea poco comun tener servicios que casi nunca usamos incializados y demoran harto ... , no se como por ejemplo nessusd (bueno fue mi caso por un par de semanas :S, ke tonto no?  :Razz: )

----------

## -RdX-

hace tiempo vi un post sobre como optimizar las "FLAGS" del gcc incluso venia un script que dependiendo de cpuinfo te daba las opciones apropiadas.

En mi caso fueron estas, tengo un pentium 4 HT a 2,8:

```

CFLAGS="-O2 -march=pentium4 -mfpmath=sse -msse2 -mmmx"

```

[/code]

----------

## luisfeser

Ya funciona bien lo de los modulos  :Smile: 

Y se nota mucho si. A ver si encontrais alguna movida mas, jeje.

El tema de las flags con el script k comentas -RdX-, no se, pero da unas flags muy normalillas, indicadas para el procesador, pero sin optimizaciones mas allá de lo normal.

----------

## asph

es normal, son gente conservadora  :Razz: 

el único problema de usar tantos cflags es que tarda un poco más al compilar los paquetes, aunque luego "teoricamente" debería ir más rápido..

otra "cosilla" que puede ser interesante para recien iniciados a gentoo es la instrucción:

```
rc-update show
```

que os mostrará como teneis configurados los scripts del inicio, y si estan en boot o default. De esta forma podeis agregar/quitar servicios según os convenga:

añadir servicio X (en default o boot según convenga)

```
rc-update add X default
```

quitar servicio X (se puede omitir "default", y buscará en todos)

```
rc-update del X default
```

 (un amigo mio arrancaba varios procesos que no usaba para nada, y evidentemente despues de quitarlos el arranque era un poco más rápido)

más info `man rc-update`, un saludo

----------

## luisfeser

A mi el tema este de los servicios siempre me ha tenido un poco despistado....

y es k hay algunos k se para k sirven, como el acpid, alsasound, cups, etc...

pero hay un grupito de ellos k ni idea, como el urandom, net.lo, serial, winbind, y algunos mas. Lo he echado un vistazo, a ver si me aclaro y nada.

El caso es k el servicio clock me da errores de vez en cuando, y me dice k ya esta corriendo, o algo similar. Asi k lo he kitado y todo sigue funcionando correctamente, y se supone k hay otros servicios a su vez k dependen de este. Pero bueno, si se queja mi gentoo ya se lo pondré, jeje.

Si sabeis de algun sitio donde expliquen para que son estos servicios y si son idispensables (como el localmount), pues comentadlo.

Saludos.

----------

## wel

Que me corrijan si me equivoco, pero creo que el script net.lo inicializa la interfaz de red loopback, y el serial lo que hace es configurar los puertos serie. Winbind me suena, y urandom... ¿no será algo relacionado con el generador de números aleatorios?. No lo sé, tendría que mirar.

----------

## asph

alguien ha probado lo de arrancar el xdm en 'boot'? yo estuve haciendo pruebas en un pc e iba bastante bien, mientras arrancaba las X iba cargando los demas servicios en background  :Smile: 

----------

## flipy

genial howto, quizas deberia estar en sticky no?

muy buena la verdad!

----------

## asph

me alegro de que sea útil para alguien, la verdad es que son detalles que ayudan bastante a acelerar el arranque, sin perder rendimiento o capacidad (simplemente "desactiva" opciones de arranque CUANDO no son necesarias).

si alguien tiene más consejos o optimizaciones que las comparta  :Smile: 

un saludo

----------

## Sertinell

Hola yo acabo de probarlo y en ese aspecto no noto diferencia. Lo qe si no to es lo de los modulos. Mi problema esta en hotplug, qe me tarde muxo en cargar, sobre todo la parte del usb

----------

## quelcom

 *Quote:*   

> Hola yo acabo de probarlo y en ese aspecto no noto diferencia. Lo qe si no to es lo de los modulos. Mi problema esta en hotplug, qe me tarde muxo en cargar, sobre todo la parte del usb

 

Cierto, yo en este aspecto decidí sacarlo del inicio, ya que en mi maquina no entran practicamente nunca artefactos USB y demas. En el momento que meta cualquier cosa antes hago un rc-update add hotplug default y reinicio.

Así me ahorro varios segundos mas que siempre se agradecen.

PD: genial tuto siddhartha, pa bookmarks   :Wink: 

----------

## Sertinell

Umm no seria mas facil un 

```
#/etc/init.d/hotplug start
```

?

No me gusta reiniciar mi sistema amenudo

----------

## asph

gracias quelcom  :Wink: 

yo como en tu caso el hotplug y los usb's no los uso mucho, por lo que tampoco lo cargo en el inicio.. eso si,  como dice Sertinell puedes arrancar el servicio sin necesidad de reiniciar.

incluso puedes hacerte alias tipo:

/etc/profile

```
alias hotplug-on='/etc/init.d/hotplug start'

alias hotplug-off='/etc/init.d/hotplug stop'
```

puedes usarlo para los servicios que mas uses a lo largo del dia (en mi caso sería más el sshd), a mi me parece bastante comodo.

Lo mismo con unidades del disco  las que no accedas siempre (como por ejemplo particiones de windows o otros sistemas), puedes poner el parametro "noauto" en el /etc/fstab y hacer el mount cuando te interese (aqui también puedes hacerte un alias! xD)

parece innecesario montarlas cada vez si quizas no vas a usarlas  :Razz: 

un saludo

----------

## quelcom

Teneis razon, puedo arrancar hotplug sin tener que reiniciar. Pensaba que hotplug solo podia aparecer en el arranque y que despues no podias iniciarlo. 

Respecto a acceder a unidades de disco no siempre usadas pues siempre he utilizado el noauto: en el disco de win y en una particion en el mismo disco de gentoo que la uso para backups y otras cosas.

Despues lo monto y desmonto en un plis con la utilidad que incluye gkrellm (Builtins > FIle System).

Saludos

----------

## L41n

He aplicado todos los cambios que has comentado y he ganado algunos segundos de arranque.

Antes de hacer los cambios, he calculado el tiempo de arranque y han sido unos 17 segundos hasta el inicio de KDM. Despues de aplicar todos los cambios, he notado que ha pasado de arrancar en 17 segundos a terminarlo en 14.

Tambien he cambiado el init de XDM al boot y aunque la carga total de todo se siga haiendo en 14 segundos, da una sensación de mas velocidad ya que se inicia antes mientras que los otros procesos de inicio se van cargando.

Gracias siddhartha, una guia estupenda   :Smile: 

----------

## asph

bueno no esta nada mal, 3 segundos.. es un 18% más rápido  :Razz: 

alguien como yo que no dejo el pc siempre encendido, igual inicio el PC unas 500-600 veces al año o más, eso serían 30 minutos que nos ahorramos  :Smile: 

30 minutos que podemos dedicar a otras cosas, como jugar al UT xD

----------

## ertomas

Excelente!!!!!!  :Laughing:   :Laughing:   :Laughing: 

Se nota notablemente, y le da mayor fluidez a la hora de cargar,los modulos, particiones...etc...

Estupendo, te lo has currao!!!!

Un saludo  :Very Happy:   :Very Happy:   :Very Happy:   :Very Happy: 

----------

## asph

bueno, podría ampliarse mucho más hablando de prelink, hdparm,  USE's, compilar binarios, modificar ebuilds para hacerlos más lights, etc etc.. a ver si algún dia me animo o lo voy añadiendo poco a poco  :Smile: 

----------

## L41n

Creo que todos lo estaremos esperando con impaciencia, muchas gracias de nuevo por tu trabajo  :Smile: 

Sobre prelink, la mejor forma de llamarlo sería: prelink -Ramf, ¿no?, de esta forma es como llevo llamandolo mucho tiempo y siempre ha sido muy eficaz (más información en `man prelink').

Otra pregunta que quería hacerte. ¿A qué te refieres con ebuilds mas lights?, ¿podría ser posible incluso editarlo para optimizar alguna función en especial y hacerlo menos tardío a la hora de la compilación?, no estaría nada mal poder conseguir esto  :Smile: 

----------

## asph

bueno, me referia a editar los ebuilds para quitar componentes o dependencias que jamas vamos a usar.. por ejemplo el ebuild del kde-base, puedes modificarlo para quitar kate, khelpcenter, kpager, konsole, etc etc.. ya que si usamos otros programas en su lugar no los necesitamos para nada. esto se puede aplicar tambien a otros paquetes, aunque hay que ir con cuidado xD

----------

## asph

alguien tiene experiencia con los procesadores centrino (pentium m) y las cflags? tengo entendido que es mejor usar pentium3 con algunos parametros antes que pentium4 (como sse2), pero el otro dia configuraba el portatil de un amigo y no estaba del todo seguro..

a ver si alguien ha estado haciendo pruebas o ha leido algo sobre el tema

salu2

----------

## Franco Gotusso

Yo tengo todo el sistema compilado con estas cflags y va de maravilla.

```
CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer -ftracer -fforce-addr -frerun-cse-after-loop -maccumulate-outgoing-args -ffast-math"
```

Last edited by Franco Gotusso on Sun Apr 03, 2005 7:13 pm; edited 2 times in total

----------

## ijr

Hola,

Hay una recopilación de "trucos" sobre el tema en

https://forums.gentoo.org/viewtopic.php?t=131142

un saludo

----------

## psm1984

 *ijr wrote:*   

> Hola,
> 
> Hay una recopilación de "trucos" sobre el tema en
> 
> https://forums.gentoo.org/viewtopic.php?t=131142
> ...

 

Si, es justo el enlace que da siddhartha al principio.   :Razz: 

----------

## oCHARLIEo

 *siddhartha wrote:*   

> alguien tiene experiencia con los procesadores centrino (pentium m) y las cflags? tengo entendido que es mejor usar pentium3 con algunos parametros antes que pentium4 (como sse2), pero el otro dia configuraba el portatil de un amigo y no estaba del todo seguro..
> 
> 

 

Lo primero darte las gracias por el howto, es claro, conciso y con unos resultados estupendos.

Sobre los Centrinos, es correcto que es mejor utilizar en las CFLAGS la del pentium3, el motivo es sencillo. El desarrollo de procesador Centrino se realizo en su dia partiendo del esquema de un pentium3, se amplió el juego de instrucciones y se redujo el consumo... Ya estoy cansado de advertir que el pentium4 no se parece en NADA a un Centrino...

Lo ideal seria en las CFLAGS especificar como procesador el pentium3 y luego agregar todas las extensiones que tiene el centrino y que no tiene el pentium3, como por ejemplo las sse2.

Pero lo cierto es que al aplicar el pentium3+sse2 da problemas de compilacion con algunos programas (por ejemplo el Konqueror) asique ojito.

Un saludo

----------

## asph

parece ser que como dice oCHARLIEo para los centrino lo ideal en cuanto a cflags es usar -march=pentium3 y añadir los soportes extra que soporte el procesador, como sse y sse2 (see ya lo incluye el -O3)

ademas, no olvideis que podeis controlar la velocidad del procesador (speedstep), poniendo el procesador al maximo, al minimo (max. bateria) o dinamico (va aumentando y reduciendo la frecuencia segun la carga):

```
echo "powersave"   > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

echo "dynamic"     > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
```

una buena utilidad para controlar el procesador es speedfreq (emerge speedfreq)

un saludo

----------

## oCHARLIEo

otra curiosidad siddhartha, en algunos portatiles centrino se adjunta hardware que controla la velocidad del procesador de forma autonoma si no se gestiona por software... de forma que ni tan siquiera es necesario el speedfreq o el cpudynd (q es el q uso yo ^_^)

----------

## asph

entonces igual se puede configurar el speedstep desde la bios.. yo tengo un centrino pero desde la bios no me sale ninguna opcion referente al procesador.

he mirado pero aun no hay actualizaciones de la bios  :Razz: 

de todas formas tengo hechos tres alias para el speedfreq, y configuro la velocidad del procesador facilmente, algo tipo:

/etc/profile

```

alias maxcpu='speedfreq -p performance'

alias mincpu='speedfreq -p powersave'

alias dynacpu='speedfreq -p auto'
```

mas info interesante sobre el tema AQUI

----------

## asph

como sabeis, al compilar el kernel se ignoran las cflags que ponemos en el make.conf ya que el kernel tiene que ser muy estable.

pues bien, ahi va un pequeño truquillo para configurar cflags para compilar el kernel (ponedlo antes de compilar el kernel):

```
export CFLAGS_KERNEL="<poned las cflags que querais aqui>"
```

aviso: esta medida es "tunning extremo", y aunque no esta recomendado puede hacer el sistema bastante mas rapido. mantened una copia del kernel actual por si no os funciona bien el nuevo kernel optimizado!!!

por otro lado, alguien ha intentado aumentar el MAKEOPTS del make.conf para acelerar las compilaciones? tengo que probar a ver, ya posteare los resultados  :Smile: 

----------

## quelcom

Bufff, esto promete mucho   :Very Happy: 

Cuando me meta a compilar el nuevo 2.6.8 pruebo y comento como ha ido.

Gracias siddhartha

----------

## dykstra

Jejeje gracias , la verdad es que funciona de fabula! ahora arranca unos diez segunditos más rápido con las optimizaciones.. he probado todas menos la que comentais del gdm....

Ya sé que me tengo que mirar la parte del handbook de scripts de inicio... pero me podrías decir como hacerlo?? (es por no cagarla   :Embarassed:  )

Sería algo como 

rc-update del gdm default

rc-update add gdm boot  

 *Quote:*   

> Bufff, esto promete mucho Very Happy
> 
> Cuando me meta a compilar el nuevo 2.6.8 pruebo y comento como ha ido.
> 
> 

 

Amén hermano   :Laughing: 

Salu2 y THX por el hilo !   :Wink: 

----------

## asph

el uso de los runlevels es muy facil en gentoo gracias a rc-update:

para mirar como lo tenemos configurado:

```
rc-update show
```

para quitar alguna aplicacion:

```
rc-update del aplicacion runlevel
```

nota: sustituir runlevel por boot o default (aunque pueden crearse más), si se omite el runlevel la buscará en todos los runlevels y la quitará del runlevel en el que este la aplicación

para añadir alguna aplicación:

```
rc-update add aplicacion runlevel
```

Yo lo tengo repartido entre boot y default, notese que algunas aplicaciones se tienen que cargar antes que otras ya que son necesarias (si editais los scripts de /etc/init.d/ podeis ver los depends de cada aplicación). Por ejemplo, para iniciar sshd, antes tendremos que iniciar los servicios basicos de red.

más información AQUI.

----------

## dykstra

Gracias , pues ya está hecho.. con un :

rc-update del xdm default

rc-update del famd default

rc-update add xdm boot

rc-update add famd boot

pero no noto ningún aumento de velocidad apreciable... cachis...

En fin , ahora a bregar con el prelink   :Wink: 

Salu2

----------

## asph

como ahora el post es un sticky, estoy mejorando el aspecto visual del documento, poniendo un índice y ampliando considerablemente el contenido.. podeis postear dudas y/o problemas que tengais al usar la guia, asi como sugerencias o comentarios para su ampliación.

un saludo

----------

## dykstra

sobre el prelink del kde (kde init )... no se puede hacer algo similar para gnome por ejemplo?   :Very Happy: 

Salu2

----------

## asph

pues con gnome no se como funciona, aunque diria que es directo.. en el kde es el mismo el que si le informas que llevas prelink ya no carga kdeinit:

/etc/env.d/99kde-env

```
KDE_IS_PRELINKED="true"
```

puedes preguntar en #gnome o #gentoo / #gentoo-es en irc.gentoo.org igual alguien sabe si hay algun parametro para gnome, aunque puede ser que simplemente al modificar los binarios con prelink ya funcione bien, el kde tiene un programa externo para hacer lo que con el prelink ya no hace falta, por eso ya no lo necesita..

----------

## gringo

( un simple apunte ) a la regulación de swap tb. se puede acceder através del interfaz proc, p.ej. :

```
echo 0 >/proc/sys/vm/swappiness

```

No os olvidéis de ccache y distcc   :Wink: 

gracias y saluetes

----------

## asph

como dices, tambien se puede hacer desde proc.. de todas formas prefiero hacerlo por un .conf ya que asi lo tienes ordenadito y no tienes que acordarte del path de /proc  :Razz: 

no pensaba hablar de distcc ya que mas que optimizar es para ahorrar tiempo al instalar gentoo en varios pc's.. y ccache no lo conozco, puedes explicar un poco para que sirve? de todas formas ya lo investigare

gracias por las sugerencias  :Smile: 

----------

## gringo

comentaba lo de proc, porque mucha gente ( como yo) tenemos un script para variables en /proc tanto para iptables, monitoreo de hardware/Redes, memoria, etc. Sería añadir solo esa entrada al script, cambiando el 0 por otro número claro está, sino la tenemos   :Wink: 

 *Quote:*   

> no pensaba hablar de distcc ya que mas que optimizar es para ahorrar tiempo al instalar gentoo en varios pc's.

 

Lo mejor de éste peaaazo software es compilar algo en el "bixo proliant" pal pobre portátil  :Wink: 

ccache --> http://ccache.samba.org/  caché intermedia para el compilador gcc, se nota sobre todo en un make muu grande.

La instalación en gentoo es completamente transparente al usuario, se activa el solito y no hay que retocar nada   :Wink: 

Si lo instaláis, acordaos de hacer limpieza de la cache de vez en cuando con un ccache -c ( añadid una tarea al cron)

```
emerge -vu ccache

```

Y una duda : lo de añadir xdm a boot tiene algun sentido? Quiero decir, el script no esperará a que se ejecute local antes de tocar xdm. Alguien ha probao ?

saluetes

----------

## asph

si pones el xdm en el nivel boot, y tienes activado el RC_PARALLEL_STARTUP en /etc/conf.d/rc, mientras carga el xdm ira cargando los demas servicios, no se esperara a acabar con el xdm.

lo del ccache parece interesante, lo probare y si veo que se nota lo pongo en la guia  :Smile: 

grasias

----------

## dykstra

 *Quote:*   

> si pones el xdm en el nivel boot, y tienes activado el RC_PARALLEL_STARTUP en /etc/conf.d/rc, mientras carga el xdm ira cargando los demas servicios, no se esperara a acabar con el xdm. 

 

El problema es que el xdm se carga casi al final de todos los servicios...

cchache habrá que probarlo (en cuanto amplie la cantidad a /   :Laughing:  )

Salu2!

----------

## gringo

la verdad no he probao lo de xdm en boot, habrá que mirar como se porta    :Wink: 

Otra cosilla quizás interesante, que está tb. comentado en algún lao en esta  web, acovea

Programa testeador de las posibilidades de la cpu indicando con bastante fiabilidad los flags que soporta. Además hay abundante info acerca de flags para gcc en ésta web.

saluetes

----------

## dykstra

A mí un truquillo que me ha gustado es poner en /etc/make.conf

PORTAGE_NICENESS=19

Para esos emerges largitos en los que apetece usar el mplayer   :Laughing: 

Salu2

----------

## caos

Como dice gringo con el programa acovea podemos saber cuales son los flags óptimos para nuestra cpu.

Para quien le interese voy a comentar como usarlo.

En primer lugar y como ya imaginareis:

```

# emerge acovea

```

En segundo lugar ejecutamos el siguiente script, que nos hará siete tests con acovea. Tomaoslo con calma porque tarda un buen rato. Para que os hagais una idea, en mi máquina (pentium3 933) tardó con la primera prueba 5 horas y media. Cuando hagais estos tests, si podeis, que la cpu no esté con ninguna otra tarea para que los resultados sean lo más fiables posibles.

```

#!/bin/sh

 

BENCHES="alma evo fft huff lin mat1 tree"

 

for bench in $BENCHES; do

        echo ""

        echo "*** $bench ***"

        time runacovea -config gcc33_pentium3.acovea -bench ${bench}bench.c\

                1> ${bench}.run 2> ${bench}.err

done 

```

En último lugar, ejecutamos este otro script que nos informará de como han ido todos los tests anteriores y de las flags óptimas para nuestra máquina.

```

#!/usr/bin/env perl

#----------------------------------------------------------------------------

#

# Settings

#

# Names of benchmarks run by Acovea

@benches = ("alma", "evo", "fft", "huff", "lin", "mat1", "tree");

# Number of populations evolved per benchmark by Acovea

$pops = 5;

# Population size

$popsize = 40;

# Number of generations of evolution by Acovea

$gens = 20;

# Suppress output of statistical mumbo-jumbo?

$suppress = "1";

#----------------------------------------------------------------------------

#

# Digest data from *.run files

#

@switches = ();

$listflag = "";

foreach $bench (@benches) {

   open(BENCHRUN, "$bench.run");

   $genflag = "";

   $countflag = "";

   $blankflag = "";

   $linecount = 0;

   while (<BENCHRUN>) {

      # Look for final iteration

      if(/^iteration $gens/) {$genflag = "1"; next;}

      # Look for start of option counts table

      if($genflag && /^Option counts:/) {$countflag = "1"; next;}

      # Look for end of option counts table (blank line)

      if($genflag && $countflag && /^$/) {$blankflag = "1"; next;}

      # Parse counts lines

      if($genflag && $countflag && (! $blankflag)) {

         # first bench

         s/\n$//;

         if($listflag) {

            s/(^\s*?-\S+?\s+?)(\S)/$2/;

            s/\s+/ /g;

            s/\s$//;

            my @line2 = split(/\s/);

            $ref2 = $switches[$linecount];

            push @$ref2, @line2;

         }

         # subsequent benches

         else {

            s/^\s*?-/-/;

            s/\s+/ /g;

            s/\s$//;

            my @line = split(/\s/);

            $ref= \@line;

            @switches = (@switches, $ref);

         }

         $linecount += 1;

      }

   }

   $listflag = "1";

}

#----------------------------------------------------------------------------

#

# Calculate mean (total/bench), standard deviation, confidence interval,

# and score for each switch across all the benchmarks

#

#

# Implementation of erf()

# (continuing fraction by Laplace, Legendre, Ramanujan)

#

$pi = 3.14159;

sub erffrac {

   my($x, $count, $max) = @_;

   if ($count > $max) {1;}

   else{

      if ($count % 2 == 0) {$a = 2;}

      else {$a = 1;}

      $a*$x+$count/&erffrac($x, $count + 1, $max);

   };

}

sub erf {

   my($x) = @_ ;

   1-exp(-$x**2)/sqrt($pi)/&erffrac($x, 1, 10.*(1 + 1/$x));

}

#

# End implementation of erf()

#

@tswitches = ();

foreach $line (@switches) {

   # Mean

   $col = 1 + $pops;

   $total = 0;

   @line2 = @$line;

   while ($col < $#line2 + 1) {

      $total += $line2[$col];

      $col += 1 + $pops ;

   }

   $mean = $total/$#benches;

   # Standard deviation

   $col = 1 + $pops;

   $total = 0;

   while ($col < $#line2 + 1) {

      $total += ($line2[$col] - $mean)**2;

      $col += 1 + $pops ;

   }

   $stddev = sqrt($total)/$pops/$popsize;

   $mean = $mean/$pops/$popsize;  # renormalize

   # Confidence interval

   $x=$mean/$stddev/sqrt(2); # cum. prob. = erf(n/sqrt(2))

   # Gaussian approximation to Poisson distribution only works

   # for counts >= 5 (or so)

   if ($mean < 5/$popsize) {$confidence = 0.;}

   else {$confidence = &erf($x);}

   # score

   $score = $mean * $confidence * 100;

   # Store data

   my @foo = ($line2[0], $mean, $stddev, $confidence, $score);

   push @tswitches, \@foo;

}

#----------------------------------------------------------------------------

#

# Sort by score

#

sub byScore {

   $b2 = $b; $a2 = $a;

   @b3 = @$b2; @a3 = @$a2;

   $b4 = @b3[4]; $a4 = @a3[4];

   $b4 <=> $a4;

}

@sswitches = sort byScore @tswitches;

#----------------------------------------------------------------------------

#

# Set up annotation hash (GCC 3.3.x)

#

%annhash = ("-fno-merge-constants", "! -O1", "-fno-defer-pop", "! -O1", "-fno-thread-jumps", "! -O1", "-fno-omit-frame-pointer", "! -O1", "-fno-guess-branch-probability", "! -O1", "-fno-cprop-registers", "! -O1", "-fno-if-conversion", "! -O1", "-fno-if-conversion2", "! -O1", "-fno-delayed-branch", "! -O1", "-fno-loop-optimize", "! -O1", "-fno-crossjumping", "! -O1", "-foptimize-sibling-calls", "-O2", "-fcse-follow-jumps", "-O2", "-fcse-skip-blocks", "-O2", "-fgcse", "-O2", "-fexpensive-optimizations", "-O2", "-fstrength-reduce", "-O2", "-frerun-cse-after-loop", "-O2", "-frerun-loop-opt", "-O2", "-fcaller-saves", "-O2", "-fforce-mem", "-O2", "-fpeephole2", "-O2", "-fschedule-insns", "-O2", "-fschedule-insns2", "-O2", "-fregmove", "-O2", "-fstrict-aliasing", "-O2", "-fdelete-null-pointer-checks", "-O2", "-freorder-blocks", "-O2", "-fsched-interblock", "-O2 GCC 3.3", "-fsched-spec", "-O2 GCC 3.3", "-freorder-functions", "-O2 GCC 3.3", "-falign-loops", "-O2 GCC 3.3", "-falign-jumps", "-O2 GCC 3.3", "-falign-labels", "-O2 GCC 3.3", "-finline-functions", "-O3", "-frename-registers", "-O3", "-ffloat-store", "", "-fprefetch-loop-arrays", "", "-fmove-all-movables", "", "-freduce-all-givs", "", "-fno-inline", "", "-ftracer", "", "-fnew-ra", "",  "-funroll-loops", "", "-funroll-all-loops", "",  "-mieee-fp", "", "-malign-double", "", "-mno-push-args", "", "-maccumulate-outgoing-args", "", "-mno-align-stringops", "", "-minline-all-stringops", "", "-mfpmath=387", "", "-mfpmath=sse", "",  "-mfpmath=sse,387", "", "-fomit-frame-pointer", "", "-momit-leaf-frame-pointer", "", "-fno-math-errno", "fast math", "-funsafe-math-optimizations", "fast math", "-fno-trapping-math", "fast math",  "-ffinite-math-only", "fast math", "-fno-signaling-nans", "fast math", "-finline-limit", "" );

#----------------------------------------------------------------------------

#

# Display results

#

sub printbar {

   print "------------------------------------------------------------------------------\n";

}

if (not $suppress) {print "  Mean  | Std. Dev. | Conf. |";}

print " Score |  So?  | Switch (annotation)\n";

&printbar;

foreach $line (@sswitches) {

   if (not $suppress) {

      print sprintf("  %5.3f",@$line[1]);

      print " | ";

      print sprintf("  %5.3f  ",@$line[2]);

      print " | ";

      print sprintf("%5.3f", @$line[3]);

      print " |";

   }

   print " ";

   print sprintf(" %4.1f", @$line[4]);

   print " | ";

   # Recommend based on confidence

   if (@$line[3] < 0.683) {print "  No ";}

      elsif (@$line[3] < 0.866) {print "Maybe";}

         else {print " Yes ";}

   print " | ";

   print @$line[0];

   if ($annhash{@$line[0]}) {print " (".$annhash{@$line[0]}.")";}

   print "\n";

} 

```

Si no quereis flags optimizadas, si no las normalitas para que todo compile, usad estas de aquí.

Si en cambio, quereis arriesgar un poco con la optimización probad con estas otras.

Pero si lo que quereis es optimizar al máximo usad acovea y seguid los pasos que he comentado antes.

Mi recomendación es que tengais en el make.conf las tres opciones. Usad la optimización máxima y si algún paquete no os compila u os da problemas cambiad las flags por algo menos optimizado.

Al final os puede quedar algo así en el /etc/make.conf, ojo que solo es un ejemplo:

```

# CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer"

# CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer -fforce-addr -falign-functions=4 -fprefetch-loop-arrays"

CFLAGS="-march=pentium3 -O3  -fprefetch-loop-arrays -mieee-fp -ftracer -minline-all-stringops  -finline-limit  -maccumulate-outgoing-args -fmove-all-movables -mno-push-args  -fno-inline -fomit-frame-pointer" 

```

En este hilo del foro podeis encontrar más información.

----------

## asph

he añadido en la guía un enlace a tu explicación caos, espero que no te moleste  :Razz: 

hoy he estado añadiendo más contenido a la GUIA, aun me falta ampliar algunas de las secciones que son un poco pobres (hdparm, modif. ebuilds)

un saludo

----------

## gringo

 *siddhartha wrote:*   

> he añadido en la guía un enlace a tu explicación caos, espero que no te moleste 
> 
> hoy he estado añadiendo más contenido a la GUIA, aun me falta ampliar algunas de las secciones que son un poco pobres (hdparm, modif. ebuilds)
> 
> un saludo

 

chapeau siddhartha !!! está quedando d.p.m.   :Wink: 

saluetes

----------

## jguc

 *siddhartha wrote:*   

> alguien ha probado lo de arrancar el xdm en 'boot'? yo estuve haciendo pruebas en un pc e iba bastante bien, mientras arrancaba las X iba cargando los demas servicios en background 

 

De hecho es lo que hace Fedora, carga las X nada más arrancar y consiguen un inicio de sistema más bonito.

----------

## caos

Como me va a importar!   :Smile:  De hecho la idea era esa, ir completando entre todos estas iniciativas que van saliendo, para conseguir buenos documentos en castellano.

Ánimo, siddhartha, que está quedando muy bien.

Saludos.

----------

## el_Salmon

Holas, el artículo está muy currado. Me gustaría señalar un pequeño manual de Linuca sobre la configuración de hdparm. Creo que es muy interesante echarle un vistazo, incluIdos los comentarios:

Optimizando el rendimiento en discos IDE

----------

## quelcom

 *Quote:*   

> como sabeis, al compilar el kernel se ignoran las cflags que ponemos en el make.conf ya que el kernel tiene que ser muy estable.
> 
> pues bien, ahi va un pequeño truquillo para configurar cflags para compilar el kernel (ponedlo antes de compilar el kernel):
> 
> Código:
> ...

 

Pues hace apenas 10 minutos que estoy sobre un 2.6.8-gentoo-r1 con el kernel flaggeao  :Cool: 

De problemas de momento ninguno, y sobre lo de mucho mas rapido pues yo no le acabo de notar mucha diferencia, quizas un pelin mas rapido en el arranque, pero ya esta. (despues cronometro en mano mido exactamente la diferencia de tiempo entre mi 2.6.7 y 2.6.8 (con las mismas opciones)).

Las flags que he usado para compilar en mi P4:

```
export CFLAGS_KERNEL="-O3 -march=pentium4 -fomit-frame-pointer -pipe -fstack-protector"

```

Os animo a probar para ver si notais la mejoria a ver que.

----------

## vgl

Al menos el punto 1 de los consejos que da Siddhartha, en mi opinión deberían estar en todos los Gentoo por defecto. Podrías ponerte en contacto con el mantenedor de los paquetes correspondientes, así cuando se actualicen los scripts de inicio tendríamos todos estas nuevas mejoras.  A... y mis felicitaciones por este artículo, muy bueno.

----------

## gringo

 *vgl wrote:*   

> Al menos el punto 1 de los consejos que da Siddhartha, en mi opinión deberían estar en todos los Gentoo por defecto. 

 

completamente de acuerdo, aunque si no lo han hecho ya es que seguro que hay algo que lo impide....

Otra cosillas que puede ser interesante: uso de nptl en glibc y porque no, udev, que ya se ha comentado algo mas abajo. Éstos dos no es que realmente hagan al sistema más rápido aunque si que hacen limpieza tanto en procesos y sistema de archivos /dev respectivamente.

saluetes pá to2

----------

## asph

he pensado poner un punto para gcc en la guia, para instalar gcc 3.4 ya que dicen que es mucho mas rapido compilando que los 3.3. De todas formas aun no es muy estable, se ha de recompilar todo el sistema y parece que algunos paquetes fallan, asi que mejor esperar un poco..

he puesto un punto para xdelta (deltup), lo he probado y esta bastante bien para reducir la cantidad de ficheros a bajar, cosa que hace el tiempo de espera de descarga mucho menot (ideal para 56k).. lo estoy escribiendo y ya lo posteare  :Smile: 

tambien puedo poner udev (aunque la guia oficial de gentoo ya lo explica muy bien, y realmente hacer el cambio no tiene mucha dificultad), a mi me gusta mucho ya que mantiene /dev limpio limpio  :Smile: 

Tambien pensaba añadir un punto de scripts, y poner algunso scripts que son MUY utiles, como uno para limpiar el sistema de ficheros innecesarios, uno para hacer busquedas mas rapidas (emerge -sS es lentisimo!), y scripts de este tipo.

Tambien puede ser util hablar del prompt y de como personalizarlo, para mi es BASICO editar /etc/profile, y cambiar el prompt para que siempre te ponga la ruta completa de donde estas, asi te situas mucho mas. Tambien puede ponerse la hora, o otra informacion util.

bueno, ya veis que hay varias cosas "todo", ya lo ire posteando..

si teneis alguna idea de temas o paquetes a ser explicados mejor, o habeis escrito algo postead  :Smile: 

*edit* quizas tambien explicar como usar ebuilds de break mygentoo? *edit*

----------

## gringo

 *Quote:*   

> he pensado poner un punto para gcc en la guia, para instalar gcc 3.4 ya que dicen que es mucho mas rapido compilando que los 3.3. De todas formas aun no es muy estable, se ha de recompilar todo el sistema y parece que algunos paquetes fallan, asi que mejor esperar un poco

 

es estable de sobra para usuarios domésticos. Además siempre puedes tener 3.3.4 + 3.4.1 y cambiar de compilador en caso de que no te funcione uno.

 *Quote:*   

> Tambien pensaba añadir un punto de scripts, y poner algunso scripts que son MUY utiles, como uno para limpiar el sistema de ficheros innecesarios, uno para hacer busquedas mas rapidas (emerge -sS es lentisimo!), y scripts de este tipo. 

 

estuve buscando ern los foros y había uno script en pyhton que aceleraba bastante los emerge, pero ahora no lo encuentro. No estaría mal hacer una breve descripción/recopilación de los scripts que hay disponibles, algunos la verdad muy útiles. Alguien se anima ??

 *Quote:*   

> Tambien puede ser util hablar del prompt y de como personalizarlo, para mi es BASICO editar /etc/profile, y cambiar el prompt para que siempre te ponga la ruta completa de donde estas, asi te situas mucho mas. Tambien puede ponerse la hora, o otra informacion util. 

 

sobre so ya hay un post bastante amplio en inglés en docs, se podría coger ese y traducirlo...

Lo de breakmygentoo lo dejaría de momento, creo que se van a meter con subversion, que es lo que están haciendo todos.

saluetes

----------

## asph

pues ya pondre lo del gcc, yo lo probe hace algun tiempo (3.4) y petaba bastante, algunos progs daban segfaults, etc.. lo volvere a probar y si veo que funciona bien lo posteo

en cuanto a los scripts pondre un par que funcionan muy bien (portagedb, esearch) para acelerar las busqueda, y otro para limpiar /usr/portage/distfiles de los paquetes que no vas a usar mas (porque ya has bajado e instalado una versionmas nueva).

salu2

----------

## asph

añadida seccion 0, para no correr riesgos si quereis probar cosas nuevas xD

----------

## asph

nptl y gcc (3.4.1) entran en la guia pero quedan pendientes, pronto lo colgare

----------

## gringo

por los scripts para portage, os recomiendo echar un vistazo a éste link:

http://home.jesus.ox.ac.uk/~ecatmur/my-bin/

He usado alguno de ellos y fuincionan muuu bien !

por algo lo llamarán "lord of portage scripts"   :Wink: 

saluetes

----------

## cadete

Excelente manual nastassja (Me gusta mas tu nick como Asphixia) Recientemente he cambiado Slackware (Despues de mas de 2 years de uso) por Gentoo y me sorprende la capacidad y sobre todo su estabilidad. Con estos tips he aumentado demasiado la velocidad mientras inicia (Mas de 6 segundos)

A proposito.....ese cambio de nick? No dejaras de usar tu nick original? Ya que es mucho mas facil de pronunciar o de escribir   :Razz: 

Nada, nos veremos por el irc luego.

Saludos,

----------

## patan__

sobre el tema de Halt vs Suspend, lo probé y es una gozada... cargar la secion de la memoria swap  :Smile:  me encanto ahorrarme el inicio. esta forma de arrancar hace inecesarias las optimizaciones de inicio. perooo. no le ecuentro la vuelta para q  cargue las X con accel y el driver nvidia. casca totalmente.  alguna idea... o de momento esto no se puede ?

kernel 2.6.8.1

nvidia-kernel 1.0.5336-r4

software-suspend-2.0.0.104-for-2.6.8.1

hibernate-script-0.98

GeForce4 Ti 4200 AGP 8x

KT400 (kd7)

----------

## Raenk

```

#!/sbin/runscript

# Copyright 1999-2003 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# $Header: /home/cvsroot/gentoo-src/rc-scripts/init.d/modules,v 1.23 2003/04/27 20:17:15 azarah Exp $

depend() {

   need checkroot hostname

   use isapnp

}

load_modules() {

   [ -z "$1" ] && return 0

   [ ! -r "$1" ] && return 0

   # Loop over every line in $1

   (egrep -v "^#|^$" "$1"; echo) | # make sure there is a LF at the end

   while read module args

   do

      [ -z "${module}" ] && continue

      ebegin "  Loading module ${module}"

      modprobe -q ${module} ${args} &>/dev/null

      eend $? "  Failed to load ${module}"

   done

   echo

   

   return 0

}

start() {

   # Should not fail if kernel do not have module

   # support compiled in ...

   [ -f /proc/modules ] || return 0

   

   # Here we should fail, as a modular kernel do need

   # depmod command ...

   if [ ! -x /sbin/depmod ]

   then

      eerror "ERROR:  system is missing /sbin/depmod !"

      return 1

   fi

   

   ebegin "Calculating module dependencies"

   /sbin/modules-update &>/dev/null

   eend $? "Failed to calculate dependencies"

   if [ -f /etc/modules.autoload -a ! -L /etc/modules.autoload ]

   then

      einfo "Using /etc/modules.autoload:"

      # Loop over every line in /etc/modules.autoload.

      load_modules /etc/modules.autoload

   else

      local KV="$(</proc/sys/kernel/osrelease)"

      local KV_MAJOR="`KV_major "${KV}"`"

      local KV_MINOR="`KV_minor "${KV}"`"

      # New support for /etc/modules.autoload/kernel-$KV

      if [ "$(get_KV)" -ge "$(KV_to_int '2.5.0')" ] && \

         [ -f /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}" ]

      then

         einfo "Using /etc/modules.autoload.d/kernel-${KV_MAJOR}.${KV_MINOR}:"

         load_modules /etc/modules.autoload.d/kernel-"${KV_MAJOR}.${KV_MINOR}"

      else

         einfo "Using /etc/modules.autoload.d/kernel-2.4:"

         load_modules /etc/modules.autoload.d/kernel-2.4

      fi

   fi

   #

   # Just in case a sysadmin prefers generic symbolic links in

   # /lib/modules/boot for boot time modules we will load these modules

   #

   if [ -n "$(modprobe -l -t boot)" ]

   then

      modprobe -a -t boot \*  &>/dev/null

   fi

}

# vim:ts=4

```

Este es mi /etc/init.d/modules

Y no tengo las lineas especificadas para CDBOOT para editarlas como lo dice la guia.

```
if [ -z "${CDBOOT}" ]

        then

                ebegin "Calculating module dependencies"

                /sbin/modules-update &>/dev/null

                eend $? "Failed to calculate dependencies"

        fi 

```

Algo esta mal o que significa eso ?

De antemano gracias

Saludos

----------

## asph

en tu caso, las lineas son las mismas:

```

ebegin "Calculating module dependencies" 

   /sbin/modules-update &>/dev/null 

   eend $? "Failed to calculate dependencies"

```

a cambiar por:

```

if [ /etc/modules.d -nt /etc/modules.conf ] 

     then 

         ebegin "Calculating module dependencies" 

         /sbin/modules-update &>/dev/null 

         eend $? "Failed to calculate dependencies" 

      else 

         einfo "Module dependencies are up-to-date" 

     fi 

```

aunque la estructura es diferente, actualizare el post para hacerlo universal.

un saludo

----------

## _Edulix

¡Hola a todos!

Ahora mismo uso gentoo como plataforma de "testeo". Todo empezó cuando vie el hilo Speed up boot! . Entonces, en el gentoo que tenía instalado empecé a trastear. Lamentablemente me cargué la instalación, pero bueno, casi fue una excusa para instalar VidaLinux Desktop OS  :Rolling Eyes: .

Una vez instalado, conté que por defecto, VidaLinux me tardaba 1 minuto exacto en mostrarme el gdm arrancado.

Según algunos de los cambios a los scripts de inicio que aquí se relatan, conjunto con los explicados en el hilo que antes señalé, conseguí que, desde el grub hasta el gdm funcional pasasen sólo 20 segundos!!

El mayor truco está en crear otro nuevo nivel de arranque, y meter todos los servicios no-indispensables para arrancar las X en él. 

 ¿Porqué ha de hacerse así todo esto? Pues por razones complicadas de explicar. Os sugiero que os leáis el hilo al que me refiero.  Este es el estado actual de mis niveles de arranque:

# ls /particiones/gentoo/etc/runlevels/{boot,default,fastboot}

/particiones/gentoo/etc/runlevels/boot:

.  ..  .critical  checkfs  checkroot  hostname  localmount

/particiones/gentoo/etc/runlevels/default:

.  ..  xdm

/particiones/gentoo/etc/runlevels/fastboot:

.   autoconfig  clock        cupsd     hotplug  local       modules   net.lo  syslog-ng  vixie-cron

..  bootmisc    consolefont  hostname  keymaps  localmount  net.eth0  serial  urandom    xdm

Mirad que por ejemplo el xdm también está en fastboot: esto, es necesario. También notad que incluso hay servicios que antes estaban en /etc/runlevels/boot que los he movido al runlevel fastboot. 

Los pasos a seguir, serían, más o menos:

```

# cp -R /etc/runlevels/ /etc/.runlevels.safe

# cd /etc/runlevels/boot/

# mkdir temp/

# mv checkfs  checkroot  hostname  localmount temp/

# mkdir ../fastboot

# for service in $(ls); do rc-update del $service boot; done

# mv temp/* . && rmdir temp

# echo "checkfs  checkroot  hostname  localmount" > .critical

# cd ../default

# mv xdm .xdm

#  for service in $(ls); do rc-update del $service default; done

# cp .xdm xdm

# mv * ../default ../fastboot 

# mv .xdm xdm

# cd ../fastboot

# for service in $(ls); do rc-update add $service fastboot; done

```

Ahora claro, hay que hacer que el nuevo runlevel llamado fastboot se inicie a la par que las X. Para eso, simplemente hacemos:

```

# echo "bgs:a:once:/sbin/rc fastboot &>/dev/null" >> /etc/runlevels

```

Ya está. Esto lo he escrito de memoria. Sugiero que lo probéis, y si os va, añadirlo al howto. Ahora estoy intentando hacer lo mismo/smilar pero en el  SuSE, a ver si lo consigo. Desde leugo va a ser más complicado que en Gentoo jeje.

Saludos,

       Edulix.

----------

## asph

en el howto ya se comenta la posibilidad de arrancar las X durante el arranque cambiando el xdm de runlevel, de esta forma mientras va arrancando las X va cargando los servicios en background.. otra manera de hacerlo es la que comentas, creando un runlevel nuevo y arrancandolo despues de los servicios criticos.. yo prefiero la opcion de dejar solo los criticos en boot, xdm en default y crear otro script que arranque todos los demas servicios, algo asi:

```
#!/sbin/runscript

depend() {

        need net

}

        start() {

                ebegin "Starting default runlevel"

                /etc/init.d/acpid start  > /dev/null &

                /etc/init.d/hotplug start > /dev/null &

                 /etc/init.d/local start > /dev/null &

                /etc/init.d/metalog start > /dev/null &

                /etc/init.d/netmount start > /dev/null &

                /etc/init.d/vixie-cron start > /dev/null &

}

stop() {

        ebegin "Stopping default runlevel"

                /etc/init.d/acpid stop > /dev/null &

                /etc/init.d/hotplug stop > /dev/null &

                  /etc/init.d/local stop > /dev/null &

                /etc/init.d/metalog stop > /dev/null &

                /etc/init.d/netmount stop > /dev/null &

                /etc/init.d/vixie-cron stop > /dev/null &

}
```

como se comenta en el post de speed up boot!, lo veo más simple y funcional.

salu2

----------

## _Edulix

[quote=nastassja]

en el howto ya se comenta la posibilidad de arrancar las X durante el arranque cambiando el xdm de runlevel, de esta forma mientras va arrancando las X va cargando los servicios en background.. otra manera de hacerlo es la que comentas, creando un runlevel nuevo y arrancandolo despues de los servicios criticos.. yo prefiero la opcion de dejar solo los criticos en boot, xdm en default y crear otro script que arranque todos los demas servicios.

[/quote]

Tambén es cierto. ¿Tú lo que haces es crear un script que arranca varios servicios en paralelo y lo metes en default or ejemplo no? Uhm, no había contemplado esa posibilidad  :Wink: . Me parece una buena idea. Se me ha ocurrido un posible mejora en ese script con el que nos deleitas  :Wink: . Cambiar:

```

depend() { 

        need net 

} 

```

por:

```

depend() { 

   provide acpid hotplug local logger netmount cron

        need net 

} 

```

Voy a probar esto que cuentas, pero debido a que algunos de mis scripts que se inician en fastboot dependen el uno del otro, voy a necesitar buscar una manera eficiente de arrancanrlos en paralelo - (y la que provee gentoo no me parece que arranque nada en paralelo jeje). Igual jugando con el comando waitpid lo consigo  :Smile: .

Por cierto, otra historia más complicada aun sería la forma de parar los servicios en paralelo - no creo que en ese momento existan muchas dependencias que interfieran, por ejemplo. 

Algunas como los puntos de montaje, en algunos casos (en la mayoría me atrevo a decir que no mucho..) pueden ser determinante. 

Pero por ejemplo otras dependencias como la conexión a la red y tal hay muchas veces que aunque para arrancar sea necesario, para pararlo (sin que se produzca ningún daño), no.

En este aspecto el sistema de arranque mñás usado actualmente en otras distros linux (con el /etc/rc.d/) es más idóneo, aunque seguramente con unos pocos de arreglos el sistema de arranque de gentoo podría arreglarse.

Un saludo,

         Edulix.

----------

## asph

yo tenía los servicios criticos en el runlevel boot, y en el default solo tenía el xdm (o similar) y un script como el que he posteado en el ultimo post.

Asi, primero arrancaba lo crítico, y despues mientras arrancaba el xdm (con & y el parallel startup de gentoo) iba iniciando de fondo todos los demas servicios no criticos o necesarios para xdm (unidos en el script).. hoy por hoy no uso tanto las X y ya no uso el xdm, pero para los que lo usan es una buena forma de ir iniciando los servicios de fondo.. el arranque parece más rápido.

En cuanto a lo de acelerar el proceso de apagado, estuve haciendo pruebas y se puede hacer mucho más rápido, aunque hay que vigilar con algunos servicios. Muchos de ellos bastaría con cerrarlos en paralelo con &, o incluso haciendo un kill/killall  :Twisted Evil:  Simplemente desmontar bien las particiones, que es lo fundamental al apagar para proteger la integridad de nuestros archivos  :Smile: 

----------

## asph

estoy preparando una seccion dedicada a los filesystems, para hablar de ext2, ext3, reiserfs (v3 y v4) y xfs ya que creo que son los mas usados..

la verdad es que la diferencia al trabajar con depende que datos es abismal  :Smile: 

----------

## gringo

otra cosilla que igual es interesante incluir en la guía:

https://forums.gentoo.org/viewtopic.php?t=153921&highlight=psyco+portage

saluetes

----------

## asph

ya lo he visto, pero yo lo probe y la verdad es que se notaba poquisimo.

ademas es un "hack" que se tiene que hacer cada vez que emerges un nuevo portage, y yo esta muy claro que acelere portage (ademas que mucha gente obtiene segfaults por lo que se lee en el post)

has notado tu una mejora importante?

*edit*

la verdad es que si que se nota, sobretodo despues de hacer varias busquedas, he estado leyendo y parece que solo se notara el efecto de pysco al aprovecharse del cache (es decir, no en la primera busqueda xD).. de todas formas, yo suelo usar portagedb (una especie de esearch) que es con direferencia el mas rapido.. quizas se podria hacer la seccion esa que alguien comentaba con los scripts utiles, como para limpiar el distfiles, quitar dependencias no usadas, busquedas rapidas, etc etc.

*edit*

----------

## gringo

lo probé en dos máquinas ( un p4 2.4 y un amd 1.7) y en el amd apenas se notaba, pero en el pentium :

emerge -upD world

sin psyco

real 0m16.577s

user 0m9.751s

sys 0m1.450s

con psyco

real 0m8.324s

user 0m6.887s

sys 0m1.367s

no es la panacea, pero no ta mal, no ?  :Wink: 

Queda por ver como va en el powerbook, pero me dá que psyco requiere cpus rápidas.

saluetes

----------

## gringo

 *Quote:*   

> quizas se podria hacer la seccion esa que alguien comentaba con los scripts utiles, como para limpiar el distfiles, quitar dependencias no usadas, busquedas rapidas

 

si, no es mala idea, ya comenté mas arriba lo de los scripts del Sr. Ecatmur que uso habiltualmente .... búsquedas rápidas, no será una solución pá todo el mundo, pero lo más rápido que he visto es portage sobre sql  :Wink: 

Y gracias por avisar sobre el portagedb, no lo conocía !

saluetes

----------

## asph

el portagedb es brutal.. las busquedas tardan milisegundos  :Smile: 

ademas, y a diferencia de esearch, actualizar la base de datos es MUY rapido.. el eupdatedb tarda siglos comparado con el portagedb u

busqueda simple:

```
portagedb s cadena_a_buscar
```

busqueda en descripciones:

```
portagedb S cadena_a_buscar
```

actualizar bbdd:

```
portagedb u
```

https://forums.gentoo.org/viewtopic.php?t=214547&highlight=portagedb

probadlo y quedareis encantados  :Smile: 

----------

## asph

actualización scripts inicio, hdparm, use's y nuevas secciones deltup, nptl, gcc, filesystems! (aunque las iré ampliando)

saludos

*edit*

añadida seccion scripts utiles, podeis recomendar otros para añadirlos si usais algunos diferentes  :Smile: 

*/edit*

----------

## asph

añadidas correciones y actualizaciones varias, la cosa ya empieza a tener pies y cabeza  :Wink: 

alguien hecha en falta algun punto importante?

un saludo

----------

## asph

he añadido tambien las ldflags junto a las cflags

edit-

28/04/2004 - adición nota en seccion nptl

-edit

----------

## asph

he traducido este post al ingles y lo he posteado en "documentation, tips & tricks".. la ultima version de este documento estará siempre disponible aqui:

https://forums.gentoo.org/viewtopic.php?t=231170

----------

## vcetina

Esta guía esta geial nastassja.  Gracias por el tiempo invertido en ella!!!

He estado intentando levantar las X al inicio poniendolas en el nivel boot, pero sin exito, siguen cargandose al final.  Te enxo mi rc-update show para que veas como esta (uso solo boot y default), que me sugieres para cargar las X al inicio y acelerar la carga de los servicios.

acpid |      default

alsasound | boot

apmd |

bootmisc | boot

bootsplash |

checkfs | boot

checkroot | boot

clock | boot

consolefont | boot

cpufreqd |      default

crypto-loop |

cupsd |      default

domainname |      default

esound |

famd |      default

gpm |      default

hdparm |      default

hostname | boot

i8k |      default

keymaps | boot

local |      default nonetwork

localmount | boot

metalog |      default

modules | boot

mysql |

net.eth0 |      default

net.lo | boot

net.ppp0 |

netmount |      default

nscd |

numlock |

portmap |

rmnologin | boot

rsyncd |

samba |

serial | boot

slapd |

slurpd |

splash |

sshd |

urandom | boot

utelnetd |

xdm | boot

xfs |

xprint |

Gracias por tu tiempo   :Smile: 

----------

## lunatc

Excelente doc.

Pero un par de puntualizaciones:

1.- No se por qué razon pero estoy/he estado con kernels de la serie 2.6.9[mm|nitro|love] y he tenido que quitar lo de "RC_PARALLEL_STARTUP" (se cuelga el arranque al llegar a la zona pci/usb-hotplug).

2.- Para la gente que use "mono" de momento lo del nptl es inviable por lo que he podido "experimentar" en mis carnes (aplicados parches que sugieren en este hilo parecen solucionar algo pero al ejecutar algo grande como "monodevelop" me llega incluso a colgar las X): https://bugs.gentoo.org/show_bug.cgi?id=63734

(es una pena, porque "subjetivamente" con nptl el sistema me parecía como mas suave/ligero)

Es mi experiencia. Por lo demás el howto es de lo mejor que he visto

Salu2

----------

## asph

no eres el primero que comenta los problemas al usar el parallel con los kernels inestables con patchsets..

yo no tengo esos problemas (2.6.9-rc3-nitro1), pero es dificil arreglarlos o buscar una solucion ya que al ser un kernel inestable y ademas con parches para acelerarlo pues no muchos quieren perder tiempo investigandolo, sino es un kernel estable.

he puesto una nota avisando, por si acaso.

gracias  :Smile: 

----------

## vcetina

Que tal, esta es mi pequeña cooperación a esta excelente guia.

La nueva manera de omitir paquetes es la siguiente:

Por ejemplo para omitir el paquete Epiphany se hace lo siguiente:

```
echo 'net-www/epiphany-1.4.0' >> /etc/portage/profile/package.provided
```

Ahora ya no es necesario utilizar inject ni editar el ebuild, ya que las omisiones ahora son manejadas en el archivo package.provided.

Ahora por favor, si alguien me ayuda a cargar las X desde el incio le estaré muy agradecido (ya hice el rc-update add xdm boot, un poco mas arriba pueden ver mi rc-update show) ya que quiero tratar de hacer como hace Fedora (no lo he visto, pero me han dicho que se ve muy bien cargando X desde el inicio), y agregar un splash X windows al inicio (si es que esto es posible).

Saludos a toda la comunidad Gentoo de habla hispana.

----------

## luisfeser

Solo queria comentar k las cxxflags con -frepo, me peta casi cualquier compilacion con gcc 3.4.3 (k es la k tengo ahora). 

El tema de las ldflags:

LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s

va muy bien  :Smile: 

Por cierto mvila, ponle las comillas al final, k para los k hacemos "copy & paste" nos da sorpresitas  :Wink: 

Saludos.

----------

## navegante

Una pequeña corrección las Cflags que indicas son poquito redundantes, en especifico la de -mtune, ya que con usar -march implica el usar -mtune para la aruitectura que estableces en -march. Otro detalle es que al parecer se requiere para que funcione prelink que los binarios esten compilados con la cflag -fPIC. Por otro lado puedes linkear este howto para el deltup, y tambien laopción inject esta siendo deprecated por el fichero package.provided, Saludos.

----------

## vgl

Para todos los que tengan un kernel >= 2.6.10, tenemos el panificador de disco cfq, que según los benchmarks http://lwn.net/Articles/113869/ da un buen rendimiento para el usuario de escritorio. Para activarlo podemos hacer:

```
echo cfq > /sys/block/hda/queue/scheduler
```

O si vamos a compilarnos nosotros el kernel, directamente en Device Drivers ->  Block Devices -> I/O Schedulers.

Podeis añadir esta información con el resto de los consejos para que nos beneficiemos todos.  :Smile: 

----------

## amon-ra

Yo tengo el mismo problema con los CXXFLAGS y -frepo. Lo que hago es que la aplicacion que no compila le cambia los CXXFLAGS, me gustaria saber como establecer unos CXXFLAGS distintos para esta aplicaciones como se hacen con los use para no tener que hacerlo a mano.

CFLAGS="-O3 -march=athlon-xp -mtune=athlon-xp -mfpmath=sse -msse -m3dnow -fomit-frame-pointer -pipe -fPIC"

CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden -frepo"

LDFLAGS="-Wl,-z,combreloc -Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"

----------

## jajirov

Excelente How-to! Esta muy claro y conciso.

Una sola nota, guitoo esta *descontinuado*, el desarrollo continua bajo el nombre de kuroo y pronto deberia estar la nueva version (segun el desarrollador) en portage.

Saludos!

----------

## asph

gracias por el apunte, ya he actualizado la guia

https://forums.gentoo.org/viewtopic-t-231170.html

----------

## DarkMind

active nptl en el USE para recompilar glibc, mis use ahora dan:

```
alculating dependencies ...done!

[ebuild   R   ] sys-libs/glibc-2.3.4.20041102-r1  -build -debug -erandom -hardened (-multilib) +nls -nomalloccheck +nptl* -nptlonly -pic -userlocales 0 kB

```

al tratar de recompilar glibc me arroja

```
Calculating dependencies ...done!

>>> emerge (1 of 1) sys-libs/glibc-2.3.4.20041102-r1 to /

>>> md5 src_uri ;-) glibc-2.3.3.tar.bz2

>>> md5 src_uri ;-) glibc-manpages-2.3.4.tar.bz2

>>> md5 src_uri ;-) glibc-infopages-2.3.4.tar.bz2

>>> md5 src_uri ;-) glibc-2.3.4-branch-update-20041102.patch.bz2

 * Warning! Gentoo's GLIBC with NPTL enabled now behaves like the

 * glibc from almost every other distribution out there. This means

 * that glibc is compiled -twice-, once with linuxthreads and once

 * with nptl. The NPTL version is installed to lib/tls and is still

 * used by default. If you do not need nor want the linuxthreads

 * fallback, you can disable this behavior by adding nptlonly to

 * USE to save yourself some compile time.

```

esta bien eso? no entiendo bien lo que quiere decir..  :Confused: 

----------

## navegante

Solo te dice que glibc se compila la primera vez con linuxthreads y una segunda vez con NPTL, si solo deseas que compile con NPTL, si quieres compatibilidad hacia atras (ya que algunas apps no corren bien nptl) entonces continua así, si solo deseas nptl y ahorrar tiempo coloca la use nptlonly. Saludos.

----------

## Eleazar Anzola

Hola a to2,

He intentado hacer en varias oportunidades colocar las nptl en mis USES pero cada vez que intenta emerger el glibc despues de un buen rato compilando me arroja este error 

```
checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking for long double... yes

checking size of long double... 12

checking for economical random device... has been disabled

running configure fragment for sysdeps/i386/elf

checking for i386 TLS support... yes

running configure fragment for nptl/sysdeps/unix/sysv/linux

running configure fragment for nptl/sysdeps/pthread

checking for forced unwind support... no

configure: error: forced unwind support is required

!!! ERROR: sys-libs/glibc-2.3.4.20041102-r1 failed.

!!! Function glibc_do_configure, Line 707, Exitcode 1

!!! failed to configure glibc

!!! If you need support, post the topmost build error, NOT this status message.

 
```

 lo he buscado en varios foros pero no logro entender el por que de esto.

¿Alguna luz al error?

Agradecido de antemano a quien me pueda decir como solventarlos

----------

## navegante

Supongo que ya emergiste las linux26-headers, no?, si es así y te sigue dando el problema tal vez sea un bug pasate por bugzilla para verficarlo, tambien el el wiki en ingles esta un howto, aunque la verdad no tiene mucho problema.

----------

## Eleazar Anzola

Ummm he visto lo de 

```
emerge --oneshot linux26-headers

Calculating dependencies

emerge: there are no ebuilds to satisfy "linux26-headers".

```

 pero el portage dice nani nanai con ese paquete (No existe)

----------

## Franco Gotusso

Ahora se llama linux-headers por eso de que en la rama 2005 el kernel 2.6 a pasado a predeterminado, pero ojo que las versiones del 2.6 estan en masked. Por cierto, tambien tienes la guia traducida en el wiki en castellano.

Salud.

----------

## Eleazar Anzola

Ummmm ok,

ya estaban emergidas las linux-headers pero aun despues de todo eso nanai nanai, lo he echo como dicen algunos post que utilice la glibc inestable ~x86 pero me salta el mismo error.

Lo curioso es que con otro equipo más viejo si funciono al pelo.

El error al final es 

```
 checking for string.h... yes 

checking for memory.h... yes 

checking for strings.h... yes 

checking for inttypes.h... yes 

checking for stdint.h... yes 

checking for unistd.h... yes 

checking for long double... yes 

checking size of long double... 12 

checking for economical random device... has been disabled 

running configure fragment for sysdeps/i386/elf 

checking for i386 TLS support... yes 

running configure fragment for nptl/sysdeps/unix/sysv/linux 

running configure fragment for nptl/sysdeps/pthread 

checking for forced unwind support... no 

configure: error: forced unwind support is required 

 

!!! ERROR: sys-libs/glibc-2.3.4.20041102-r1 failed. 

!!! Function glibc_do_configure, Line 707, Exitcode 1 

!!! failed to configure glibc 

!!! If you need support, post the topmost build error, NOT this status message. 

 
```

dice que falta soporte para unwind y necesita forzarlo, pero no puede hacerlo.

¿Donde se le da el soporte?

en las use no es ya la coloque para ver y nada ¿Alguien sabe?

Pues nada que cambie las CFLAGS y aun persiste el error y ya no se donde meter los dedos  :Razz: 

----------

## Palmax Maverick

Arph pon arriba que para prelink hace falta el USE PIC. Por cierto lo del LDFLAGS como va?

----------

## Palmax Maverick

VIendo la página http://gcc.gnu.org/onlinedocs/gcc-3.3.5/gcc/Optimize-Options.html#Optimize-Options , podemos comprobar que el CFLAGS más agresivo para un pentium4, y cambiando -march=arquitectura el de tal arquitectura, será el siguiente:

 *Quote:*   

> 
> 
> CFLAGS="-march=pentium4 -O3 -pipe -fmove-all-movables -fforce-addr -fprefetch-loop-arrays"
> 
> 

 

Recuerdo que:

 *Quote:*   

> 
> 
> -O1
> 
>     Optimize. Optimizing compilation takes somewhat more time, and a lot more memory for a large function.
> ...

 

Luego buscaré algo de las LDFLAGS a ver si encuentro información.

Palmax Maverick

palmax@gmail.com

PD: USE = +PIC para usar prelinkado <- hace que se encuentren las funciones a librerías dinámicas al "instante" <- reduce el tiempo de búsqueda de funciones de librerías dinámica <- mayor rapidez en los programas que utilizen librerías dinámicas

----------

## Palmax Maverick

Buenas:

Tengo el USE = NPTL pero no active NPTLOnly porque me daba un poco de miedo. Como sabría si mis pogramas tiran sobre NPTL o sobre Linux Threads?

 *Quote:*   

> $ /lib/libc.so.6
> 
> GNU C Library 20041102 release version 2.3.4, by Roland McGrath et al.
> 
> Copyright (C) 2004 Free Software Foundation, Inc.
> ...

 

Añadido: He encontrado algo!!

 *Quote:*   

> $ /lib/tls/libc.so.6
> 
> GNU C Library 20041102 release version 2.3.4, by Roland McGrath et al.
> 
> Copyright (C) 2004 Free Software Foundation, Inc.
> ...

 

Como se si utiliza unas u otras?

Gracias por contestar

Palmax Maverick

palmax@gmail.com

----------

## quelcom

Tranquilo, usas NPTL  :Wink: 

Mirate la parte Verify NPTL de este doc: http://gentoo-wiki.com/NPTL#Switching_to_NPTL

Saludos

----------

## Palmax Maverick

Buenas!

1º) el nuevo baselayout me ha tocado unos cuantos fichero de /etc y he visto q uno difiere del que se explica en el howto, ya no me acuerdo cual jejejej q mala memoria tengo jejej

2) Bash-script, estaría chulo que alguien se currara un bash-script que hiciera todo rápidamente  :Very Happy: 

Ta luego

Palmax Maverick

palmax2gmail.com

PD: Utf8 no va del todo bien

----------

## DDrDark

Realmente sorprendente el tiempo de carga que se ahorra con estos tips, muchas gracias por currartelo!

----------

## Yoshi Assim

hola...

con las últimas modificaciones del baselayout hay que hacer pequeños cambios sobre los indicados en el post original:

/etc/init.d/localmount

la modificación propuesta es...

```
mount -aFt nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null
```

y ahora será...

```
mount -aFt noproc,noshm,no${NET_FS_LIST// /,no} >/dev/null
```

/etc/init.d/bootmisc

```

if [ -x /sbin/env-update.sh ]

then

    if [ /etc/env.d -nt /etc/profile.env ]

    then

        ebegin "Updating environment"

        /sbin/env-update.sh >/dev/null

        eend 0

    else

        einfo "Environment up-to-date"

    fi

fi

```

y ahora será...

```

if [[ -x /sbin/env-update.sh ]] ; then

    if [[ /etc/env.d -nt /etc/profile.env ]] ; then

        ebegin "Updating environment"

        /sbin/env-update.sh -u > /dev/null

        eend 0

    else

        ebegin "Environment up-to-date"

    fi

fi

```

/etc/sysctl.conf

Además si usas un kernel ck (ck-sources) (yo utilizo actualmente el 2.6.12-ck5)  no necesitas modificar el valor de vm.sappiness en el fichero /etc/sysctl.conf porque lo hace el mismo kernel automáticamente. Además aparecerá un mensaje durante el arranque del sistema diciendo que el parámetro vm.swappiness no está reconocido.

Yo lo he cambiado por vm.laptop_mode=1 y estoy satisfecho con el resultado  :Very Happy:   :Very Happy:   :Very Happy: 

----------

## DDrDark

GRacias por las indicaciones, las probare en un rato y ya te contare  :Very Happy: 

salu2

----------

## DDrDark

Ya las he probado, funcionan a la perfeccion, gracias de nuevo!

----------

## juanma

Buenas peña, pues que me he liado hoy con esto de la optimización y me he encontrado con un par de parches, uno para mejorar el arranque en paralelo y otro para arrancar las X en el runlevel boot pero la verdad que no tengo ni puta idea de como se aplican. ¿Alguien que eche una mano?

----------

## juanma

Bueno bueno, ya lo tengo:

# cd /

# patch -b -p0 < ruta_al_parche

Aunque la verdad que la diferencia es poco apreciable.

----------

## asph

he estado repasando la guía y hay bastantes puntos que se pueden actualizar, por lo que tengo planeada una actualización o más bien re-make para actualizarlo a fondo (no es nada inmediato, quiero trabajarlo bien para que quede guay).. Quizas en forma de parches como me han sugerido, aunque lo malo de los parches es que si no es la versión exacta no funcionará bien, prefiero explicar como hacerlo y que cada uno se entrenga en su sistema  :Wink: 

pongo todo esto por dos motivos: el primero pedir colaboración para poder recopilar más información, scripts y trucos útiles a los usuarios, y el segundo para preguntar así en general si la guía se entiende en inglés o mejor en español (el único objetivo es que si la hago en inglés más usuarios podrán sacarle un provecho)  :Very Happy: 

----------

## pacho2

En español y en inglés sería lo mejor  :Very Happy:   :Wink: 

En relación al arranque en paralelo. Yo he probado varias veces a activarlo pero, a parte de no encontrar mayor diferencia en la velocidad arranque, el tenerlo activo hace que, a veces, se intente, por ejemplo, lanzar el gdm cuando ya está lanzado (?).

Saludos y gracias

----------

## asph

si, a veces da algun problema aleatorio como dices (al iniciar un servicio dice que ya esta iniciado), por ejemplo con net.eth0 o hdparm.. este "tweak" esta basado en una variable de gentoo, asi que debería ser de los más estables, que se le va a hacer  :Wink: 

yo desde entonces ya no lo activo, ganas más editando los scripts de inicio

----------

## gringo

os recomiendo que miréis las últimas betas de baselayout, ahora mismo 1.12.0_pre8-r2, están trabajando bastante con el tema de carga en paralelo de servicios. Llevo usándolo desde que sé de su existencia ya hasta ahora sin probelmas !

Otra cosa que puede ser interesante mencionar es que kexecc ya forma parte del kernel oficial con lo cuál se acabó el reiniciar  :Wink: 

saluetes

----------

## asph

bueno no reinicias la maquina pero si el sistema operativo en si, por lo que tienes que cerrar aplicaciones y servicios.. más que nada te ahorras el boot de la bios, post-boot, init, etc..

----------

## gringo

 *Quote:*   

> bueno no reinicias la maquina pero si el sistema operativo en si, por lo que tienes que cerrar aplicaciones y servicios.. más que nada te ahorras el boot de la bios, post-boot, init, etc..

 

desde leugo, solo te saltas el firmware ....  pero reinicia mas rápido, no ?  :Wink: 

saluetes

----------

## asph

si, si.. sin duda será más rápido  :Smile: 

pero a veces se anuncia como que "no hace falta reiniciar", y la gente piensa que no hay que detener servicios ni dejar de trabajar con las aplicaciones.. era sólo una aclaración, pero es una buena mejora para optimizar y arrancar más rápido en esos reinicios "obligatorios"

----------

## gringo

despues de leer tu respuesta me quedo un poco confundidito:

 *Quote:*   

> pero a veces se anuncia como que "no hace falta reiniciar"

 

pero es que la nueva llamada kexec puede sustituir al reboot de toda la vida sin problemas. Es mas, se puede modificar a mano el ejecutable *reboot* de tu distro, p.ej, 

http://www.gc-linux.org/down/isobel/kexec/initial_release/README_PLEASE

 *Quote:*   

> y la gente piensa que no hay que detener servicios ni dejar de trabajar con las aplicaciones

 

he usado kexec en varias máquinas con mas o menos éxito, pero si te aseguro que yo no paro nada antes de ejecutarlo y no he notao problemas. Imagino que el kexec implica un extensión del reboot, sino vaya chapuza, no ?

Escribí esto hace algún tiempo, cuando kexec aún no estaba en el kernel oficial ... está un poco desfasaete pero en lo básico debe seguir siendo lo mismo. Por si alguien le quiere echar un vistacillo.

Corregidme si me equivoco pls.  :Wink: 

saluetes

----------

## DDrDark

Pero el reboot q te deja hacer el kexec este es el tipico de poder seleccionar que particion cargar (por ejemplo la de windows o tiger) o es solo al "nivel" de la misma particion y el mismo sistema?

salu2 y gracias

----------

## gringo

 *Quote:*   

> Pero el reboot q te deja hacer el kexec este es el tipico de poder seleccionar que particion cargar (por ejemplo la de windows o tiger) o es solo al "nivel" de la misma particion y el mismo sistema? 

 

simplemente se carga otro kernel ( linux o compatible + parámetros ) sin reinicializar el hardware o pasar por la bios, con lo cuál, no, no llegas a ver el loader ... si es a eso a lo que te refieres.

saluetes

----------

## aj2r

He visto en este post que se habla mucho de poner en el runlevel boot a xdm para ganar tiempo, en este blog http://www.gentoo-es.org/node/692 tengo puesto como hacerlo y realmente ganar tiempo.

----------

## pacho2

El link del artículo principal para conocer más sobre los RC está anticuado.

En la sección de scripts, ¿podrías añadir eix y equery?

Sustituir guitto por kuroo (que es su sustituto)

No sé si lo verás necesario, pero yo añadiría una referencia a rebotar con la opción -f, esta opción hace que en siguiente botado no se chequé el fsck cuando no es necesario, aumentando la velocidad de arranque. Es una opción de shutdown:

```

shutdown -hf now -> Para apagar

shutdown -rf now -> Para rebotar

```

Añadir una referencia al artículo de a2jr sobre el arranque de las X en boot.

Saludos y gracias

----------

