Я хочу посмотреть, к каким страницам обращается моя программа.
Вы можете смоделировать процессор и получить эти данные.Варианты:
- 1) valgrind - динамический переводчик двоичных файлов пользовательского пространства с хорошей поддержкой инструментария.Попробуйте инструмент cachegrind - он будет эмулировать даже кэши L1 / L2;также вы можете попробовать создать новый инструмент для регистрации всех обращений к памяти (например, с детализацией страницы)
- 2) qemu - динамический транслятор, как для общесистемного, так и для общесистемного режимов.Никаких инструментов в оригинальном qemu, как я знаю
- 3) bochs - общесистемный эмулятор процессора (очень медленный).Вы можете легко взломать код «доступа к памяти», чтобы получить журнал памяти.
- 4) PTLsim - www.ptlsim.org/papers/PTLsim-ISPASS-2007.pdf
Однако это связано с накладными расходами установки битов защиты для всех страниц памяти
Не слишком ли велики эти издержки?
Теперь вопрос заключается в том, как обрабатывать пропуски TLB в пространстве пользователя для программы linux.
Вы не можете обрабатывать пропуски, ни в пространстве пользователя, ни в пространстве ядра(на x86 и многих других популярных платформах).Это связано с тем, что большинство платформ управляет пропусками TLB в hardware : .MMU (часть CPU / chipset) будет выполнять обход таблиц страниц и прозрачно получать физический адрес.Только если установлены некоторые биты или когда область адреса не отображена, прерывание сбоя страницы генерируется и доставляется в ядро.
Кроме того, кажется, что в современных процессорах нет способа вывести TLB (, но 386DX)смог к этому )
Вы можете попытаться обнаружить промах TLB по введенной задержке.Но эту задержку можно скрыть из-за неправильного запуска поиска TLB.
Кроме того, большинство аппаратных событий (доступ к памяти, доступ к tlb, попадания по tlb, пропуски по tlb) подсчитываются с помощью мониторинга производительности оборудования (эта частьЦП используется Vtune, CodeAnalyst и oprofile).К сожалению, это только глобальные счетчики для событий, и вы не можете активировать более 2-4 событий одновременно.Хорошей новостью является то, что вы можете установить счетчик perfmon для прерывания при достижении некоторого количества.Затем вы получите (через прерывание) адрес инструкции ($ eip), где был достигнут счет.Таким образом, вы можете найти «горячую точку» TLB-miss-spot с этим оборудованием (оно есть в каждом современном процессоре x86; как в Intel, так и в AMD).