Влияние виртуальной памяти на выделение большей суммы страниц - PullRequest
0 голосов
/ 27 ноября 2018

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

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

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

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

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

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

...