Estou usando a função rosbag
de ROS
. rosbag
pode gravar muitos dados de outros nós ROS. Em uma palavra, ele irá gerar um arquivo enorme, como um arquivo de 200 MB.
Após gerar tal arquivo, descobri que o buff/cache do sistema aumenta muito. Segue minha captura:
Você pode ver que depois rosbag
de , buff/cache
aumentou muito, ao mesmo tempo, free
diminuiu de 19983 para 10896.
Eu não consigo entender. Pelo que entendi, free
significa o tamanho livre da RAM, buff/cache
é o tamanho do cache. Por que o cache pode usar o tamanho da RAM? E também descobri que se eu excluísse o arquivo gerado por rosbag
, o buff/cache
voltaria de 17999 para 8925. Essa é a ação do sistema? Quando será o buff/cache
aumento? Quando vai buff/cache
diminuir?
Na
free
saída de:Quando um processo grava uma grande quantidade de dados, esses dados vão para os buffers antes de serem gravados no disco. Esses buffers ocupam espaço na memória, então a quantidade de memória não utilizada diminui. Mas essa memória pode ser disponibilizada, para que a quantidade de memória disponível não diminua.
Quando você exclui o arquivo, os buffers não são mais necessários e são recuperados (não faz sentido mantê-los como cache).
Os buffers aumentam quando os processos gravam dados; eles diminuem quando esses dados são gravados no disco. O cache aumenta quando os dados em disco são disponibilizados na memória (seja lendo-os do disco ou convertendo buffers em cache); ela diminui quando a pressão da memória significa que não é mais útil mantê-la por perto. Ambos vivem na memória, portanto, seu tamanho afeta a quantidade de memória livre; mas ambos podem ser recuperados, portanto, seu tamanho não afeta a quantidade de memória disponível.