Есть ли способ узнать, есть ли в Linux какие-либо перемещения или подкачки страниц?

Сопоставление виртуального адреса с физической страницей можно изменить во время выполнения приложения путем подкачки или перераспределения физических страниц для дефрагментации памяти и т. д.

Что делать, если я хочу кэшировать номера физических страниц (PPN) некоторого диапазона виртуальных адресов из / proc / PID / pagemap, поскольку доступ к proc / PID / pagemap требует чрезвычайно больших накладных расходов, которые нужно проверять каждый раз, есть ли способ получить уведомление, если страница была перемещена на другой физический адрес или заменена на действующий адрес или просто на любую часть памяти?

Подойдет любой метод (не только метод пользовательского пространства, но и те, которые могут быть реализованы только в пространстве ядра).

Можете ли вы определить PPN в своем сообщении? Кроме того, похоже, что вы идете вниз, на территорию «модифицировать ядро ​​Linux, чтобы перехватывать определенные ошибки страниц / операции подкачки и регистрировать их». Сделать можно, но очень сложно.

wxz 02.04.2021 16:32

@wxz Привет! PPN означает физический номер страницы, что означает лишь начальную точку физического адреса каждой отдельной страницы. / Я предпочитаю использовать любой метод, который уже есть в текущей системе Linux, но если нет, я готов сделать для этого модуль ядра.

user3498780 02.04.2021 19:39

Я представил правку, поясняющую это. Я привык, что его называют физическим номером кадра (PFN) или просто физическим адресом. Что касается поставленной задачи, я не думаю, что Linux изначально предоставляет инструменты пользовательского уровня для получения физических адресов (см. здесь). Поэтому я думаю, что модуль ядра, который связывается с PID вашего процесса, а затем вызывается при сбоях страницы или подкачке, будет вашим лучшим вариантом.

wxz 02.04.2021 20:14

Вы можете просто получить страницы, чтобы они не двигались.

stark 02.04.2021 22:40
mlock(2) по крайней мере гарантирует, что страница не будет выгружена, и что доступ к ней не будет ошибкой страницы. Теоретически ядро ​​могло бы скопировать его на другую физическую страницу, пока ваш процесс спит, но я был бы удивлен, если бы это действительно могло произойти. Итак, я думаю, что вы обычно делаете сначала mlock() виртуальные страницы, а затем проверяете /proc/self/pagemap, чтобы получить их физический адрес; тогда вы знаете, что они не изменятся.
Nate Eldredge 03.04.2021 05:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
25
0

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