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
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 CommentComo 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
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:
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é?
Blog no WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.







