Просмотр pagetable для процесса

Я хочу видеть, что pagetable управляет ядром для одного из моих процессов. В моем случае PID 4680 отображается на dhclient . Поэтому, чтобы просмотреть таблицу страниц, я попробовал следующее:

 sudo cat /proc/4680/pagemap 

Однако эта команда просто зависает на моем Ubuntu 14.04 без вывода. Я пробовал ждать 2 минуты, а затем должен его убить.

Есть ли лучший способ сделать это?

2 Solutions collect form web for “Просмотр pagetable для процесса”

Согласно документации , /proc/PID/pagemap содержит одно 64-битное значение для каждой виртуальной страницы.

С 4096-байтовыми страницами и 64-битным виртуальным адресным пространством имеется 2**52 страницы. Таким образом, полный файл pagemap будет 2**52 записи по 8 байт каждый. Это действительно большой файл. Котировка всего этого займет много времени. Не 2 минуты. Очень долго. Тест скорости на моем собственном компьютере предполагает около 21 года.

И это в основном будет заполнено нулями (для всех виртуальных адресов, которые не отображаются в процессе). Пучок вывода \0 на терминал не вызывает видимого эффекта. Он не висел, он делает то, что вы просили.

Это не текстовый файл, поэтому записи, которые не равны нулю, вряд ли будут хорошо выглядеть на вашем терминале.

Правильный способ использования файла pagemap – узнать, какой виртуальный адрес вы ищете, искать его и читать 8 байтов. Или, если вам нужна информация для диапазона, прочитайте несколько кратных 8 байтам. Если вам нужны все ненулевые записи, сначала прочитайте /proc/PID/maps чтобы найти, какие диапазоны отображаются.

Я подозреваю, что вы ищете /proc/<pid>/maps . Вы можете увидеть карту программы и ее библиотеки. Если вы хотите получить доступ к содержимому каждой из этих областей, вы можете получить доступ к /proc/<pid>map_files , где каждое имя файла задается диапазоном памяти каждого блока.

Подробнее об этом в man proc , найдите /proc/[pid]/map_files/ и следующие параграфы.

Ниже приведен пример (часть) блоков использования памяти на основе X11:

введите описание изображения здесь

  • Написание драйверов для Oracle Solaris
  • Добавление IPVS в ядро
  • Какие соображения должны быть сделаны при выборе версии ядра для встроенного устройства?
  • Использование памяти в Linux?
  • Невозможно найти параметр конфигурации «CONFIG_CRASH_DUMP» для kdump
  • В чем разница между ioremap и файловой операцией mmap?
  • Кнопка мыши перестает работать с перерывами
  • сетевое устройство не найдено после обновления ядра
  • Что обеспечивает модуль модуля xpad? (И что я проиграю, отключив его?)
  • Могут ли новые версии glibc использоваться со старым ядром?
  • В чем разница между драйверами ядра и модулями ядра?
  • Linux и Unix - лучшая ОС в мире.