Posts Tagged ‘filesystem’

Novidades do FileSystem Ext4

abril 4, 2009

O Ext4 é o sucessor do Ext3 (Extended 3), o qual é o file system mais popular no mundo Linux atualmente.
Em outubro de 2008 o “EXPERIMENTAL” do Ext4 no Kernel Linux foi removido, fazendo com que as mais novas distribuições como Ubuntu 9.04 Alpha e Fedora 11 Beta já disponibilizassem a opção de criar uma partição de disco baseada neste novo FileSystem e possivelmente as versões finais virão com o Ext4 como padrão.

Agora, o Ext4 é melhor que o Ext3? Bem, pelo que eu pude ver nas pesquisas que fiz, o Ext4 trás bastante melhorias e várias NOVAS funcionalidades em relação ao Ext3.

Algumas melhorias:
-Suporte a arquivos individuais de 16TB, contra 2TB do Ext3 (Isso com Blocos de 4k)
-Suporte a Tamanho de Sistema de arquivos de 1EB (ExaByte), contra 8TB (Com blocos de 4k)

Agora as Principais novas funcionalidades do Ext4 são:

Extents (Medida):
É o nome da feature que descreve como os dados serão “estabelecidos” (controlados) no disco para armazenar as informações de um arquivo.

O Ext3 usa um método indireto para acompanhar os blocos usados por um arquivo em particular, isso significa que, para cada arquivo ele terá que acompanhar cada um dos blocos pertencentes àquele arquivo. Ex: um arquivo de 100MB vai usar 25,600 blocos de 4KB, então o ext3 terá que acompanhar todos os 25,600 blocos e como eles estão ordenados.. (Nossa!!)
Já o Ext4 usa um tipo de medida (extens), que é uma série contínua de blocos, dessa maneira o Ext4 precisará apenas da informação de início e quantos blocos mais serão usados por essa medida, na qual o arquivo está.
Ganho: menos fragmentação pelo fato do uso de blocos contínuos. Mais performance ao apagar arquivos, pois existem menos informações de controle.

Journaling Checksumming:
No Ext3 as alterações feitas no file system não são efetivadas em tempo real. De tempos em tempos o file system “commita” (confirma) essas mudanças. O Journal é a lista dessas mudanças. Quando o sistema de arquivos se recupera de um crash, ele simplesmente dá um outro commit nesse ultimo journal, com isso voltando à um estado consistente.    O Journaling Checksumming (feature do Ext4) cria um checksum do journal, com isso é capaz de dizer se a área do journal está falhando. Melhora a confiabilidade.

Multi-Block Allocation:
O Ext3 aloca blocos para um arquivo um por vez. Para um arquivo grande, a função que faz essa alocação é chamada milhares de vezes. O Ext4 usa (como o próprio nome já diz) a alocação de múltiplos blocos por chamada da função. Isto melhora consideravelmente o desempenho, especialmente em arquivos grandes.

Delayed Allocation:
No Ext3, blocos são alocados tao logo quanto eles são necessários por uma função de escrita. Na verdade eles não vão ser precisos tão já, porque os dados podem estar no cache por algum tempo. Então o delayed allocation (atraso de alocação, em tradução livre) permite que os blocos possam ser alocados somente quando é realmente preciso escrever os dados. Isto pode realmente melhorar o desempenho porque durante esse tempo (esse “delay”) o alocador pode estar otimizando a alocação de blocos para minimizar a fragmentação e aumentar a performance.

Para não só ficar na ladainha, vou citar aqui um benchmark realizado por Jeffrey B. Layton, em 28 de Março 2009, para a revista Linux Magazine americana.

Ele criou quatro partições, duas usando Ext3 e duas usando Ext4. Em cada um dos Filesystems uma partição apelidada de DEFAULT e a outra PERFORMANCE.
A DEFAULT é uma partição formatada com os parâmetros default, na PERFORMANCE são algumas modificações na qual o objetivo é ilustrar o quanto você pode obter de performance realizando algumas alterações. Os comandos para a criação dos sistema de arquivos foram estes:

% mke2fs -t ext3 /dev/sda1
% mke2fs -t ext4 /dev/sdb1
% mke2fs -t ext3 /dev/sda1
% mke2fs -t ext4 /dev/sdb1

Na partição Ext3 PERFORMANCE os parâmetros de montagem foram estes:

/dev/sda1  /data_ext3   ext3    defaults,data=writeback,

noatime   0 0

Na Ext4 PERFORMANCE os parâmetros foram:

/dev/sdb1  /data_ext4   ext4    defaults,data=writeback,noatime,barrier=0,extents,journal_checksum    0 0

** Este “barrier=0” seria para desabilitar a função barries, o qual é desabilitada no Ext3, para deixar as coisas mais ou menos iguais.

Seguem os resultados obtidos pelo Jeffrey:

Benchmark Ext3 Ext4

Benchmark Ext3 Ext4

O que podemos extrair de cara é que o DEFAULT do Ext4 superou o Ext3 DEFAULT e inclusive o Ext3 PERFORMANCE em write, rewrite, read e reread.
Por este benchmark, dá pra se ter uma idéia que o Ext4 produz SIM mais performance que o Ext3.
E como não se encontra mais em EXPERIMENTAL, acho que vale a pena SIM usá-lo.

Abraços!