Как вызвать перегрузку TLB пользовательским процессом? - PullRequest
4 голосов
/ 07 апреля 2011

Моя текущая работа должна генерировать определенное количество пропусков TLB на процессорах серии Intel Core, пока это не идет хорошо. Я перепробовал много методов, но все они имеют очень высокий уровень попадания TLB. Кто-нибудь знает какую-нибудь полезную информацию о том, как работает x86 TLB, или какой-нибудь метод для генерации большого количества промахов TLB в пользовательском процессе?

1 Ответ

2 голосов
/ 07 апреля 2011

TLB - это кэш, используемый ЦП для запоминания физического адреса, связанного с виртуальным адресом.Виртуальное адресное пространство разбито на страницы, обычно по 4 КБ каждая.TLB имеет место для каждой возможной виртуальной страницы, которая содержит адрес физической страницы, связанной с ним.При попытке получить доступ к странице, физический адрес которой еще не был загружен, возникает ошибка TLB.Поэтому, чтобы максимизировать пропуски, вам нужно максимизировать количество различных страниц, к которым обращались.

К сожалению, это не так просто.Простой промах TLB будет читать записи из иерархии таблицы страниц, чтобы найти правильный физический адрес.Но это происходит только в том случае, если вы открываете страницу, которая имеет физический адрес.ОС будет определять, какие виртуальные адреса имеют, какие физические адреса, и если вы попытаетесь читать с любых других, вы вызовете сбой страницы.Обработчик сбоев страниц либо прервет вашу программу за незаконный доступ к этой странице, либо переместит данные, чтобы поместить физическую страницу в этот виртуальный адрес.

Лучший способ вызвать как можно больше пропусков TLB:

  1. Выделите столько памяти, сколько позволит ОС.Вы должны чередовать выделение больших и маленьких кусков, освобождая маленькие кусочки после выделения еще одного большого.Мы надеемся, что это максимизирует фрагментацию, распределяя вашу память по максимально возможному количеству страниц.
  2. Создайте список с одним адресом из каждой другой страницы, используемой в выделенной памяти.Вы также можете добавить другие страницы, которые, как вы знаете, доступны для чтения, например, страницы, содержащие ваш код.
  3. Перебирайте этот список, читая данные с каждой страницы.Поскольку ОС требуется освободить физические страницы для размещения ваших виртуальных страниц, она (будем надеяться) будет использовать физические страницы, ранее связанные с другими страницами в вашем цикле, вызывая максимальное количество пропусков TLB.

Количество пропусков будет увеличиваться по мере того, как доступное ОЗУ будет уменьшаться, потому что ОС придется перемещать больше физических страниц, чтобы удовлетворить потребности вашей программы, поэтому хорошо, чтобы другие процессы, требующие памяти, выполнялись одновременно.

...