Archive for January 19th, 2008

Flags para una compilación exitosa a 64 bits

Saturday, January 19th, 2008

Soy aun de los ociosos que les encanta compilar sus propios paquetes en todas las distros (incluidas debian, fedora, gentoo, etc); por lo que siempre me preguntan las flags del pre-procesador, del gcc y otros detalles:

He aqui un vista a mis reglas de compilación para un CPU Core2Duo con EMT64:

MKOPTS=”-j3″ CFLAGS=”-O3″ CXXFLAGS=”-O3 -fPIC -mtune=nocona -march=nocona \
-pipe -fomit-frame-pointer -msse -fexceptions -fno-strict-aliasing -fPIC -Wall -fno-rtti -fno-strict-aliasing \
-ffast-math -mfpmath=sse,387 -finline-functions -foptimize-sibling-calls -m64\
-floop-optimize -fprefetch-loop-arrays -fforce-addr -fexpensive-optimizations” \
./configure –build=x86_64-pc-linux-gnu

Una guia rápida de arquitecturas: (flags para mtune y march):

CPU:                                       Flag

Pentium 4, Pentium M         : pentium4

Athlon, Athlon XP                 : athlon

AMD Opteron                                                :  k8

Pentium D, P4 HT, Core 2                           : prescott

pentium D 64 bits - Core 2 Duo 64 bits    :  nocona

Cual es el mejor CFLAG?

Las opciones transcurren entre -Os (compilado para codigo pequeño, posiblemente más lento); -O1 (opcion básica y por defecto), -O2 (optimizado para performance, cuidando la estabilidad de la aplicación), -O3 (compilado para máximo rendimiento, algunas optimizaciones agresivas pueden hacer inestable el código, debe probarse y usarse con precaución).

32 o 64 bits?

La posibilidad de usar enteros de 128 bits; computos multi-CPU y una arquitectura más robusta, permiten decir sin dudas que si tenemos 64 bits; compilar nativo es la opción; para ejecutar aplicaciones 32 bits en un ambiente de 64 bits; simplemente tenemos que instalar lib32.

Mejor aritmética que el co-procesador 387?

La aritmética de coma flotante SSE está disponible para compilar desde gcc 3.4; con fpmath podemos decir si queremos SSE, i387 o ambas.

Un ejemplo de apache 2.2.6 compilado para debian es la siguiente:

CC=”gcc” CXX=”gcc” CFLAGS=”-O3″ CXXFLAGS=”-O3 -fPIC -mtune=nocona -march=nocona \
-pipe -fomit-frame-pointer -msse -fexceptions -fno-strict-aliasing -fPIC -Wall -fno-rtti -fno-strict-aliasing \
-ffast-math -mfpmath=sse,387 -finline-functions -foptimize-sibling-calls \
-floop-optimize -fprefetch-loop-arrays -fforce-addr -fexpensive-optimizations” \
./configure –build=x86_64-linux-gnu –disable-maintainer-mode –disable-dependency-tracking \
–enable-layout=Debian –with-program-name=apache2 \
–enable-echo –enable-so –enable-rewrite –with-mpm=worker \
–with-ldap=yes –with-ldap-include=/usr/include –with-ldap-lib=/usr/lib \
–with-suexec-caller=www-data –with-suexec-bin=/usr/lib/apache2/suexec \
–with-suexec-docroot=/var/www –with-suexec-userdir=public_html \
–with-suexec-logfile=/var/log/apache2/suexec.log –enable-suexec=shared –enable-authn-alias=shared \
–enable-authnz-ldap=shared –enable-mime-magic –enable-cern-meta –enable-expires –enable-deflate \
–enable-disk-cache=shared –enable-cache=shared –enable-mem-cache=shared –enable-file-cache=shared \
–enable-cern-meta=shared –enable-dumpio=shared –enable-ext-filter=shared \
–enable-charset-lite=shared –enable-cgi=shared \
–enable-dav-lock=shared –enable-log-forensic=shared \
–enable-log-config –enable-logio \
–enable-ldap=shared –enable-proxy=shared \
–enable-proxy-connect=shared –enable-proxy-ftp=shared \
–enable-proxy-http=shared –enable-proxy-ajp=shared \
–enable-proxy-balancer=shared –enable-ssl=shared \
–enable-authn-dbm=shared –enable-authn-anon=shared \
–enable-authn-dbd=shared –enable-authn-file=shared \
–enable-authn-default=shared –enable-authz-host=shared \
–enable-authz-groupfile=shared –enable-authz-user=shared \
–enable-authz-dbm=shared –enable-authz-owner=shared \
–enable-authnz-ldap=shared –enable-authz-default=shared \
–enable-auth-basic=shared –enable-auth-digest=shared \
–enable-dbd=shared –enable-deflate=shared \
–enable-include=shared –enable-filter=shared \
–enable-env=shared –enable-mime-magic=shared \
–enable-expires=shared –enable-headers=shared \
–enable-ident=shared –enable-usertrack=shared \
–enable-unique-id=shared –enable-setenvif=shared \
–enable-version=shared –enable-status=shared \
–enable-autoindex=shared –enable-asis=shared \
–enable-info=shared –enable-cgid=shared \
–enable-dav=shared –enable-dav-fs=shared \
–enable-vhost-alias=shared –enable-negotiation=shared \
–enable-dir=shared –enable-imagemap=shared \
–enable-actions=shared –enable-speling=shared \
–enable-userdir=shared –enable-alias=shared \
–enable-rewrite=shared –enable-mime=shared –enable-ssl \
–with-pcre=yes –enable-rewrite –enable-dav –enable-info –enable-suexec \
–enable-cgi –enable-cgid –enable-static-support –enable-static-logresolve –enable-http

el proxima entrega explicaré otras flags …

Mejorar el rendimiento del equipo portatil desde el grub

Saturday, January 19th, 2008

Siempre me preguntan esto; asi que lo agrego aquí como una especie de chuleta

A.- Probar que sirven las flags

Cuando estén en la ventana de selección del GRUB presionar la tecla e (editar) hasta que logren editar una linea que inicialmente verán como así:

title           Debian GNU/Linux, kernel 2.6.18-4-686
root            (hd0,0)
kernel          /vmlinuz-2.6.18-4-686 root=/dev/sda2 ro <- Esta linea!
initrd          /initrd.img-2.6.18-4-686
savedefault
Sobre la linea kernel, presionan “e” nuevamente y escriben las siguientes flags:

apic acpi=force: fuerza el acpi del equipo, permitiendo que algunas opciones como hibernación, suspensión o powerOff sean forzadas desde el arranque (util en equipos que a veces dicen “System Halted” y no terminan el proceso de apagado).

idebus=66: en equipos con bus IDE (y algunos sATA) el bus de gestión es de solo 33Mhz (cosas de la compatibilidad para equipos viejitos que trae el kernel); esta acción mejora notablemente el rendimiento del disco.

pci=assign-busses: tarda un poquito más el arranque; pero hace que sea el kernel linux quien gestione los buses PCI y sobreescribe cualquier asociación o configuración que venga de la BIOS. he leído que en algunos BIOS buggy como los de portátiles compaq se requiere esta flag para que detecte mucho del hardware e incluso para que funcione.

Algunas otras como apicmaintimer y pci=routeirq son opcionales en algunos equipos.

luego de escritas, presionar ENTER y luego “b” (boot)

Si su equipo bootea mejor que antes, ¡Felicidades! …

B.- Hacer los cambios permanentes

Para hacer esos cambios permanentes, debemos:

Editar el archivo /boot/grub/menu.lst

Buscar la linea del kernel que necesitamos editar:

title           Debian GNU/Linux, kernel 2.6.23.1-coreDuo
root            (hd0,0)
kernel          /vmlinuz-2.6.23.1 root=/dev/sda2 ro idebus=66 pci=routeirq pci=assign-busses apic acpi=force vga=791
initrd          /initrd.img-2.6.23.1
savedefault

Editar, guardar y reiniciar …