Что вызывает операции с памятью ядра в статистике производительности для процесса, предназначенного только для пользоватC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Что вызывает операции с памятью ядра в статистике производительности для процесса, предназначенного только для пользоват

Сообщение Anonymous »

Я запускаю простую программу, в которой:
  • Поток, прикрепленный к ЦП 1, выполняет случайное чтение из заранее выделенной и инициализированной области памяти размером 2 ГБ и во время цикла доступа к памяти не выполняется никаких системных вызовов.
  • Perf работает в отдельном процессе, измеряющем mem_inst_retired.all_loads:k,mem_inst_retired.all_stores:k -I 200 -p
Вот минимальный тестовый код:

Код: Выделить всё

void access_memory(char *memory) {
// Pin thread to CPU 1
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);

std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution dist(0, 2GB - 500);
char buffer[500];

while (!should_stop) {
size_t offset = dist(gen);
memcpy(buffer, memory + offset, 500);
buffer[0]++;
}
}
Изображение

Вопросы:
  • Почему выполняются какие-либо операции с памятью ядра, когда процесс выполняет только чтение памяти из пользовательского пространства? Хотя это может быть эффектом наблюдателя, могут ли прерывания, генерируемые PMU (блоком мониторинга производительности) для выборки, заставлять ядро ​​выполнять операции с памятью, которые приписываются процессу доступа? Я просмотрел SDM, но не нашел хорошего ответа.
  • Как perf приписывает операции режима ядра конкретному процессу? Что касается системных вызовов, то ясно, что ядро ​​работает «от имени» процесса, но как насчет задач ядра, таких как планирование, сжатие памяти или балансировка нагрузки, которые могут повлиять на процесс? Где проходит черта?
Я заметил, что изменение интервала выборки с 200 мс на 5 с приводит к изменению измеряемых операций ядра с ~ 10^5 до ~ 10. ^7 операций за интервал.
Вот простой код, который осуществляет доступ и измеряет активность загрузки/сохранения:
https://gist.github.com/VinayBanakar/8c ... d3e3687aac

Подробнее здесь: https://stackoverflow.com/questions/791 ... ly-process
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»