Tunando o JFS para Desempenho!

Iniciado por galactus, 26 de Outubro de 2010, 09:15

tópico anterior - próximo tópico

galactus

Tunando o JFS para o Desempenho!

      Olá amigos da rede Ubuntu! Aqui estou eu com mais um tutorial sobre sistema de arquivos! Se você não gosta de usar o modo texto, por favor pare por aqui! Este não é um tutorial para iniciantes, mas com um pouco de atenção e paciência você poderá realizar todos os passos descritos a seguir!  Este tutorial não será tão grande como o do ext4, não temos tantas opções, mesmo assim resolvi dividir o tutorial em 3 partes! Por favor leia todo o tutorial antes de realizar quaisquer mudanças!



1 – Introdução!

   O JFS é um sistema de arquivos criado pela IBM em 1990 para o sistema operacional AIX!  Seu código fonte foi liberado para o Linux em 1999, mas apenas em 2001 ele apareceu de maneira estável na árvore do Kernel Linux!  O JFS foi criado para servidores corporativos, onde ele deveria usar poucos recursos do processador  e ser capaz de ser redimensionado mesmo em uso! Em 1990 cada pulso de Clock importava pois os processadores eram caríssimos, portanto, ter um sistema de arquivos que tomasse poucos recursos do processador era fundamental!  Para vocês terem uma idéia, a Ferrari dos micros em 1990 era um 486 com fantásticos 50MHz!!!  Sem falar nos 286 e 386 com incríveis 16 a 33 MHz!
   Em 2008 foi noticiado que a IBM não mais desenvolveria o JFS e por isso ele não deveria ser mais usado em ambientes de produção!  E assim foi que as distros Linux atuais não dão mais suporte oficial ao JFS! Entretanto ainda existe um grupo de desenvolvedores de dentro da IBM, que se chamam JFS Core Team, que ainda procuram mudanças no kernel e resolver possíveis Bugs de Software! Tanto é assim que a última versão do jfsutils (o utilitário de gerenciamento do JFS no Linux) foi lançada em Abril de 2009!
   De qualquer maneira, com ou sem suporte oficial, o JFS continua sendo um sistema de arquivos seguro que responde bem a vários tipos diferentes de carga de trabalho! Seus principais atrativos para mim são:

1) O  baixo consumo do processador! Com os sistema operacionais modernos cada vez mais gulosos por recursos, hoje se você possui um processador de apenas um núcleo, você tem um processador ultrapassado! Infelizmente nem todos podem ter uma máquina com múltiplos núcleos, por isso hoje, o JFS cai como uma luva para aqueles usuários que ainda não abandonaram aquela velha máquina que presta bons serviços!  Eu já usei o JFS em K6II 500, e hoje faço uso dele no meu Atom 330, que se você não sabe, tem desempenho pior que um Celeron 430!

2) Sua segurança!  O JFS resiste bravamente a quedas de energia e reinicializações aleatórias, e ontem ele me provou novamente sua grande robustez ao conseguirmos salvar os dados de uma partição cheia de Badblocks de um velho HD de um amigo meu formatado em JFS!

   E quanto as suas desvantagens?  Bem, nunca espere taxas de transferências altas com o JFS, por isso o tempo de Boot do seu sistema geralmente é maior com ele, em contra partida o desligamento do seu sistema é super rápido! Ele foi feito para lidar melhor com arquivos grandes, ele demora muito para apagar muitos arquivos pequenos! O JFS começa a mostrar a sua idade no que diz respeito a capacidade de armazenamento! Uma única partição pode ter o tamanho máximo  de 2TB, assim como um arquivo! Como ele usa poucos recursos do processador, em máquinas modernas ele pode acabar atrapalhando, pois onde essa sobra de força poderia ser usada para acelerar as coisas, ele não faz uso dela! Mas se você quiser poupar bateria do seu Notebook e quer dar vida nova ao seu velho processador, ele pode ser uma saída!
   Como quase todo sistema de arquivos, o JFS vem preparado para dar maior segurança aos seus dados em detrimento do desempenho! O que mostrarei a seguir é como deixar ele mais rápido, mas sem perder segurança! Só existe um meio de conseguir ser realmente rápido com o JFS, é desligando o seu journal! Mas se nem a IBM indica usar o JFS sem Journal, muito menos eu é que  o faria! Já se esqueceram do Journal? Aquele do tutorial do ext4? Vamos relembrar então!
   Journaling é o processo de registro de mudanças no sistema de arquivos por meio de um journal (um arquivo de registro (log) dedicado em uma região adjacente do disco). As alterações reais no armazenamento físico são então efetuadas a partir do arquivo de registro (log), que pode implementá-las com mais confiabilidade e garantir a consistência, mesmo se houver travamento do sistema ou faltar energia durante a operação. O resultado é que se reduzem as chances de que o sistema de arquivos seja corrompido.
   Então ficou claro que o JFS também possui o famoso journal que a dupla ext3/ext4 também possuem! Mas diferentemente da dupla ext3/ext4, não podemos alterar a forma em que os dados são gravados no Journal! Ou você usa o journal no JFS, ou não usa! Entretanto, temos uma característica peculiar do JFS em relação ao journal, talvez ainda melhor que na dupla ext3/ext4! É que podemos refazer o arquivo de Log do Journal depois de tudo instalado e pronto para uso!  E assim como o Journal da dupla ext3/ext4, podemos aumentar o seu tamanho para ganhar desempenho!
   Agora você poderia querer me perguntar, mas galactus, o JFS pode ter o Journal externo do ext4? E eu responderia, sim, pode! Mas como eu nunca usei ele assim, e nem achei qualquer tutorial onde o camarada disse que fez/faz uso de journal externo no JFS, eu não vou colocar aqui os comandos para isso!  Nada impede de você ser um pouco mais curioso e tentar! Não é mesmo? Então vamos colocar a mão na massa e deixar de papo!

2 -  Ações realizadas antes da instalação!

   Não temos outra opção ou alternativa melhor a não ser começar a alterar a instalação padrão do JFS desde o início do particionamento! De posse de um Live-CD do Ubuntu ou Desktop-CD, precisaremos instalar o pacote jfsutils ( o utilitário de gerenciamento do JFS no Linux). Isso acontece pois como o seu suporte foi retirado e poucos usuários fazem uso dele, a equipe de desenvolvimento resolveu remover esse pacote dos Desktop-CDs, mas ele ainda se faz presente na versão Alternate-install (de instalação em modo texto do Ubuntu). Sem ele, não poderemos formatar a partição com JFS! Então abra o Synaptic, procure pelo pacote jfsutils e instale-o como na figura abaixo:





      Com o pacote jfsutils instalado, agora é a hora de você planejar como vai deixar a sua tabela de partições! Vai criar uma instalação simples com duas partições (raiz mais Swap) ou vai criar mais de duas partições, separando também o Home? Isso fica ao seu critério! O que interessa neste tutorial é que você precisará primeiro criar sua tabela de partições para posteriormente inserir a nova opção que fará toda a diferença durante a formatação! Aqui vamos usar o Gparted mesmo em modo gráfico! A vantagem desse processo é que você deixa tudo pronto no disco rígido em questão e depois apenas aponta para o particionador da instalação onde vai montar o sistema de arquivos e qual o tipo dele! Você não manda formatar tudo outra vez!

   Vá até Sistema > Administração > Gparted! Com o Gparted aberto escolha o disco rígido em que vai ficar o sistema e crie apenas a tabela de partição com os tamanhos definidos de acordo com a sua necessidade! Não formate nada! Mas como? Na opção "Sistema de arquivo"escolha "Não formatada"! Como mostrado na figura a seguir:



Veja outro exemplo com a partição swap criada:



Agora abra o terminal e como root use o comando fdisk -l para descobrir com certeza qual ou quais as partições que você deverá formatar!  No exemplo que colocarei na foto abaixo é a partição /dev/sda2 ! Altere o número ou a letra conforme o resultado da saída do comando fdisk -l de seu disco rígido! Em seguida use o seguinte comando para criar a partição JFS com o Journal interno aumentado:

#mkfs.jfs -s 200 /dev/sda2

Veja a foto de exemplo:


O comando acima cria uma partição JFS com journal interno de 200MB! Se você não especificar que o journal deve ter o tamanho de 200MB, ele usará a opção padrão que é a de criar um journal interno com 0,4% do tamanho total da partição criada! Duzentos Mega Bytes já está ótimo, não consegui usar mais de 240MB, deu erro, não consegui gravar nada numa partição JFS com journal maior que 240MB!  Nos testes que li da IBM eles usam 200MB!  

Depois de formatada a partição continue com o processo de instalação normal do Desktop-CD do Ubuntu, apenas preste atenção na hora de usar o particionador do instalador do Ubuntu! Escolha a opção particionamento avançado como na figura abaixo:



Depois indique o tipo de sistema de arquivos e o ponto de montagem da partição em questão e não a marque para formatação! Veja a figura abaixo como exemplo:




Logo em seguida o particionador deve reclamar com você que a partição não foi marcada para formatação! Mande ele continuar o processo de instalação como no exemplo abaixo:





Termine todo o processo de instalação normalmente. A segunda parte deste tutorial foi concluída!



3- Alterações realizadas após instalação!


a) Refaça o Log do Journal – Após ter terminado toda a instalação do seu sistema (pronto para uso, você já instalou todos os programas que usa, os codecs e de preferência já colocou seus dados nele), agora é o momento de refazer o Log do Journal para acelerar ainda mais as coisas!  Entre com um Live-CD do Ubuntu (lembre-se de instalar o pacote jfsutils) ou do Parted Magic (este você não precisa se preocupar em instalar o jfsutils) e execute o seguinte comando como root na partição desmontada:

#jfs_fsck -f -v /dev/sdxy

Onde o xy deve ser trocado de acordo com o seu disco rígido em questão! Na dúvida, use o fdisk -l para descobrir! O  comando acima obriga a checagem do sistema de arquivos JFS em seu disco rígido e refaz o Log do Journal mesmo em um sistema marcado como limpo, além disso ele vai mostrar para você todas as etapas durante o processo, qualquer erro encontrado será automaticamente corrigido! Você pode executar esse comando de tempos em tempos se você for um instalador de programas compulsivos ou se encher muito rapidamente o seu disco rígido! Com isso você notará um rápido acesso as pastas, fotos e documentos!

Veja o exemplo abaixo:



b) Recompile o kernel do Ubuntu com o JFS dentro dele para máximo desempenho – Isso mesmo, para o máximo desempenho você deve recompilar o kernel do Ubuntu! O motivo é simples, por padrão o kernel do Ubuntu marca os sistema de arquivos no kernel como módulo! Se ele for colocado dentro do kernel o seu desempenho é maior! A título de curiosidade, com isso o tempo de boot pode cair em até 1,5 segundos! Existem muitos tutoriais espalhados de como recompilar o kernel do Ubuntu. Eu recomendo que você tente usar o Kernel do Hqxriven - o kernel Omnislash - que tem um Mega tópico aqui no fórum!  

c) Altere o fstab para melhorar o acesso ao disco – Use a opção notime (Desativa o registro de tempo de acesso do arquivo, que é basicamente uma operação de gravação. Trocando em miúdos, lembram quando vocês clicam com o botão direito do mouse para acessar as propriedades de um arquivo, lá contém a data de gravação e a data em que o arquivo foi acessado! Com essa opção o sistema não registrará mais quando você acessou o arquivo, apenas quando você modificar o mesmo! Essa opção não envolve risco de perda de dados!) e a opção nodiratime se quiser (Desativa o registro de tempo de acesso do  diretório. Trocando em miúdos, quando vocês clicam com o botão direito do mouse para acessar as propriedades da pasta, lá contém a data de gravação e a data em que a pasta foi acessada! Com essa opção o sistema não registrará mais quando você acessou a pasta, apenas quando você modificar a mesma! Essa opção não envolve risco de perda de dados!). Eu uso apenas a noatime! Como root use o seu editor de arquivos preferido, como sugestão temos:

No Ubuntu

#gedit /etc/fstab

No Kubuntu

#kedit /etc/fstab

Para qualquer variante do Ubuntu

#nano /etc/fstab

Exemplo de um fstab padrão pós instalação do Ubuntu:
[...]
# / was on /dev/sda2 during installation
UUID=00145ac1-ee86-4dab-af5b-fb4854d7ce51 /               jfs     errors=remount-ro 0       1
# /media/Musica was on /dev/sda5 during installation
UUID=49fe3faf-fc26-4320-a151-15f6cb21253a /media/Musica   jfs     defaults        0       2
# swap was on /dev/sda1 during installation
UUID=02ce43a2-0e8e-414d-a348-4ee273600222 none            swap    sw              0       0
[...]


   Vou deixar como exemplo o que uso no meu fstab (notem que não há espaço entre as opções, apenas vírgulas):

[...]
# / was on /dev/sda2 during installation
UUID=00145ac1-ee86-4dab-af5b-fb4854d7ce51 /               jfs     noatime 0       1
# /media/Musica was on /dev/sda5 during installation
UUID=49fe3faf-fc26-4320-a151-15f6cb21253a /media/Musica   jfs     noatime,nodiratime        0       2
# swap was on /dev/sda1 during installation
UUID=02ce43a2-0e8e-414d-a348-4ee273600222 none            swap    sw              0       0
[...]


   As opções do arquivo anterior:errors=remount-ro podem ser removidas com segurança pois é padrão do sistema!

d) Tornar o seu disco rígido mais rápido às requisições do seu sistema!

  Antes você precisa saber sobre as características técnicas do seu disco rígido.  É que vamos habilitar dois parâmetros dele que vêm desabilitados por padrão. A gravação em cache do mesmo e fazê-lo funcionar a toda velocidade desde o início da requisição! Para isso execute o comando como root:

#hdparm -I /dev/sdX


 
  Onde o X vai depender do disco rígido que você quer tunar!  O comando acima faz um relatório detalhado sobre o seu disco rígido, listando todas as características técnicas do mesmo!  Procure por duas informações importantes: Write Cache Enable e o Acoustic Management!

O seu sistema pode estar montado sem problemas.  Então faça como root:


#hdparm -W1 -M254  /dev/sdX

  O "W" deve ser maiúsculo mesmo! NÃO erre no "W"! O "w" minúsculo vai detonar o seu sistema! Então, o -W1 ativa a gravação no cache do seu disco e o -M254 fazem com que o disco trabalhe mais barulhento (alta rotação inicial), o padrão é 128, o mais silencioso (baixa rotação inicial)!
   
  Se o seu disco rígido não suportar esses comandos ele vai dar erro na saída do comando! Se tudo correr bem ele vai avisar que tudo foi ligado (On)!  Não se preocupe que não há risco de danos ao disco rígido ou ao seu sistema! Com essas duas mudanças você pode ganhar em média de 2 a 4MB/s a mais nas taxas de leitura do seu disco rígido! É só fazer por três vezes e sem nada sendo usado no sistema o comando e comprovar o que eu digo:


#hdparm -Tt /dev/sdX



  Se tudo correu bem, agora você vai querer colocar esses comandos de forma permanente! Sim, pois só em executar esse comando no terminal não o torna permanente, ele volta ao estado padrão a cada reinicialização do sistema!  Então o que fazer? Ta na mão, coloque o comando no arquivo /etc/rc.local antes do exit = 0 (se tiver isso no seu arquivo)!

#gedit /etc/rc.local

hdparm -W1 -M254 /dev/sdX

  Você pode colocar quantos discos rígidos você tiver no seu sistema que suportem esses comandos, cada disco rígido deve ter a sua linha de comando!  O comando é dado para o disco rígido e não sua partição!


Aqui vai um exemplo do  que um Atom 330 pode fazer com JFS e seu kernel recompilado (claro que não estou usando o kernel do Ubuntu mas sim o kernel Omnislash do Hqxriven):

http://www.easy-share.com/1912640219/Buble_Bee.avi


Fontes para este tutorial:

http://en.wikipedia.org/wiki/JFS_(file_system)
http://pt.wikipedia.org/wiki/JFS
http://www.ibm.com/developerworks/linux/linux390/perf/tuning_res_journaling.html
http://manpages.ubuntu.com/manpages/hardy/man8/mkfs.jfs.8.html
http://manpages.ubuntu.com/manpages/hardy/man8/jfs_fsck.8.html
http://jfs.sourceforge.net/
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

Gunss

para quem tem netbooks JFS é perfeito!!!

obrigado pelo belo tutorial Galactus.

Hqxriven

VALEU!!

Excelente tutorial Galactus!!

Muito obrigado por disponibilizar para a galera!!

Hqx
Sem distro Linux fixa - Kernel Omnislash
Meu objetivo nesse fórum é ajudar. Sou um mero humano mas desejo sempre aprender e melhorar em tudo o que faço em minha vida. Então, por favor, quando eu postar me notifique depois

vampire_thunder

Galactus é "tarado" mesmo nisso, rsrsrs

Vou testar no Notebook.

platao

Ola, mais um super tutorial caprichado do Galactus!!! Parabens.
\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

irtigor


galactus

Obrigado pessoal! Espero que seja útil a muita gente! Acabei incluindo o meu fstab como exemplo!

Já estou pensando no tuto do XFS!  ;)
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

cesargcomp

O galactus não para nunca.... hehehhe
Mais um prêmio para todos que usam Linux...
Parabéns mestre galactus!!!
Um dia ainda quero ser assim!  :P
Use Ubuntu. Segurança, facilidade e gratuidade em suas mãos.

hiltongil

Cara, muito bom.
Eu vi seu vídeo do Atom  :o
Se a latência do meu note fosse daquele jeito eu já tava faceiro. Ainda tenho muito o que aprender por aqui mas tu podia me adiantar uma dúvida.
Hardware
Proc. AMD Turion 64, 2.2g, 512k cache (1 núcleo só)
1gb ram 667mhz
Hd 80gb
Tu acha que dá para extrair um melhor desempenho com JFS ou Ext4?
Valeu pelo tuto.

galactus

Citação de: hiltongil online 26 de Outubro de 2010, 21:09
Cara, muito bom.
Eu vi seu vídeo do Atom  :o
Se a latência do meu note fosse daquele jeito eu já tava faceiro. Ainda tenho muito o que aprender por aqui mas tu podia me adiantar uma dúvida.
Hardware
Proc. AMD Turion 64, 2.2g, 512k cache (1 núcleo só)
1gb ram 667mhz
Hd 80gb
Tu acha que dá para extrair um melhor desempenho com JFS ou Ext4?
Valeu pelo tuto.

Com certeza eu usaria o JFS! O seu HD é muito antigo! Quase não tem cache! Então quanto menos o seu sistema de arquivos atrapalhar, melhor! Isso pra mim que sou usuário multi-tarefa! Se você usa poucos programas ao mesmo tempo, ou apenas um, considere ficar com o  ext4! Agora, um Turion com 2.2GHz.... Nossa, dá pra tirar muito leite de pedra viu!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

livre1

Hehe coitado do meu Celeron D de 1.6 Ghz to colocando ele para trabalhar muito com meu HD de 80 GB formatado em ext4.
Acho que no HD que ta o Ubuntu vou usar ext4 mesmo o desempenho ta bom (quando eu usava Windows eu tinha mais consumo de recursos ainda).
Vou pensar em usar este sistema de arquivos em pen drives é dipositivos de armazenamento removivel.

vampire_thunder

Citação de: galactus online 26 de Outubro de 2010, 15:36
Obrigado pessoal! Espero que seja útil a muita gente! Acabei incluindo o meu fstab como exemplo!

Já estou pensando no tuto do XFS!  ;)

Parece que o XFS está com journal agora:
http://blog.avirtualhome.com/2010/08/02/kernel-2-6-35-available-for-ubuntu-10-04/

CitarLinux 2.6.35 includes support for transparent spreading of incoming network load across CPUs, Direct-IO support for Btrfs, an new experimental journal mode for XFS, the KDB debugger UI based on top of KGDB, improvements to 'perf', H.264 and VC1 video acceleration in Intel G45+ chips, support for the future Intel Cougarpoint graphic chip, power management for AMD Radeon chips, a memory defragmentation mechanism, support for the Tunneling Protocol version 3 (RFC 3931), support for multiple multicast route tables, support for the CAIF protocol used by ST-Ericsson products, support for the ACPI Platform Error Interface, and many new drivers and small improvements.
[/i]

PaiRobinho

galactus, já testou o JFS com o scheduler Deadline ao invés do BFQ/CFQ?

Eu havia visto esta sugestão no Wiki do Arch Linux: https://wiki.archlinux.org/index.php/JFS_Filesystem#Deadline_I.2FO_Scheduler

Estou testando o JFS aqui no meu netbook Intel Atom e parece um pouco mais fluido pra mim o Deadline em relação ao CFQ e BFQ.

Abraço!
Desktop: Athlon II X4 630 @3.0GHz ~ ASUS M2N68-AM SE2 ~ 2x2GB DDR II Markvision ~ Radeon X4650 1GB DDR2 ~ OSes: Windows 7 Professional + Ubuntu 10.10 64-bit

Netbook: Philco PHN-10104 ~ OSes: Windows 7 Professional + Ubuntu 10.10 32-bit Desktop Edition

galactus

Citação de: PaiRobinho online 03 de Novembro de 2010, 13:37
galactus, já testou o JFS com o scheduler Deadline ao invés do BFQ/CFQ?

Eu havia visto esta sugestão no Wiki do Arch Linux: https://wiki.archlinux.org/index.php/JFS_Filesystem#Deadline_I.2FO_Scheduler

Estou testando o JFS aqui no meu netbook Intel Atom e parece um pouco mais fluido pra mim o Deadline em relação ao CFQ e BFQ.

Abraço!

Com o Deadline eu testei apenas no kernel do Ubuntu, e não gostei do resultado! Ele começava a travar quando puxava muita coisa, isso com o kernel do Ubuntu! Como o kernel Omnislash está "preparado" para usar a dupla BFQ/BFS, eu deixei de usar o CFQ, então eu nem tentei o deadline com o Omnislash!  O vídeo que você pode assistir de exemplo está com a dupla BFQ/BFS!  Mas já pretendo fazer uma nova compilação para o Atom. Já testei em casa  uma versão mais recente do BFS e a coisa ficou muito melhor! Acho difícil o Deadline bater isso!
BigLinux no Notebook  / Várias Distros Virtualizadas no PC.

livre1

O processadores Atom são melhor que o Celeron ou piores em relação a desempenho?

E melhor um Atom 2 Ghz ou um Celeron 1.6 Ghz?

Como eu mudo essas coisas como CFQ?


Queria entender qual processador é melhor para ver se certas configurações são boas para meu Celeron 1.6 Ghz.