Cache do sistema de arquivos do Linux: Mover dados de Dirty para Writeback

5

Meu software RAID pode gravar 800 MB / s sustentado. Eu vejo isso acontecendo quando cat /proc/meminfo |grep Writeback: retorna > 2 GB. No entanto, na maior parte do tempo, o write-back é de 0,5 GB, o que dá um desempenho em torno de 200 MB / s.

Existem muitos dados a serem escritos. cat /proc/meminfo |grep Dirty: diz que o cache sujo é de 90 GB.

Pelo que entendi, o Dirty é o que precisa ser escrito, enquanto o Writeback é o que está sendo escrito ativamente no disco. Portanto, pode haver blocos em Dirty localizados no disco próximo aos blocos no Writeback, e eles não serão gravados da mesma forma.

Isso pode explicar por que obtenho um desempenho muito pior se o Writeback for pequeno, pois o tempo gasto na busca é muito maior que o tempo gasto escrevendo alguns MB extras.

Então, minha pergunta é: Posso de alguma forma dizer ao kernel para mover mais dados do Dirty para o Writeback de forma mais agressiva e, assim, aumentar o Writeback?

- Editar -

Isso ocorre durante um baixo desempenho:

$ cat /proc/meminfo
MemTotal:       264656352 kB
MemFree:          897080 kB
Buffers:              72 kB
Cached:         233751012 kB
SwapCached:            0 kB
Active:          3825364 kB
Inactive:       230327200 kB
Active(anon):     358120 kB
Inactive(anon):    47536 kB
Active(file):    3467244 kB
Inactive(file): 230279664 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      204799996 kB
SwapFree:       204799996 kB
Dirty:          109921912 kB
Writeback:        391452 kB
AnonPages:        404748 kB
Mapped:            12428 kB
Shmem:               956 kB
Slab:           21974168 kB
SReclaimable:   21206844 kB
SUnreclaim:       767324 kB
KernelStack:        5248 kB
PageTables:         7152 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    337128172 kB
Committed_AS:     555272 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      544436 kB
VmallocChunk:   34124336300 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      149988 kB
DirectMap2M:    17649664 kB
DirectMap1G:    250609664 kB


cat /proc/sys/vm/dirty_background_ratio
1

Reduzir dirty_writeback_centisecs apenas corta Dirty em bits ainda menores.

    
por Ole Tange 21.01.2013 / 16:46

1 resposta

3

Você não deu toda a saída / proc / meminfo e, portanto, não sei se há algum ajuste feito anteriormente.

Dois ajustes imediatos que você pode usar são estes.

/proc/sys/vm/dirty_background_ratio

 dirty_background_ratio

Contains, as a percentage of total system memory, the number of pages at which
the pdflush background writeback daemon will start writing out dirty data.

O padrão é 10. Aumente para 30 ou 40 e teste.

/proc/sys/vm/dirty_writeback_centisecs

dirty_writeback_centisecs

The pdflush writeback daemons will periodically wake up and write 'old' data
out to disk.  This tunable expresses the interval between those wakeups, in
100'ths of a second.

Setting this to zero disables periodic writeback altogether.

O padrão é 500. Defina como 300 e teste.

Por favor, lembre-se que estes não são valores absolutos. Você tem que passar por tentativa e erro para descobrir o que mais se adapta ao seu ambiente.

Eu apenas calculei esses valores com base na descrição que você forneceu e assumindo que está correta.

Se você tiver o pacote kernel-doc instalado, vá para sysctl e abra o arquivo vm.txt para ler.

    
por 22.01.2013 / 09:58