Não, isso não acontece. Eu mesmo verifiquei isso muitas vezes, mas não se preocupe, o kernel do Linux cuida da sua preciosa memória de forma muito inteligente. leia Conteúdo em cache na RAM ao gravar em disco - Linux e link
Estou ciente de que o comando de sincronização libera o cache sujo no disco. Eu executei o comando free
primeiro, depois sync
e, em seguida, free
novamente. O resultado do último comando free
mostra mais memória livre disponível do que a anterior.
Isso significa que os caches sujos são removidos da memória ao executar sync
? Alguém pode me dar uma prova mais sólida?
Não, isso não acontece. Eu mesmo verifiquei isso muitas vezes, mas não se preocupe, o kernel do Linux cuida da sua preciosa memória de forma muito inteligente. leia Conteúdo em cache na RAM ao gravar em disco - Linux e link
Isso fará com que o kernel elimine caches, dentries e inodes limpos da memória, fazendo com que a memória fique livre.
Para liberar pagecache:
echo 1 > /proc/sys/vm/drop_caches
Para libertar dentaduras e inodes:
echo 2 > /proc/sys/vm/drop_caches
Para liberar pagecache, dentries e inodes:
echo 3 > /proc/sys/vm/drop_caches
Como esta é uma operação não-destrutiva, e objetos sujos não são passíveis de uso, o usuário deve executar "sync" primeiro para garantir que todos os objetos armazenados em cache sejam liberados.
Eles não são :-). Aqui está uma prova sólida:
$ dd if=/dev/zero of=test bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.409106 s, 256 MB/s
$ sync
$ time cat test > /dev/null
real 0m0.027s
user 0m0.000s
sys 0m0.026s
Os dados ainda estavam em cache após sync
. Você pode dizer que foi armazenado em cache, observando a hora de ler o arquivo. (Eu tenho um disco rígido giratório, velocidade de leitura máxima é de cerca de 100MB / s). Compare isso com a combinação de sync
e drop_caches
:
$ sync
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
1
$ time cat test > /dev/null
real 0m1.030s
user 0m0.001s
sys 0m0.073s
Tags memory linux synchronization