Дамп содержимого буфера TLB процессора x86 - PullRequest
2 голосов
/ 24 июля 2011

Можно ли получить список переводов (с виртуальных страниц на физические страницы) из TLB (буфер перевода с обратной стороны, это специальный кэш в ЦП). Я имею в виду современный x86 или x86_64; и я хочу сделать это программным способом, не используя JTAG и не удаляя все записи TLB.

Ответы [ 2 ]

4 голосов
/ 28 августа 2011

В ядре linux такого дампера нет, есть страница из ядра linux о кэше и tlb: https://www.kernel.org/doc/Documentation/cachetlb.txt "Очистка кэша и TLB под Linux".Дэвид С. Миллер

Был такой дамп TLB в 80386DX (и 80486, и, возможно, во "Embedded Pentium" 100-166 МГц / " Embedded Pentium MMX 200-233 МГц" в1998):

  • 1 - Книга "МИКРОПРОЦЕССОРЫ: 8086/8088, 80186/80286, 80386/80486 И ПЕНТИЙНАЯ СЕМЬЯ", ISBN 9788120339422, 2010, стр. 579

Это было сделано с помощью тестовых регистров TR6 TR7:

  • 2 - Книга "Микропроцессоры и микроконтроллеры" от Godse & Godse, 2008 ISBN 9788184312973, страница SA3-PA19: «3.2.7.3 Тестовые регистры» «в настоящее время определены только два тестовых регистра (TR6-TR7). ... Эти регистры используются для проверки трансляционного промежуточного буфера (TLB) блока пейджинга."
  • 3"x86-Programmierung und -Betriebsarten (Teil 5). Die Testregister TR6 und TR7", немецкая статья о регистрах: "Zur Prüfung des Translation-Lookaside-Buffers sind die zwei Testregister TR6 und TR7 vorhanden. Sie werden".alt Test-Command-Register (TR6) и Testdatenregister (TR7) безейхнет."
  • 4 Руководство Intel для разработчиков семейства процессоров Embedded Pentium®", часть "26 Конкретные регистры и функции модели", страница 8 "26.2.1.2 Регистры тестирования TLB"

TR6 - это регистр команд, в него записывается линейный адрес, который может использоваться для записи в TLB или для чтения строки из TLB. TR7 - данные для записи в TLB или чтения из TLB.

В Википедии говорится в https://en.wikipedia.org/wiki/Test_register, что чтение TR6 / TR7 «генерирует недопустимое исключение кода операции на любом процессоре, более новом, чем 80486».

Кодировка mov tr6 / tr7 была доступна только для уровня привилегий 0: http://www.fermimn.gov.it/linux/quarta/x86/movrs.htm

0F 24 /r    movl tr6/tr7,r32    12  Move (test register) to (register)  
   movl %tr6,%ebx
   movl %tr7,%ebx
0F 26 /r    movl r32,tr6/tr7    12  Move (register) to (test register)  
   movl %ebx,%tr6
   movl %ebx,%tr7
1 голос
/ 07 октября 2012

Вы можете получить список переводов VA-PA, хранящихся в TLB, но вам, возможно, придется использовать эмулятор процессора, такой как qemu. Вы можете скачать и установить qemu с http://wiki.qemu.org/Main_Page Вы можете загрузить ядро, которое хранится в образе диска (обычно в формате qcow2 или raw) и запустить ваше приложение. Возможно, вам придется настроить код в qemu, чтобы распечатать содержимое TLB. Посмотрите на tlb_* функции в qemu/exec.c Вы можете добавить функцию tlb_dump_function для печати содержимого TLB. Насколько я знаю, это самое близкое к дампу содержимое TLB.

П.С .: Я начал отвечать на этот вопрос, а потом понял, что ему год.

...