FLAGS para “compilação segura” com GCC 3.X

Janeiro 25, 2007 at 2:15 pm | In linux, nerdices, tecnologia | 10 Comments

 

Muita gente ouve falar sobre recompilar algum software otimizado para a sua CPU, mas não faz a mínima idéia do que se trata. Nesse artigo explicarei um pouco sobre como funciona a compilação usando” FLAGS” para otimizar o software.

Primeiro vamos aos pré-requisitos:

 

Ter o kernel otimizado para a arquitetura do seu processador e saber quais são as FLAGs a utilizar.

 

Para saber a versão de GCC, digite:

$ gcc –version

 

Para saber informação sobre o processador:

$ cat /proc/cpuinfo

Algumas informações sobre as FLAGs:

Quando vc usa, por exemplo a FLAG “-march=athlon-xp -O3 -pipe -fomit-frame-pointer”

Você está informando ao compilador que o seu processador é um athlon-XP (-march=athlon-xp), que vc está querendo otimização máxima (-03), e que o uso de frame pointer não é necessário (-fomit-frame-pointer)

-O1 otimização leve

-O2 otimização segura

-O3 otimização extrema

PS: muitos softwares são compilados com a opção -02 pois é uma otimização segura.

Para mais informações sobre as funções de otimização veja o site

http://docs.freebsd.org/info//gcc/gcc.info.Optimize_Options.html

Para maiores informações sobre outras opções recomendo a leitura do manual do GCC:

$ man gcc

Escolha as FLAGs para o seu processador segundo a lista abaixo:

 

i386 (Intel)

CHOST=”i386-pc-linux-gnu”
CFLAGS=”-march=i386 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=i386 -O3 -pipe -fomit-frame-pointer”

i486 (Intel)

CHOST=”i486-pc-linux-gnu”
CFLAGS=”-march=i486 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=i486 -O3 -pipe -fomit-frame-pointer”

Pentium 1 (Intel)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=pentium -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium -O3 -pipe -fomit-frame-pointer”

Pentium MMX (Intel)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=pentium-mmx -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium-mmx -O3 -pipe -fomit-frame-pointer”

Pentium PRO (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentiumpro -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentiumpro -O3 -pipe -fomit-frame-pointer”

Pentium II (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium2 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium2 -O3 -pipe -fomit-frame-pointer”

Celeron (Mendocino), aka Celeron1 (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium2 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium2 -O3 -pipe -fomit-frame-pointer”

Pentium III (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium3 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium3 -O3 -pipe -fomit-frame-pointer”

Celeron (Coppermine) aka Celeron2 (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium3 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium3 -O3 -pipe -fomit-frame-pointer”

Celeron (Willamette?) (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”

Pentium 4 (Intel)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=pentium4 -O3 -pipe -fomit-frame-pointer”

Eden C3/Ezra (Via)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=i586 -m3dnow -O3 -pipe -fomit-frame-pointer”

nota: o ezra não tem instruções especiais, é basicamente parecido com o K6-3… (p2 com 3dnow)

K6 (AMD)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=k6 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=k6 -O3 -pipe -fomit-frame-pointer”

K6-2 (AMD)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=k6-2 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=k6-2 -O3 -pipe -fomit-frame-pointer”

K6-3 (AMD)

CHOST=”i586-pc-linux-gnu”
CFLAGS=”-march=k6-3 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=k6-3 -O3 -pipe -fomit-frame-pointer”

Athlon (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon -O3 -pipe -fomit-frame-pointer”

Athlon-tbird, aka K7 (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon-tbird -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon-tbird -O3 -pipe -fomit-frame-pointer”

Athlon-tbird XP (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer”

Athlon 4 (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon-4 -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon-4 -O3 -pipe -fomit-frame-pointer”

Athlon XP (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer”

Athlon MP (AMD)

CHOST=”i686-pc-linux-gnu”
CFLAGS=”-march=athlon-mp -O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-march=athlon-mp -O3 -pipe -fomit-frame-pointer”

603 (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe
CXXFLAGS=”-O3 -pipe

603e (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe
CXXFLAGS=”-O3 -pipe

604 (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe
CXXFLAGS=”-O3 -pipe

604e (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe
CXXFLAGS=”-O3 -pipe

750 conhecidos por G3 (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-mcpu=750 -O3 -pipe -mpowerpc-gfxopt”
CXXFLAGS=”-mcpu=750 -O3 -pipe -mpowerpc-gfxopt”

Nota: não usar -march=

7400, conhecidos por G4 (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-mcpu=7400 -O2 -pipe -maltivec -mabi=altivec -mpowerpc-gfxopt”
CXXFLAGS=”-mcpu=7400 -O2 -pipe -maltivec -mabi=altivec -mpowerpc-gfxopt -maltivec -mabi=altivec -mpowerpc-gfxopt”

Nota: do not use -march= ; -O3 is unstable on G4

7450, conhecidos por G4 na segunda geração (PowerPC)

CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-mcpu=7450 -O2 -pipe -maltivec -mabi=altivec -mpowerpc-gfxopt”
CXXFLAGS=”-mcpu=7450 -O2 -pipe -maltivec -mabi=altivec -mpowerpc-gfxopt”

Nota: não usar -march= ; -O3 é instável nos G4

PowerPC (Se desconheces a arquitectura)
CHOST=”powerpc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe -mpowerpc-gfxopt”
CXXFLAGS=”-O3 -pipe -mpowerpc-gfxopt”

Sparc

CHOST=”sparc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-O3 -pipe -fomit-frame-pointer”

Sparc 64

CHOST=”sparc-unknown-linux-gnu”
CFLAGS=”-O3 -pipe -fomit-frame-pointer”
CXXFLAGS=”-O3 -pipe -fomit-frame-pointer”

FLAGS para “compilação optimizada” com GCC 3.X

Pentium III (Intel)

CFLAGS=”-march=pentium3 -O3 -pipe -fomit-frame-pointer -fforce-addr -falign-functions=4 -fprefetch-loop-arrays”
CXXFLAGS=”${CFLAGS}”

nota: optimizações -mmmx e -msse estão implícitas a -march=pentium3

Athlon (AMD)

CFLAGS=”-march=athlon -O3 -pipe -fomit-frame-pointer -ffast-math -funroll-loops -fforce-addr -falign-functions=4″
CXXFLAGS=”${CFLAGS}”

nota: optimizações -m3dnow e -mmmx estão implícitas a -march=athlon

Athlon-tbird, aka K7 (AMD)

CFLAGS=”-march=athlon-tbird -O3 -pipe -fforce-addr -fomit-frame-pointer -funroll-loops -falign-functions=4 -maccumulate-outgoing-args”
CXXFLAGS=”${CFLAGS}”

nota: optimizações -m3dnow e -mmmx estão implicitas a -march=athlon-tbird

Athlon XP 2000+

Há quem tenha reportado que tem um sistema estável num Athlon XP 2000+ com:
CFLAGS=”-march=athlon-xp -m3dnow -msse -mfpmath=sse -mmmx -O3 -pipe -fforce-addr -fomit-frame-pointer -funroll-loops -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4 -maccumulate-outgoing-args -ffast-math -fprefetch-loop-arrays”
CXXFLAGS=”${CFLAGS}”

 

 

Compilar um Software usando FLAGs é muito simples, basta escolher a FLAG e usá-la na compilação.

 

Baixe o source do software e descompacte-o:

 

Para source em tar.gz:

tar -xzvf source.tar.gz

 

Para source em tar.bz2:

tar -xjvf source.tar.bz2

 

Entre no diretório descompactado, leia os READMEs e rode o ./configure com a FLAG:

 

PS: eu tenho um processador AthlonXP 2600+

 

CHOST=”i686-pc-linux-gnu” \

CFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer” \

CXXFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer” \

./configure

 

 

depois rode o $ make && make install

 

Pronto! você tem o software compilado e instalado para o seu pc.

 

Caso utilize a distribuição Slackware Linux siga as instruções abaixo para compilar o software otimizado e empacotar o software em um TGZ.

Crie um arquivo config.list, contendo todas as opções de configuração do software:
$ ./configure –help > config.list
$ vi config.list

Escreva o seu arquivo de configuração seguindo o exemplo:

CHOST=”i686-pc-linux-gnu” \
CFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer” \
CXXFLAGS=”-march=athlon-xp -O3 -pipe -fomit-frame-pointer” \
./configure \
–prefix=/usr \
–exec-prefix=/usr \

Agora, execute a configuração do código-fonte:
$ sh config.list

Agora, é hora de compilar. Para isso execute o comando:
$ make


Crie um diretório temporário para armazenar os arquivos que serão usados para a criação do pacote do Slackware:

$ mkdir /tmp/chemonz-slackware

Agora, execute a instalação para o diretório temporário:
$ su root
# DESTDIR=/tmp/chemonz-slackware make install
# cd /tmp/chemonz-slackware

Criando o script de instalação

Feito isso, crie o diretório install, onde serão colocados os arquivos de instalação
do pacote:

# mkdir install

Agora, crie e edite o arquivo doinst.sh, dentro do diretório install, que conterá os procedimentos a serem executados após a instalação do pacote:
# vi install/doinst.sh (substitua “vi” pelo editor de sua preferência)

Insira o seguinte conteúdo:
/sbin/ldconfig

Salve o arquivo e feche-o. Esse script será executado após a instalação do pacote.

Agora, crie e edite o arquivo slack-desc, que conterá as informações sobre o pacote, exibidas no momento da instalação:
# vi install/slack-desc

Insira o seguinte conteúdo:

chemonz: [nome do software]
chemonz:
chemonz: [descrição do software]
chemonz:
chemonz: [site, email ou qualquer informação sobre o desenvolvedor do software]
chemonz:

Salve o arquivo e feche-o, e está feito.

Agora, basta criar o pacote com o comando makepkg. Cuidado com o nome do pacote. Ele deve ser formado da seguinte forma:

# makepkg -c n -l n [nome]-[versão]-[arquitetura]-[revisão].tgz

Pronto!!! Você acaba de criar um pacote para o Slackware de um software otimizado para o seu processador.

Agora basta instalar o pacote ou atualizá-lo:

#installpkg pacote.tgz

#upgradepkg –install-new pacote.tgz

Qualquer dúvida mande um email para chemonz@bestlinux.com.br

Abraços

Participe da II Oficina Livre!

Janeiro 12, 2007 at 1:05 pm | In nerdices | 1 Comment

 

 

    A Oficina Livre é um evento destinado aos usuários/desenvolvedores de software livre, alunos dos cursos de ciência da computação e sistemas de informação. Em sua primeira edição, realizada em Julho de 2004 na Uni-BH campus Diamantina, conseguimos reunir mais de 50 pessoas interessadas em aprender e contribuir com o estado da arte em desenvolvimento de software: o software livre. Nesse ambiente engessado pelas tecnologias, quebramos os paradigmas do modelos tradicionais do chamado “ciclo de vida” do software e apresentamos técnicas de como construir ferramentas em um modelo virtual colaborativo. Em sua segunda edição, a ser realizada no dia 3 de Fevereiro de 2007, pretendemos reunir os principais colaboradores nacionais para aumentar a compreensão técnica, teórica e humana nas etapas de desenvolvimento do software livre.
    Nosso objetivo é criar usuários ativos, capazes de compreender o modo de trabalho colaborativo e poder contribuir com projetos livres através de traduções, testes de software, revisões, correções de falhas, empacotamento, arte gráfica, sonora e visual. Onde:
    Belo Horizonte-MG na Pontifícia Universidade Católica de Minas Gerais unidade Coração Eucarístico Quando:
    03 de fevereiro

    Quanto:
    1kg de alimento não perecível que deverá ser entregue no dia do evento. Esse alimento será doado para uma instituição ainda a ser definida!

    Informações:
    http://oficinalivre.minaslivre.org

    Anderson Goulart: global [at] minaslivre.org
    Cascardo: cascardo [at] minaslivre.org
    ChemonZ: chemonz [at] bestlinux.com.br

Usando reiser4 no Slackware 11.0

Novembro 28, 2006 at 3:31 am | In linux, nerdices, tecnologia, testes | 1 Comment

Como todos sabem, Hans Reiser está preso por ser suspeito de ter assassinado a sua ex-esposa… mas, para a alegria de alguns nerds algumas pessoas estão dando continuidade ao projeto.

Resolvi testar um patch para o kernel 2.6.18 que um amigo (Smyows) fez e funcionou perfeitamente no meu kernel 2.6.18.3.

Leia o anúncio do patch no blog do Smyows

Bom…. o que observei é que realmente o reiser4 é realmente mais rápido que o reiserFS 3.6, porém você terá que formatar a partição para usá-lo.

Para usar o reiser4 é infinitamente fácil, considerando que você tem familiaridade com recompilar um kernel (se você não faz idéia do que estou dizendo mate-se).


Palavras do próprio Smyows:
ATENÇÃO: não use /boot nem / com reiser4!!!! Se o fizer seu lilo vai demorar uns 20 min pra gravar na mbr, eu não recomendo no momento o uso desse FS :D

Tanto q reformatei p/ ext3 meu patch eh um port da v 2.6.17-3 caso queira já existe disponível a v. oficial da namesys em ftp://ftp.namesys.com/pub/reiser4-for-2.6/2.6.18

Vamos parar de enrolação e botar logo a mão na massa né?

Requisitos:

* patch do kernel
* libaal
* reiser4progs

Os softwares e o patch encontram-se em:

ftp://ftp.namesys.com/pub/

Após efetuar o download dos arquivos necessários, vamos aos passos:

Aplique o patch no kernel e recompile-o

1- descompate o arquivo reiser4-for-2.6.18-1-smyows.patch.tar.gz em /usr/src/linux e recompile o kernel:

# cd /usr/src/linux
# patch -p1 Reiser4 < reiser4-for-2.6.18-1-smyows.patch

2- Recompile o kernel:

# make menuconfig

Vá em: File systems e marque as opções:

<*>Reiser4 (EXPERIMENTAL)
[*] Enable reiser4 debug mode

3- Saia, salve as alterações e gere a bzImage:

# make bzImage
# cp /usr/src/linux/System.map /boot/System.map-2.6.18.3
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18.3

4- Altere o /etc/lilo.conf

# vi /etc/lilo.conf
# lilo -v

5- Dê um reboot para que você possa carregar o novo kernel com suporte ao reiser4:

# shutdown -r now

Instalando as ferramentas do reiser4 e formatando a partição

6- Descompacte os arquivos *tar.gz e instale-os:

$ ./configure
$ make
# make install
# ldconfig

7- Desmonte a partição para que seja realizada a formatação e mande brasa:

# make_reiser4 /dev/hd*

Confira se está tudo ok:

# fsck.reiser4 /dev/hd*

8- Monte a partição:

# mkdir /backup
# mount /dev/hd* -t reiser4 /backup

após montar veja se está ok e montada como reiser4:

# df -hT |grep reiser4

vai aparecer algo como:

root@chemonz:~# df -hT |grep reiser4
/dev/hda7 reiser4 6,1G 3,8G 2,3G 63% /download
/dev/hdd1 reiser4 36G 2,0G 34G 6% /backup

9- Altere o seu /etc/fstab para que seu slack possa montar as partições automaticamente no boot:

#vi /etc/fstab

altere os pontos de montagem como segue o exemplo:

/dev/hda7 /download reiser4 defaults 1 2
/dev/hdd1 /backup reiser4 defaults 1 2

Pronto! Você está usando reiser4 no seu Slack 11…. legal isso né?

« Página anteriorPróxima Página »

Blog no WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.