Как получить физический адрес для любого адреса во FreeBSD из пользовательского пространства?

#c #memory #freebsd #virtual-address-space

#c #память #freebsd #виртуальное адресное пространство

Вопрос:

Для некоторого расследования мне нужно узнать физический адрес указателя во FreeBSD 12. В Linux я бы сделал это с /proc/self/pagemap помощью, но во FreeBSD я не нашел способа сделать это.

Итак, есть ли способ получить физический адрес любого виртуального адреса из пользовательского пространства во FreeBSD?

Комментарии:

1. Зачем вам нужен физический адрес? Что вы собираетесь с этим делать? Любой код, отличный от кода управления памятью в ядре, будет использовать виртуальные адреса.

2. Мы отлаживаем некоторые проблемы с локальностью NUMA и пытаемся проверить, что адреса распределены на надлежащем процессоре.

Ответ №1:

Для FreeBSD см. Макрос vtop

find(1) и xargs(1) — ваши друзья:

 find /usr/include /usr/src/sys -type f -name '*.h' -print0 
| xargs -0 egrep -i vtop | less
  

Я думаю, что это хорошая отправная точка 😉

Комментарии:

1. К сожалению, vtop — это макрос ядра, поэтому я не смогу использовать его из пользовательского пространства. Я мог бы использовать его из модуля ядра, но этого я хочу избежать.