Влияние виртуальной памяти на выделение большей суммы страниц

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

Поэтому я пишу регистратор в ядре Linux для извлечения характеристик памяти, таких как виртуальный адрес, физический адрес страниц и т. Д.

Для проверки работоспособности я выполняю malloc() выделять определенное количество страниц, а затем извлекать их виртуальный адрес и логический адрес, чтобы увидеть, увеличиваются ли выделения. Я извлекаю на основе pid этого процесса и после возникновения do_brk() вызывается в ядре.

Он отлично работает и точно для меньшего количества страниц (~128), а количество выделенных страниц практически не соответствует тому, что я на самом деле выделяю (+2->3). Однако, когда я выделяю большее количество страниц (~256 или более). Тогда это ничего не регистрирует. При просмотре необработанных логов этот pid не показывает выделенные ресурсы. Это действительно регистрирует это после повторных пробегов все же. И количество страниц точно.

Насколько я понимаю, возможно, что Виртуальная память играет роль здесь и делегирует это другому процессу (возможно, ядру), чтобы сделать mmap(do_mmap) и распределить его там. Так есть ли у кого-нибудь идея идентифицировать фактический процесс, который это делает?

Или другая возможность может быть printk() может быть, не сможет самостоятельно поддерживать создание журналов. В этом случае это объясняет, почему журналы выплевываются несколько раз, а иногда нет.

0 ответов

Другие вопросы по тегам