Por que machine.slice é mostrado como usando memória, quando não contém nenhum processo?

0
$ systemctl status machine.slice
● machine.slice - Virtual Machine and Container Slice
   Loaded: loaded (/usr/lib/systemd/system/machine.slice; static; vendor preset: disabled)
   Active: active since Wed 2018-06-13 08:45:07 BST; 1 day 15h ago
     Docs: man:systemd.special(7)
    Tasks: 0
   Memory: 717.0M
   CGroup: /machine.slice

$ cd /sys/fs/cgroup/memory/machine.slice
$ cat memory.usage_in_bytes 
751915008
$ cat tasks
$ cat cgroup.procs
$

O que significa, para o machine.slice cgroup estar usando 717MB, mesmo que esteja vazio de processos / threads? É um bug do kernel?

Eu posso reproduzir isso simplesmente iniciando uma VM com virt-manager e depois parando-a. Se eu repetir o ciclo, o resultado é praticamente o mesmo - ou seja, o sistema não parece estar vazando essas centenas de megabytes.

Versão do software

$ uname -r
4.16.14-300.fc28.x86_64

$ rpm -q systemd libvirt-daemon
systemd-238-8.git0e0aa59.fc28.x86_64
libvirt-daemon-4.1.0-2.fc28.x86_64
    
por sourcejedi 15.06.2018 / 00:51

1 resposta

3

Isso não é um bug. Aparentemente, a contabilidade da memória do cgroup inclui páginas de cache de disco que foram usadas pelos processos. Se desejar, você pode pedir para descartar as páginas de cache que pertencem a um cgroup usando force_empty .

Você pode se perguntar sobre páginas de cache que são usadas por vários cgroups. cgroup-v2.rst (o sucessor da versão que estou usando) nos diz:

A memory area is charged to the cgroup which instantiated it and stays charged to the cgroup until the area is released. Migrating a process to a different cgroup doesn't move the memory usages that it instantiated while in the previous cgroup to the new cgroup.

A memory area may be used by processes belonging to different cgroups. To which cgroup the area will be charged is in-deterministic; however, over time, the memory area is likely to end up in a cgroup which has enough memory allowance to avoid high reclaim pressure.

cgroup-v1/memory.txt também diz que "páginas estão vinculadas exclusivamente a LRUs por memc", então provavelmente também funciona de maneira semelhante à descrição acima. Este documento é mais difícil de confiar, já que começa com um aviso de que está "irremediavelmente desatualizado e pede uma reescrita completa".

Ou seja. force_empty solicita que todas as páginas sejam descartadas imediatamente. Se houver outro cgroup que também queira usá-lo, ele terá que lê-lo novamente no disco.

    
por 15.06.2018 / 23:18