O comando sync remove o cache sujo na memória?

2

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?

    
por Shasha.Zhu 27.08.2013 / 05:51

3 respostas

1

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

    
por 22.06.2015 / 08:06
0

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.

    
por 27.08.2013 / 07:50
0

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
    
por 08.11.2018 / 00:43