# Os fiais de Genflags?

## Solusan

Hola a tod@s,

Estoy tratando de montar un servidor en un Dell poweredge 2950.

Lo esta máquina es un procesador Intel Xeon de 2 CPU.

La CPU es:

```
processor       : 1

vendor_id       : GenuineIntel

cpu family      : 15

model           : 6

model name      : Intel(R) Xeon(TM) CPU 3.00GHz

stepping        : 4

cpu MHz         : 2992.973

cache size      : 2048 KB

physical id     : 0

siblings        : 2

core id         : 1

cpu cores       : 2

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 6

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est cid cx16 xtpr lahf_lm

bogomips        : 5985.18

```

He intentado poner las flags recomedadas para los 64 bits. pero me peta el emerge system cada 2 por tres.

Así que he tirado de genflags:

http://www.solusan.com/genflags.html

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

CFLAGS="-march=pentium4 -O3 -pipe"

CXXFLAGS="-march=pentium4 -O3 -pipe"

```

Con estos, peta:

 *Quote:*   

> #CHOST="x86_64-pc-linux-gnu"
> 
> #CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"
> 
> #CXXFLAGS="${CFLAGS}"
> ...

 

Pero la verdad es que no se si estoy aprovechando los 64 bits.

Alguien me puede orientar?

Gracias!

----------

## gringo

 *Quote:*   

> Pero la verdad es que no se si estoy aprovechando los 64 bits

 

si peta con -march=nocona, seguramente la hayas liao y has instalao/compilao un sistema de 32 bits.

saluetes

----------

## Solusan

Pues le he puesto estos flags con march-nocona pero sin lo de x86_64 y ha ido bien.

Es decir:

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

CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS}" 
```

Eso es todo?

----------

## gringo

 *Quote:*   

> CHOST="i686-pc-linux-gnu"
> 
> CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"
> 
> CXXFLAGS="${CFLAGS}"

 

si usas eso creo que la mitad de los ebuilds que vayas a instalar petarán y tendrás todo tipo de problemas inesperados. 

Lo correcto sería :

CHOST="x86_64-pc-linux-gnu"

CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS}"

( -fomit-frame-pointer creo que es redundante en x86_64, puedes quitarlo si quieres).

saluetes

----------

## opotonil

Para las cflags yo suelo consultar: http://gentoo-wiki.com/Safe_Cflags

En tu caso recomiendan, para 64, las que te ha comentado gringo

 *Quote:*   

> 
> 
> CHOST="x86_64-pc-linux-gnu"
> 
> CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"
> ...

 

En cuanto a los nucleos sera cosa de dar un valor adecuado a MAKEOPTS (se suelen recomendar, si no me equiboco, el numero de nucleos + 1)

Salu2.

----------

## achaw

Yo no me fio...Chequeando el wiki de Safe Cflags, y confirmando que el chip de mi pobre procesador es un prescott (Ya que dice prescott en letras enormes  :Smile: ) me tira este resultado...

info2host:

```
MAINARCH="x86"

SUBARCH="pentium2"
```

Saludos

----------

## opotonil

Mirando un poco mas http://gentoo-wiki.com/Safe_Cflags me he fijado en la nota inicial que tiene:

 *Quote:*   

> 
> 
> Note: GCC 4.2 introduces a new -march option, -march=native, which automatically detects the features your CPU supports and sets the options appropriately. If you have an Intel or AMD CPU and are using >=sys-devel/gcc-4.2.0, using -march=native is recommended. Do NOT use -march=native if you use distcc on nodes with different architectures as this may produce unusable code.
> 
> 

 

¿sera, o es, fiable la opcion "-march=native" de GCC 4.2?

Salu2.

----------

## the incredible hurd

 *opotonil wrote:*   

> ¿sera, o es, fiable la opcion "-march=native" de GCC 4.2?

 

Yo había oido hablar de -mtune=generic y -mtune=native, pero no de march hasta ahora, sin embargo no tengo aun gcc-4.2 ni ganas de experimentar (acepto donativos de equipos   :Laughing:  ). Pero sí, debería serlo...

http://gcc.gnu.org/gcc-4.2/changes.html

Sección "New Targets and Target Specific Improvements", Subsección "IA-32/x86-64"

"-mtune=native and -march=native will produce code optimized for the host architecture as detected using the cpuid instruction."

Si cpuid no te parece fiable, apaga y vámonos...

----------

## Solusan

Bueno,

Voy a poner lo que tengo a día de hoy y está compilado:

```

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=nocona -O3 -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS}"

```

el perfil que tengo puesto es este:

```

elbullas ~ # ls -FGg /etc/make.profile

lrwxrwxrwx 1 54 Nov 26 13:00 /etc/make.profile -> /usr/portage/profiles/default-linux/ia64/2007.0/server/

```

No se si estoy en trabajando en 64 bits o no....

:''(

----------

## gringo

 *Quote:*   

> elbullas ~ # ls -FGg /etc/make.profile
> 
> lrwxrwxrwx 1 54 Nov 26 13:00 /etc/make.profile -> /usr/portage/profiles/default-linux/ia64/2007.0/server/ 

 

que alguien me corrija si me equivoco pero ia64 no es para los itanium ? 

Usa el perfil amd64 de cualqueir manera.

saluetes

----------

## Solusan

ains... 

Corregido!:

```

elbullas ~ # ls -FGg /etc/make.profile

lrwxrwxrwx 1 55 Nov 26 16:01 /etc/make.profile -> /usr/portage/profiles/default-linux/amd64/2007.0/server/

```

Aver ahora.

----------

## the incredible hurd

 *gringo wrote:*   

> que alguien me corrija si me equivoco pero ia64 no es para los itanium ? 

 

No, no estás equivocado en absoluto... IA64 es para los (T)itanium... (la T es por lo de la coña con el Titanic que siempre se ha hecho de su fracaso, por muy buenos que sean, el mercado es así).

----------

## Solusan

Bueno seguimos con problemillas:

```
 

 * Messages for package dev-libs/gmp-4.2.1-r1:

* This profile has not been tested thoroughly and is not considered to be

 * a supported server profile at this time.  For a supported server

 * profile, please check the Hardened project (http://hardened.gentoo.org).

 * This profile is merely a convenience for people who require a more

 * minimal profile, yet are unable to use hardened due to restrictions in

 * the software being used on the server. This profile should also be used

 * if you require GCC 4.1 or Glibc 2.4 support. If you don't know if this

 * applies to you, then it doesn't and you should probably be using

 * Hardened, instead.

```

Acaso debo cambiar el perfil al de hardened ?

Puedo comentar dicho paquete?

Gracias!

----------

## Inodoro_Pereyra

 *the incredible hurd wrote:*   

>  *gringo wrote:*   que alguien me corrija si me equivoco pero ia64 no es para los itanium ?  
> 
> No, no estás equivocado en absoluto... IA64 es para los (T)itanium... (la T es por lo de la coña con el Titanic que siempre se ha hecho de su fracaso, por muy buenos que sean, el mercado es así).

 

 :Very Happy: 

El de verde me cae cada vez mejor....

Salud!

----------

## gringo

 *Quote:*   

> * This profile has not been tested thoroughly and is not considered to be
> 
>  * a supported server profile at this time.  For a supported server
> 
>  * profile, please check the Hardened project (http://hardened.gentoo.org).
> ...

 

es una simple nota informativa creo yo : si buscas montar un servidor público con un plus de seguridad, usa hardened, sino, pues tu mismo. Añade que en hardened estamos oficialmente con el gcc-3.4, por si eso supone algún inconveniente.

Recuerda que cambiar de perfil tiene su cosilla, mas aún si cambias entre arquitecturas, de hecho me sorprende que no te haya hecho nada mas raro. Lee las guías al respecto y ante todo entérate si un cambio de ia64 a amd64 es viable.

saluetes

----------

## Solusan

Esto empieza a ser un cúmulo de despropósitos....

Voy a ver si veo un HowTo para esto :/

Gracias.

----------

## Ark del KAOS

Solusan, tienes puesto el profile para servidores que probaron hace un tiempo.

A mi me pasó igual...lo vi y se lo clavé al mio...y cuando lo eliminaron me empezó a dar ese "error" (en realidad es solo una nota informativa) con cada paquete.

Simplemente pásate a el profile típico para desktop. Si necesitases hardened, lo sabrías  :Wink:  (Traducido: ¿Para que instalar un montón de cosas complicadas que no vas a saber usar y solo te van a dar quebraderos de cabeza?)

----------

## Solusan

 *Ark del KAOS wrote:*   

> Solusan, tienes puesto el profile para servidores que probaron hace un tiempo.
> 
> A mi me pasó igual...lo vi y se lo clavé al mio...y cuando lo eliminaron me empezó a dar ese "error" (en realidad es solo una nota informativa) con cada paquete.
> 
> Simplemente pásate a el profile típico para desktop. Si necesitases hardened, lo sabrías  (Traducido: ¿Para que instalar un montón de cosas complicadas que no vas a saber usar y solo te van a dar quebraderos de cabeza?)

 

Tomo nota! Gracias!

En cualquier caso, ya me he bajado la stage3 de amd64 y reinstalo a ver si así.....

Salud!

----------

## i92guboj

 *Solusan wrote:*   

> Hola a tod@s,
> 
>  *Quote:*   #CHOST="x86_64-pc-linux-gnu"
> 
> #CFLAGS="-march=nocona -O2 -pipe -fomit-frame-pointer"
> ...

 

Los 64 no.

La longitud de palabra que tu compilador usará viene definida por CHOST, en este caso i686, 32 bits.

El flag march solo indica al compilador el tipo de cpu para el que debe optimizar el código, pero eso no quiere decir nada porque esa cpu también puede ejecutar código de 32 bits perfectamente.

No tengo experiencia personal usando march=nocona con un CHOST de 32 bits, pero debería funcionar sin problemas, produciendo binarios de 32 bits, por supuesto.

 *Solusan wrote:*   

> 
> 
> No se si estoy en trabajando en 64 bits o no....
> 
> :''(

 

Un método sencillo es este:

```

$ file ../lib/ld-2.7.so 

../lib/ld-2.7.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), stripped

```

----------

## the incredible hurd

 *i92guboj wrote:*   

>  *Solusan wrote:*    *Quote:*   #CHOST="x86_64-pc-linux-gnu" 
> 
> Pero la verdad es que no se si estoy aprovechando los 64 bits.
> 
> Alguien me puede orientar?
> ...

 

¿Te importaría explicar esto con más detenimiento? a no ser que efectivamente # signifique comentario, y aún así depende del stage3 elegido no tiene ningún sentido para mí lo que dices (lo cual, créeme, es muy muy raro).

@Don Inodoro, gracias, pero sólo dije lo que he leído más y mucho más de una vez por la red; en el fondo de mi corazón deseo tener un itanium-2, pero no los encuentro por ninguna parte (al menos asequibles).

Don Inodoro, como consejo, me agradaría conocer a muchas de las personas que son habituales en el foro, pero dudo que eso sea ni posible ni razonable para ellos. Sólo soy un pequeño micro-kernel, pero cuando me enfadan... Obligo a todo el mundo a aprender mis denominaciones con Grub   :Wink: 

¡Salud! (A propósito, ¿prefiere usted poker, paceña o cristal? A pesar de que soy español eso me ayudaría a conocerle   :Laughing:  )

----------

## i92guboj

 *the incredible hurd wrote:*   

>  *i92guboj wrote:*    *Solusan wrote:*    *Quote:*   #CHOST="x86_64-pc-linux-gnu" 
> 
> Pero la verdad es que no se si estoy aprovechando los 64 bits.
> 
> Alguien me puede orientar?
> ...

 

Los comentarios estos no los puse yo, son simplemente un cut&paste del post original que abrió el hilo.

Dicho esto: como supongo que sabrás, la "palabra" es la unidad básica de información que se mueve en un bus, ya sea este serie o paralelo. En el caso de los k8 o nocona, se puede operar tanto con palabras de 32 como de 64 bits, según el modo de funcionamiento de la cpu. El CHOST define eso, y es lo que en última instancia define si tu procesador será capaz de entender el programa o no.

Llevas razón en que el stage3 elegido trae flags saludables que andan sin problema. Pero tampoco debería ser problemático usar un CHOST de 32 bits con march=k8, para nada.

Una cosa es que se optimizen los programas para usar todo el rango de instrucciones de una cpu concreta (en este caso, nocona). Pero eso no quita para que dicho rango de instrucciones pueda operar sobre un tamaño de palabra de 32 bits, como es en el caso de nocona o los k8. A eso me refería arriba.

----------

## Inodoro_Pereyra

 *the incredible hurd wrote:*   

> Don Inodoro, como consejo, me agradaría conocer a muchas de las personas que son habituales en el foro, pero dudo que eso sea ni posible ni razonable para ellos. Sólo soy un pequeño micro-kernel, pero cuando me enfadan... Obligo a todo el mundo a aprender mis denominaciones con Grub  
> 
> ¡Salud! (A propósito, ¿prefiere usted poker, paceña o cristal? A pesar de que soy español eso me ayudaría a conocerle  )

 

Bueno, acabo de entender el chiste, o la ironía detrás del nick, jeje.

Poker, paceña o cristal? No sé que serán paceña y cristal, pero si son juegos de naipes, paso de los tres... No me gustan los juegos de azar en donde se apuesta, probablemnte por que nunca gano...   :Very Happy: 

A lo sumo una mano tramposa de truco, que es lo que mas se juega de este lado del charco.

Al foro, perdón por el offtopic.

A i92guboj, se aprende mucho leyéndote, gracias.

Salud!

----------

## the incredible hurd

Muchas gracias i92guboj, ya me ha quedado claro... No me entraba en la cabeza que alguien quisiera usar un CHOST de 32 bits con march=k8 o, en otras palabras, no le veía ningún sentido. Es cierto que se aprende mucho leyéndote.

@Don Inodoro, al igual que vos, pido disculpas por el offtopic.. Poker es una cerveza colombiana, Paceña es una cerveza boliviana y Cristal es una cerveza peruana, no considero que sean las mejores, pero al menos sí suficientemente representativas de cada lugar. No pretendo hacerles publicidad, pido disculpas, sólo era por aclararle la duda   :Wink: 

----------

## Solusan

 *i92guboj wrote:*   

> #CHOST="x86_64-pc-linux-gnu"
> 
> 

 

Y si pongo estos flags, ... son saludables?

```

CHOST="i686-pc-linux-gnu"

CFLAGS="-march=nocona [b]-O3[/b] -pipe -fomit-frame-pointer"

CXXFLAGS="${CFLAGS}"
```

Gracias!

----------

## the incredible hurd

No.

https://bugs.gentoo.org/show_bug.cgi?id=199478#c2

"please note that any optimization level greater thant -O2 is not supported, please try with -O2 and attach build.log."

A menos que quieras quedarte sin el soporte que ofrece bugzilla.

----------

## gringo

hay una guía que habla de este tema tb. :

http://www.gentoo.org/doc/es/gcc-optimization.xml

saluetes

----------

## Solusan

 *the incredible hurd wrote:*   

> No.
> 
> https://bugs.gentoo.org/show_bug.cgi?id=199478#c2
> 
> "please note that any optimization level greater thant -O2 is not supported, please try with -O2 and attach build.log."
> ...

 

Pues lo dejaré en 02 entonces.

Pero un 03 ofrece una potencia significativa?

Gracias.

----------

## the incredible hurd

 *Solusan wrote:*   

> 
> 
> Pues lo dejaré en 02 entonces.
> 
> Pero un 03 ofrece una potencia significativa?
> ...

 

No, absolutamente ninguna, PORQUE NO SE TRATA DE UN CERO SINO DE UNA o MAYÚSCULA.

Tienes toda la información en la página del manual de gcc. Es muy raro que alguien necesite -fweb normalmente. De hecho hay quien dice que con O3 los programas pierden bastante rendimiento y te puedo asegurar que incrementa el tamaño de los binarios innecesariamente en casi todas las pruebas que he hecho.

No pierdas el interés, haz pruebas por tí mismo y compara.

----------

## Ark del KAOS

Ya que estaos en peno tema: ¿Que me podéis comentar sobre "-Os"?

Tengo entendido que viene siendo un -O2 con extras, y que es lo que suelen usar en Apple.

Vamos, esto lo se de oídas...ya que usé un tiempo Os y no le v una mejoar significativa frente a O2...por lo que volví al típico.

----------

## i92guboj

Como ya dije más arriba, si no sabes lo que hace, lee man gcc, y si sigues sin saber lo que hace, la opción inteligente es no cambiarlas, porque las predeterminadas son totalmente óptimas.

-O3 incrementa el tamaño de los binarios de forma totalmente innecesaria en la mayoría de los casos. Aquí el tamaño de la caché de la cpu es determinante. Es decir, si un programa es lo suficientemente trivial (o al menos una parte relevante del mismo) como para caber en la caché de la misma cpu, entonces -O3 puede ayudar. Sin embargo en la mayoría de los casos no es así, eso sin contar conque binarios más grandes significa mayor tiempo de carga. Y recordemos que el disco duro -por su naturaleza mecánica, no electrónica- es el verdadero cuello de botella en más de un caso, por ser el componente más lento (en relación a todos los demás que son electrónicos y no mecánicos).

Para colmo, las cpus actuales integran lógica de predicción de saltos, bifurcaciones y son realmente rápidas realizando iteraciones, lo cual hace todavía más absurdo el uso de -O3 en circunstancias normales. Esto no quiere decir que -O3 no tenga su sentido en situaciones determinadas, pero desde luego no es el tipo de flag que yo usaría de forma global  :Razz: 

-Os optimiza los binarios por tamaño, y a veces también se encuentran problemas de compilación debidos a dicho flag. De nuevo: está todo en la página man. -Os es más o menos lo mismo que -O2, solo que sin las optimizaciones de -O2 que normalmente incrementan el tamaño del código objeto producido.

----------

