Да, конечно. Наличие неограниченного верхнего предела числа записей TLB потребовало бы неограниченного количества физического пространства в кристалле ЦП.
Каждый TLB в каждой архитектуре имеет верхний предел количества записей, которые он может содержать.
Для случая x86 это число меньше, чем вы, вероятно, ожидали: оно равно 4.
Это было 4 на вашем Мосте Плюща и еще 4 на моем Каби-Лейк, четыре поколения спустя.
Стоит отметить, что 4 записи охватывают 4 ГБ ОЗУ (4x1 ГБ), этого вполне достаточно для работы в сети, если правильно используется .
Наконец, TLB - это ресурсы ядра , каждое ядро имеет свой набор TLB.
Если вы отключите SMT (например, Intel Hyper Threading) или назначите оба потока на ядре одной и той же виртуальной машине, виртуальные машины не будут конкурировать за записи TLB.
Однако каждая виртуальная машина может кэшировать не более 4хC огромных записей страниц, где C - количество ядер, выделенных для этой виртуальной машины.
Способность виртуальной машины полностью использовать эти записи зависит от того, как хост-операционная система, гипервизор и гостевая ОС работают вместе, а также от структуры памяти гостевого приложения, представляющего интерес (страницы, совместно используемые ядрами, имеют дублированные записи TLB в каждом ядре ).
Трудно (почти невозможно?) Прозрачно использовать страницы объемом 1 ГБ, я не уверен, как гипервизор и виртуальная машина будут использовать эти страницы - я бы сказал, что вам нужна конкретная поддержка для этого, но я не уверен.
Как отметил Питер Кордес , страницы объемом 1 ГБ используют одноуровневый TLB (а в Skylake, по-видимому, также имеется TLB второго уровня с 16 записями для страниц объемом 1 ГБ).
Пропуск в TLB 1 ГБ приведет к просмотру страницы, поэтому очень важно, чтобы все задействованное программное обеспечение использовало код, учитывающий страницы.