Изменение каталога /sys/devices/system/memory/ Sysfs в ядре Linux
Я работаю над домашней работой моего курса по изменению директории памяти Sysfs в ядре Linux. Я ищу помощи у людей здесь, после получения разрешения от моего проф. Вот что я точно хочу сделать.
Справочная информация: если у меня 4 ГБ ОЗУ, на моей материнской плате может быть 4 X 1 ГБ DIMMS или 2X 2 ГБ DIMMS. NUMA поддерживается в Linux за счет разделения физической памяти объемом 4 ГБ на множество фрагментов с указанием начального и конечного физического адреса для каждого фрагмента. Каталог 'devices' в Sysfs содержит глобальную иерархию устройств. Он содержит каждое физическое устройство, которое было обнаружено типами шин, зарегистрированных в ядре. Следовательно, детали относительно блоков памяти хранятся в пути '/ sys / devices / system / memory /' ядра Linux. В этом каталоге у нас есть файл с именем block_size_bytes, который решает, на сколько частей можно разделить мою оперативную память. Например, в моей системе это 8000000, и, следовательно, оперативная память разделена на 32 папки памяти от memory0 до memory43. Каждый каталог 'memoryX' будет иметь файл с именем 'state', который представляет состояние онлайн / офлайн куска памяти. Я могу переключаться между онлайн / офлайн, если я хочу "отключить" этот конкретный блок памяти.
Вот что я хочу сделать:
Я хочу изменить всю эту структуру каталогов на 4 каталога. Почему 4? Потому что у меня на материнской плате 4 X 1 ГБ DIMMS, поэтому я хочу уменьшить эти 32 блока памяти до 4 больших блоков, чтобы я мог контролировать любой DIMM-модуль, переключая его "состояние" онлайн / офлайн. Поэтому я хочу изменить состояние памяти на уровне DIMM.
Это в значительной степени мое описание проблемы.
Мой подход: я прочитал файловую систему sysfs и попытался найти модули ядра, которые отвечают за организацию каталога памяти в sysfs. Я хочу найти модуль и отредактировать его согласно моему требованию и скомпилировать этот модуль. Все труднее было найти конкретную документацию по этой теме, что побудило меня задать этот вопрос. Все, что я мог найти, это то, что там этот файл программирования C '/lib/modules/3.8.0-19-generic/source/drivers/base/memory.c', который содержит методы для установки "состояния" блоков памяти, показывая начальный и конечный физический адрес каждого раздела памяти и многие другие методы. Но я не могу понять, где именно эти методы вызываются или какой модуль использует этот C-файл для установки всех атрибутов.
Не могли бы вы сообщить мне, какой именно модуль мне нужно искать? Если вы считаете, что мой подход неверен, не могли бы вы указать мне правильное направление?
Заранее спасибо:)
1 ответ
Я просто отвечаю на эту часть вопроса:
Но я не могу понять, где именно эти методы вызываются или какой модуль использует этот C-файл для установки всех атрибутов.
Вы можете использовать lxr для поиска в дереве ядра. Вот пример с функцией show_mem_state.