Общий способ отслеживания использования всей памяти

У меня есть Kubuntu 16.04, и я использую ZFS.

Как вы можете видеть на суперпользователе , у меня просто было длинное путешествие по отслеживанию, где пропала память.

Это оказалось ARC ZFS, который ел его, не появляясь нигде в инструментах / файлах, кроме своего собственного специального файла /proc/spl/kstat/zfs/arcstats

Существует ли общий способ узнать, сколько памяти используется ядром и, по возможности, с помощью каких модулей ядра?

Пример:

свободный -h показал мне это:

  total used free shared buff/cache available Mem: 31G 19G 1.8G 406M 10G 5.2G Swap: 8.0G 0B 8.0G 

Таким образом, используется 19 ГБ. Но TOP только показал мне около 8 ГБ используемой памяти. Поэтому я пошел искать другие 11GB. 6 ГБ оказался слябом, который можно увидеть в /proc/memstat и с nmon . Но 5 ГБ все еще отсутствовали.

В конце концов я обнаружил, что он был поглощен ARC ZFS. Но он был указан только в своем специальном информационном файле. /proc/spl/kstat/zfs/arcstats

Ни /proc/memstat ни top , htop , nmon , free или atop не могли сказать мне, кто использует эти 5GB.

Есть ли файл / инструмент для просмотра памяти, используемой такими специальными модулями, не зная / не понимая эти модули? Или мне нужно учитывать каждый существующий модуль, если я хочу написать инструмент мониторинга, который может мне это сказать?

С моей точки зрения, информация о памяти под Linux – полный беспорядок. Десятка числа, которое не суммирует общую память. Я ставлю free вычисление параметра «in use» путем вычитания free / cache / buffers из общего числа.

Я хотел бы иметь / писать инструмент / информацию, где я могу видеть

 Total memory: 32GB in use: 19GB processes: 8GB slab: 5GB mapper: 1Gb kernel modules: 5Gb kernel: 0.3GB spl: 4.7GB cache: 6GB buffers: 2GB free: 5GB Additional stats: Active memory: 8.3GB Active(anon): 7.1GB Active(file): 1.2GB Inactive memory: 2.4GB ... 

Вы знаете, где каждый подраздел фактически добавляет до своей родительской секции, и каждый байт памяти учитывается;)

Так возможен ли такой инструмент под Linux? Он уже существует?

Обновление 1

Инструмент smem, как предлагается ниже, действительно показывает колону «Динамическая память ядра», которая суммирует до 100% памяти и учитывает ARC. Однако согласно этому ответу

BTW: Я уже проверял источники smem, это в основном делает (memtotal – userpace – free – cache).

Таким образом, это достигается только путем вычитания всех известных цифр из / proc / memstat и маркировки отсутствующих в качестве «памяти динамического ядра без кэша». Я нахожу это тревожным и действительно надеюсь, что у ядра Linux больше предложений.