Definindo / proc / sys / vm / drop_caches para limpar o cache

62

Como parte de algumas temporizações de cache frias, estou tentando liberar o cache do sistema operacional. A documentação do kernel diz:

drop_caches

Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
    echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches

As this is a non-destructive operation and dirty objects are not freeable, the
user should run 'sync' first.

Eu sou um pouco superficial sobre os detalhes. Correndo

echo 3 > /proc/sys/vm/drop_caches

libera pagecache, dentries e inodes. Ok.

Então, se eu quiser que o sistema inicie o cache normalmente, preciso redefini-lo para 0 primeiro? Meu sistema tem o valor atualmente definido como 0, o que eu suponho ser o padrão. Ou será redefinido por conta própria? Eu vejo pelo menos duas possibilidades aqui, e não sei qual é a verdadeira:

  1. echo 3 > /proc/sys/vm/drop_caches libera pagecache, dentries e inodes. O sistema então imediatamente inicia o cache novamente. Não tenho certeza do que esperar do valor em /proc/sys/vm/drop_caches se esse for o caso. Voltar para 0 quase imediatamente?

  2. Se /proc/sys/vm/drop_caches estiver definido como 3, o sistema não fará cache de memória até ser redefinido como 0.

Qual caso é verdadeiro?

    
por Faheem Mitha 03.08.2011 / 07:53

1 resposta

87

Não é pegajoso - você apenas escreve no arquivo para fazer com que ele caia nos caches e, em seguida, ele imediatamente inicia o cache novamente.

Basicamente, quando você escreve naquele arquivo, você não está realmente alterando uma configuração, você está emitindo um comando para o kernel. O kernel age nesse comando (largando os caches) e então continua como antes.

    
por 03.08.2011 / 10:28