Então, estou brincando dirty_background_ratio and dirty_ratio
e 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.