TLB, CPUID и огромные страницы? - PullRequest
2 голосов
/ 03 июня 2019

Если я подключу 64 МБ огромных страниц размером 2 МБ к / mnt / large2mb, какие записи TLB будут использовать эти страницы? Я mmap() -ed их в моей программе на Си.

cpuid выход:

   cache and TLB information (2):
      0x63: data TLB: 1G pages, 4-way, 4 entries
      0x03: data TLB: 4K pages, 4-way, 64 entries
      0x76: instruction TLB: 2M/4M pages, fully, 8 entries
      0xff: cache data is in CPUID 4
      0xb6: instruction TLB: 4K, 8-way, 128 entries
      0xf0: 64 byte prefetching
      0xc3: L2 TLB: 4K/2M pages, 6-way, 1536 entries

Я считаю, что эти смонтированные огромные страницы размером 2 МБ принадлежат данным, и поэтому они используют записи TLB данных.

Однако записи данных TLB предназначены для страниц 1G и 4K.

Тогда, какие записи TLB используются для этих огромных страниц размером 2 МБ? L2 TLB записи? Если да, что такое L2 TLB? Это как для данных и инструкции? Если да, то существуют перекрытия для страниц 4K для данных - данные TLB и L2 TLB. Какова цель дополнительных 64 записей для страниц 4K?

Спасибо!

1 Ответ

1 голос
/ 04 июня 2019

Во-первых, я не обязательно предполагал бы, что данные из самого CPUID верны (на протяжении многих лет были различные ошибки), и если данные из CPUID верны, я не обязательно предполагал бы, что код в Linuxправильно его интерпретирует (в течение многих лет определение характеристик кэша превратилось в ужасный беспорядок).

Не имея ни малейшего представления о том, что такое процессор (и не имея возможности проверить, правильно ли информация была передана CPUID и Linux);основываясь на показанной информации, у меня возникнет соблазн предположить, что 0xc3: L2 TLB: 4K/2M pages, 6-way, 1536 entries используется для инструкций и данных и будет использоваться для ваших страниц объемом 2 МБ, но при использовании этих страниц объемом 2 МБ ЦП также разделит записи 2 МБ TLBна кусочки и используйте 0x03: data TLB: 4K pages, 4-way, 64 entries для (4 КиБ) 2 страниц по MiB.

...