Получение информации об использовании памяти процессом из / proc / pid / smaps

46

Для данного процесса /proc/<pid>/smaps, для данной записи сопоставления:

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

Является ли Shared_Clean+ Shared_Dirtyобъем памяти, который используется другими процессами? Так это как общий RSS?

Точно так же Private_Clean+ Private_Dirtyобъем памяти, который доступен только для одного процесса ? Так это как приватный RSS?

Значение PSS = PrivateRSS + (SharedRSS / количество процессов, совместно использующих его)?

Еще несколько вопросов после прочтения этой ссылки: LWN

Теперь давайте поговорим о процессе в целом, чью запись в smaps мы рассматриваем.

Я заметил , что если я делаю Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyдля каждого smaps записи процесса я получаю RSS процесса, сообщаемые ps, который является довольно прохладно. Например,

ps -p $$ -o pid,rss

Даст мне (приблизительно) одинаковое значение RSS как сумма каждый Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtyзапись в / Proc / $$ / smaps.

Но как насчет PSS для всего процесса? Итак, из приведенного выше примера, как я могу получить PSS за $$? Могу ли я просто добавить запись PSS для каждого сопоставления smaps и получить PSS за $$?

А как насчет USS для всего процесса? Снова взяв приведенный выше пример, я предполагаю, что могу прибыть в USS за $$, суммируя только записи Private_ * для каждой записи smaps за $$ .. верно?

Примечания:
PSS = пропорциональный размер набора.
USS = Уникальный размер набора.

Анкур Агарвал
источник

Ответы:

50

Чистые страницы - это страницы, которые не были изменены с момента их отображения (как правило, текстовые разделы из общих библиотек читаются только с диска (при необходимости), никогда не изменяются, поэтому они будут в общих чистых страницах).
Грязные страницы - это страницы, которые не являются чистыми (т.е. были изменены).

Личные страницы доступны только этому процессу, общие страницы отображаются другими процессами * .

RSS - это общее количество страниц, опубликованных или нет, в настоящее время отображенных в процессе. Таким образом, Shared_Clean+ Shared_Dirtyбудет общей частью RSS (то есть частью RSS, которая также отображается в другие процессы) и Private_Clean+ Private_Dirtyчастной частью RSS (то есть только в этом процессе).

PSS (пропорциональный размер доли), как вы описали. Личные страницы суммируются как есть, и размер каждого общего сопоставления делится на число процессов, которые разделяют его.
Таким образом, если бы у процесса было 100 тыс. Личных страниц, 500 тыс. Страниц, совместно используемых одним другим процессом, а 500 тыс. Страниц совместно с четырьмя другими процессами, PSS будет:

100k + (500k / 2) + (500k / 5) = 450k

Дальнейшие чтения:

Относительно общепроизводственных сумм:

  • RSSможет быть (приблизительно + ) получено суммированием Rss:записей в smaps(вам не нужно добавлять общие / частные общие / грязные записи).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Вы можете суммировать Pss:значения одинаково, чтобы получить глобальный процесс PSS.
  • USSне сообщается smaps, но на самом деле это сумма частных сопоставлений, поэтому вы можете получить ее также

* Обратите внимание , что страница «доля- в состоянии» считается как частное отображение до тех пор, пока не будет на самом деле разделяет. т. е. если в настоящее время используется только один процесс libfoo, текстовая часть этой библиотеки появится в личных сопоставлениях процесса . Он будет учтен в общих сопоставлениях (и удален из частных), только если / когда другой процесс начнет использовать эту библиотеку.
+ Значения не складываются точно для всех процессов. Не совсем уверен, почему ... извините.

Мат
источник
Спасибо за отличный ответ. Ценить это. Я прочитал статью LWM, и это вдохновило меня задать еще несколько вопросов, поэтому я добавил их к своему вопросу выше.
Анкур Агарвал
Большой! это очень очень полезно!
Камино
Я до сих пор не совсем понимаю, что такое shared_dirty. Неужели грязная природа этого все еще не позволяет ему делиться?
Кевин
@ Кевин: если бы их не поделили, их бы не учли Shared_Dirty- не могли бы вы уточнить свой вопрос?
Мат
грязные средства, модифицированные из оригинала. процесс, верно? что не так, как это происходит от того, чтобы быть общим для того, чтобы быть местным?
Кевин