Да, вы платите цену за этот дополнительный чек.Это не только для косвенного указателя, но и для любого доступа к памяти (кроме, скажем, DMA).Однако стоимость проверки очень мала.
Во время выполнения вашего процесса таблица страниц меняется не очень часто.Части таблицы страниц будут кэшироваться в буфере внешнего вида перевода, при этом доступ к страницам с записями в буфере не требует дополнительных штрафов.
Если ваш процесс обращается к странице без записи TLB, тоЦП должен сделать дополнительный доступ к памяти, чтобы получить запись таблицы страниц для этой страницы.Затем он будет кэширован.
Вы можете увидеть эффект этого в действии, написав тестовую программу.Дайте вашей тестовой программе большой кусок памяти и начните случайное чтение и запись мест в памяти.Используйте параметр командной строки, чтобы изменить размер.
- При превышении размера кэша L1 производительность снижается из-за задержки в кэше L2.
- При превышении размера кэша L2 производительность падает доЗадержка ОЗУ.
- При превышении размера памяти, адресуемой TLB, производительность падает из-за пропусков TLB.(Это может произойти до или после исчерпания кэш-памяти L2, в зависимости от ряда факторов.)
- При объеме доступной оперативной памяти производительность будет падать из-за подкачки.
- Вышеразмер доступного пространства подкачки и оперативной памяти, приложение будет закрыто ОС.
Если ваша операционная система допускает «большие страницы», TLB может действительно охватить очень большое адресное пространство,Возможно, вы можете саботировать ОС, выделяя 4 тыс. Порций из mmap
, и в этом случае пропуски TLB могут ощущаться только с несколькими мегабайтами рабочего набора, в зависимости от вашего процессора.
Однако: Небольшое падение производительности должно быть сопоставлено с преимуществами виртуальной памяти, которых здесь слишком много, чтобы перечислять.