Можно ли контролировать копирование при записи для разветвленных процессов Linux? (в частности, питон) - PullRequest
0 голосов
/ 26 июня 2018

У меня есть набор процессов Python, которые совместно используют большой объект (совместное использование выполняется путем разветвления процессов после инициализации объекта)

Я замечаю странную утечку памяти:

  • память процесса (VSZ и RSS) почти не изменяется
  • общая системная память постоянно увеличивается

Я предполагаю, что общий объект изменяется (он «логически» доступен только для чтения, но возможно, чтонекоторые внутренние закрытые переменные меняются даже при чтении из него) - что вызывает копирование страниц памяти

есть ли способ проверить это?

1 Ответ

0 голосов
/ 26 июня 2018

Чтобы ответить на ваш конкретный вопрос «есть ли способ проверить это?», Если я правильно понимаю, вы можете сделать следующее, если хотите узнать, есть ли какие-либо изменения, связанные со страницами, которые содержат большой объект.

1) Определите адрес вашего «большого общего объекта» и адрес, где этот объект заканчивается.

2) Если начальный адрес не находится на границе страницы 4K, округлите началоадрес до границы страницы до того, где начинается объект.

3) Если конечный адрес не находится на границе 4 КБ, округлите конечный адрес до границы страницы после того, как объект заканчивается.

4) Извлеките этот диапазон памяти для процесса и всех его дочерних элементов, чтобы разделить файлы и сравнить их.

Однако я думаю, что os.fork () будет использовать copy при записи или делать полноеКопия родительского процесса в Python? может уже дать объяснение по крайней мере для некоторых работ, которые требуют копирования.В частности, объекты python подсчитывают ссылки, и ваши дочерние процессы будут изменять количество ссылок.

Рассматривали ли вы использование потоков python вместо создания дочерних процессов?

...