Qual é o melhor dirty_background_ratio e dirty_ratio para meu uso?

Qual é o melhor dirty_background_ratio e dirty_ratio para meu uso?

Então, estou brincando dirty_background_ratio and dirty_ratioe esperando encontrar os parâmetros certos com sua ajuda profissional.

Por enquanto estou usando:

vm.dirty_background_ratio = 20 vm.dirty_ratio = 60

O principal uso é o torrent, o que significa que os arquivos serão baixados através do cliente torrent e depois propagados. Possibilidade de muitos downloads ao mesmo tempo, por isso devo usar cache de RAM, pensando em valores corretos.

Talvez você possa me sugerir os valores certos?

Responder1

Sua ideia e os valores (aproximadamente dobrando-os) parecem bons para mim, mas você não explicou exatamente o que quer dizer com RAMcache. Aqui é mais apenas umcarregandoporque todas as páginas sujas estão indo sem modificações para o disco.

Se você tiver muitos IO no mesmo dispositivo de bloco, ele colidirá um pouco mais tarde. A quantidade de páginas sujas não é o único gatilho, também existe (mm/page-writeback.c):

/*
 * The longest time for which data is allowed to remain dirty
 */
unsigned int dirty_expire_interval = 30 * 100; /* centiseconds */

O que dá o padrão de 30 s. Isso pode ser suficiente. Mas isso significa que páginas sujas mais antigas que isso não serão retidas (dimensão temporal do buffer/cache).

E se você tiver IO simultâneo, essas configurações globais também afetarão isso.


A melhor explicação paraproporção_sujaeproporção_de_fundo_sujaestá no mesmo arquivo:

/* The following parameters are exported via /proc/sys/vm */

/*
 * Start background writeback (via writeback threads) at this percentage
 */
int dirty_background_ratio = 10;
...
/*
 * The generator of dirty data starts writeback at this percentage
 */
int vm_dirty_ratio = 20;

Mostra que é a mesma coisa por lados diferentes (suja agora, limpe depois).


Aqui estão alguns comandos para analisar páginas sujas:

]# cp MAINTAINERS MAINTAINERS-2

]# grep dirty /proc/vmstat 
nr_dirty 135
nr_dirty_threshold 311361
nr_dirty_background_threshold 155490

Os valores limite são calculados a partir dos valores de proporção (fornecidos como porcentagem ou bytes). Eu tenho 8 GB = 2 milhões de páginas, então são 10% e 20%, respectivamente.


Com a ferramenta de tipos de página você pode identificar essas páginas sujas com mais precisão. Isso lê /proc/kpageflags e leva cerca de 200 ms.

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000000030               1        0  ____Dl__________________________________
0x0000000000000038             130        0  ___UDl__________________________________
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total             155        0

Não importa se eu apenas sento e espero (por 30 segundos) ou manualmente sync, as páginas sujas logo desaparecem.

]# sync
]# grep dirty /proc/vmstat 
nr_dirty 0
...

E todas as 130 páginas do "UDl" desapareceram, ou seja. aqueles que estão "atualizados, sujos, na lista LRU".

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total              24        0

Essa diferença de 130 + 1 páginas em duas linhas é exatamente o tamanho do arquivo:

]# ls --block-size=4096 -s MAINTAINERS 
131 MAINTAINERS

Estas são minhas dicas profissionais.

informação relacionada