Память - пейджинг и TLB -- memory поле с участием paging поле с участием tlb поле с участием mmu пол Связанный проблема

Memory - Paging and TLB


0
vote

проблема

русский

У меня есть вопрос к следующей задаче.

Рассмотрим систему IA-32, где MMU поддерживает двухуровневую таблицу страницы. Второй Уровень содержит 1024 Page Page Table Chapties отображения на 4 КБ кадров страницы. Каждая таблица страницы Вход (оба уровня) имеет размер 4 байта. Система поддерживает только размер страницы 4 КБ.
Мы хотим последовательно читать последовательную 8 МБ из виртуальной памяти, начиная с байта 0. Мы читаем одно слово за раз (4 байта)
У нас есть 8 входных данных TLB. Сколько доступ к памяти необходимо Прочитайте 8 МБ памяти, указанной выше?

делает это значение, если TLB имеет 4 записи вместо 8?

Так, мы читаем последовательно. Это означает 8 МБ / 4b = 2M доступ к памяти. У нас есть два уровня страницы. Следовательно, 2 м + 2 * 2 м = 6 м доступа к памяти без TLB.

Но я не знаю, как рассчитать доступ к памяти, включая TLB.

Может ли кто-нибудь объяснить мне это? Это было бы очень полезно.

Английский оригинал

I have question to the following task.

Consider an IA-32 system where the MMU supports a two level page table. The second level contains 1024 page table entries mapping to 4 KB page frames. Each page table entry (both levels) has a size of 4 bytes. The system only supports 4 KB page size.
We want to sequentially read consecutive 8 MB from virtual memory, starting with byte 0. We read one word at a time (4 bytes)
We have an 8 entry data TLB. How many memory accesses are needed to read the 8 MB of memory specified above?

Does it make a difference, if the TLB has 4 entries instead of 8?

So, we read sequentially. This means 8MB/4B = 2M memory accesses. We have a two level page table. Therefore, 2M + 2*2M = 6M memory accesses without TLB.

But I don't know how to calculate the memory accesses including a TLB.

Could anyone explain me that? That would be very helpful.

</div
           
     
     

Список ответов

0
 
vote
<Р> Поскольку шаблон доступа является потоковым доступом, каждая запись TLB будет использоваться для одного доступа к каждому четыре байту для всей страницы и никогда не используется повторно. Это означает, что каждая запись TLB будет повторно 1023 раз, поэтому 1023 внешний вид окна (2046 доступ к памяти), можно было бы избежать на каждой странице. (Поскольку не существует никакого дублирования использования различных переводов и только прекрасно локализованного повторного использования, единый ввод данных TLB будут иметь эквивалентную производительность даже в 2048-записи TLB.) <Р> Рассмотрим следующее описание того, что происходит для прямого отображения данных на два входа TLB (учитывая, что младшие 12 битов виртуального адреса-смещение внутри страницы, игнорируются для TLB и один бит виртуальный адрес используется в качестве индекса в TLB):
 <код> load 0x0100_0000; // TLB entry 0 tag != 0x0800 (page # 0x0_1000) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x0100_0004; // TLB entry 0 tag == 0x0800 [hit] load 0x0100_0008; // TLB entry 0 tag == 0x0800 [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x0100_0ffc; // TLB entry 0 tag == 0x0800 [hit]; last word in page load 0x0100_1000; // TLB entry 1 tag != 0x0800 (page # 0x0_1001) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x0100_1004; // TLB entry 1 tag == 0x0800 [hit] load 0x0100_1008; // TLB entry 1 tag == 0x0800 [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x0100_1ffc; // TLB entry 1 tag == 0x0800 [hit]; last word in page load 0x0100_2000; // TLB entry 0 tag (0x0800) != 0x0801 (page # 0x0_1002) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x0100_2004; // TLB entry 0 tag == 0x0801 [hit] load 0x0100_2008; // TLB entry 0 tag == 0x0801 [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x0100_2ffc; // TLB entry 0 tag == 0x0801 [hit]; last word in page load 0x0100_3000; // TLB entry 1 tag (0x0800) != 0x0801 (page # 0x0_1003) [miss)                   // 2 memory accesses to fill TLB entry 1 load 0x0100_3004; // TLB entry 1 tag  == 0x0801 [hit] load 0x0100_3008; // TLB entry 1 tag  == 0x0801 [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x0100_3ffc; // TLB entry 1 tag  == 0x0801 [hit]; last word in page ...               // repeat the above 510 times                   // then the last 4 pages of the 8 MiB stream load 0x017f_c000; // TLB entry 0 tag (0x0bfd) != 0x0bfe (page # 0x0_17fc) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x017f_c004; // TLB entry 0 tag == 0x0bfe [hit] load 0x017f_c008; // TLB entry 0 tag == 0x0bfe [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x017f_cffc; // TLB entry 0 tag == 0x0bfe [hit]; last word in page load 0x017f_d000; // TLB entry 1 tag (0x0bfd) != 0x0bfe (page # 0x0_17fd) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x017f_d004; // TLB entry 1 tag == 0x0bfe [hit] load 0x017f_d008; // TLB entry 1 tag == 0x0bfe [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x017f_dffc; // TLB entry 1 tag == 0x0bfe [hit]; last word in page load 0x017f_e000; // TLB entry 0 tag (0x0bfe) != 0x0bff (page # 0x0_17fe) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x017f_e004; // TLB entry 0 tag == 0x0bff [hit] load 0x017f_e008; // TLB entry 0 tag == 0x0bff [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x017f_effc; // TLB entry 0 tag == 0x0bff [hit]; last word in page load 0x017f_f000; // TLB entry 1 tag (0x0bfe) != 0x0bff (page # 0x0_17ff) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x017f_f004; // TLB entry 1 tag  == 0x0bff [hit] load 0x017f_f008; // TLB entry 1 tag  == 0x0bff [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x017f_fffc; // TLB entry 1 tag  == 0x0bff [hit]; last word in page   
<Р> Каждая страница ссылается 1024 раз (один раз для каждого четыре байта элемента) в последовательности, а затем никогда не ссылаются снова. <Р> (Теперь рассмотрим конструкцию с четырьмя TLB записей и две записи кэширования записей каталога страница [каждый из которых имеет указатель на страницу записей таблицы страниц]. Каждый кэшируются PDE будет повторно использоваться для 1023 страниц просмотровых окон, уменьшая их к одному доступу к памяти каждого из них. [Если потоковый доступ 8 Мб был повторен в качестве внутреннего контура и был 4 Мб выровнены, кэш ФДЭ два входа будет полностью разогрет после первой итерации, и все последующих таблицы страниц взгляда окно будет только требует одну ссылки памяти.])
 

Since the access pattern is a streaming access, each TLB entry will be used for one access to each four bytes for the entire page and never re-used. This means that each TLB entry will be reused 1023 times, so 1023 look-ups (2046 memory accesses) would be avoided per page. (Since there is no overlap of use of different translations and only perfectly localized reuse, a single entry data TLB would have equivalent performance to even a 2048-entry TLB.)

Consider the following description of what is happening for a two-entry direct-mapped data TLB (recognizing that the least significant 12 bits of the virtual address—the offset within the page—are ignored for the TLB and one bit of the virtual address is used to index into the TLB):

load 0x0100_0000; // TLB entry 0 tag != 0x0800 (page # 0x0_1000) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x0100_0004; // TLB entry 0 tag == 0x0800 [hit] load 0x0100_0008; // TLB entry 0 tag == 0x0800 [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x0100_0ffc; // TLB entry 0 tag == 0x0800 [hit]; last word in page load 0x0100_1000; // TLB entry 1 tag != 0x0800 (page # 0x0_1001) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x0100_1004; // TLB entry 1 tag == 0x0800 [hit] load 0x0100_1008; // TLB entry 1 tag == 0x0800 [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x0100_1ffc; // TLB entry 1 tag == 0x0800 [hit]; last word in page load 0x0100_2000; // TLB entry 0 tag (0x0800) != 0x0801 (page # 0x0_1002) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x0100_2004; // TLB entry 0 tag == 0x0801 [hit] load 0x0100_2008; // TLB entry 0 tag == 0x0801 [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x0100_2ffc; // TLB entry 0 tag == 0x0801 [hit]; last word in page load 0x0100_3000; // TLB entry 1 tag (0x0800) != 0x0801 (page # 0x0_1003) [miss)                   // 2 memory accesses to fill TLB entry 1 load 0x0100_3004; // TLB entry 1 tag  == 0x0801 [hit] load 0x0100_3008; // TLB entry 1 tag  == 0x0801 [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x0100_3ffc; // TLB entry 1 tag  == 0x0801 [hit]; last word in page ...               // repeat the above 510 times                   // then the last 4 pages of the 8 MiB stream load 0x017f_c000; // TLB entry 0 tag (0x0bfd) != 0x0bfe (page # 0x0_17fc) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x017f_c004; // TLB entry 0 tag == 0x0bfe [hit] load 0x017f_c008; // TLB entry 0 tag == 0x0bfe [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x017f_cffc; // TLB entry 0 tag == 0x0bfe [hit]; last word in page load 0x017f_d000; // TLB entry 1 tag (0x0bfd) != 0x0bfe (page # 0x0_17fd) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x017f_d004; // TLB entry 1 tag == 0x0bfe [hit] load 0x017f_d008; // TLB entry 1 tag == 0x0bfe [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x017f_dffc; // TLB entry 1 tag == 0x0bfe [hit]; last word in page load 0x017f_e000; // TLB entry 0 tag (0x0bfe) != 0x0bff (page # 0x0_17fe) [miss]                   // 2 memory accesses to fill TLB entry 0 load 0x017f_e004; // TLB entry 0 tag == 0x0bff [hit] load 0x017f_e008; // TLB entry 0 tag == 0x0bff [hit] ...               // 1020 TLB hits in TLB entry 0 load 0x017f_effc; // TLB entry 0 tag == 0x0bff [hit]; last word in page load 0x017f_f000; // TLB entry 1 tag (0x0bfe) != 0x0bff (page # 0x0_17ff) [miss]                   // 2 memory accesses to fill TLB entry 1 load 0x017f_f004; // TLB entry 1 tag  == 0x0bff [hit] load 0x017f_f008; // TLB entry 1 tag  == 0x0bff [hit] ...               // 1020 TLB hits in TLB entry 1 load 0x017f_fffc; // TLB entry 1 tag  == 0x0bff [hit]; last word in page 

Each page is referenced 1024 times (once for each four byte element) in sequence and then is never referenced again.

(Now consider a design with four TLB entries and two entries caching page directory entries [each of which has the pointer to the page of page table entries]. Each cached PDE will be reused for 1023 page look-ups, reducing them to one memory access each. [If the 8 MiB streaming access was repeated as an inner loop and was 4 MiB aligned, a two-entry PDE cache would be fully warmed up after the first iteration and all subsequent page table look-ups would only require one memory reference.])

</div
 
 
       
       

Связанный проблема

0  Как Spark управляет физической памятью, виртуальной памятью памяти памяти и исполнителя?  ( How spark manages physical memory virtual memory and executor memory ) 
Как я работаю на искре в течение нескольких дней, я запутался вокруг управления искром памятью. Я вижу термины, такие как физическую память, виртуальную памят...

1  Доступ к недвижимости в NsmanagedObject вызывает шип памяти и сбой  ( Accessing a property in nsmanagedobject causes memory spike and crash ) 
Я пишу приложение для iPhone, которое использует основные данные для хранения. Все мои подклассы NSManagedObject были автоматически созданы XCode на основе мо...

2  Почему мой «использовать my_module;» Возьми столько кучи памяти?  ( Why does my use my module take so much heap memory ) 
Этот образец сценария: <код> #!/usr/bin/perl -w while (1) { sleep(1); } занимает около 264 кб <код> grep -A1 heap /proc/9216/smaps 0817b000-081bd...

0  Разделение словаря в Python на основе размера памяти  ( Splitting a dictionary in python based on memory size ) 
Я в процессе перемещения распределенной файловой системы в AWS SimpleDB с помощью Boto, и я работаю в проблеме, которая не имеет четкого решения для меня. Тек...

3  Как избежать ошибки памяти в браузере из-за слишком много вызовов AJAX  ( How to avoid out of memory error in a browser due to too many ajax calls ) 
Я наращиваю веб-приложение, которое необходимо сделать около 28000 баз данных вызовов с использованием краткости jQuery AJAX. Он проходит около 6000 вызовов...

0  Окрашенное изображение всегда черное  ( Painted image is always black ) 
Я пытаюсь рисовать изображение в всплывающих окнах. Я получаю растровую инфо из потока. Эта часть должна быть в порядке, потому что если я создаю файл и сохра...

0  Размер указателя, выделенного malloc [дублировать]  ( Size of a pointer allocated by malloc ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  Разница между указателем и массивом с точки зрения памяти [дубликат]  ( Difference between pointer and array in terms of memory ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

96  Профилирование памяти PHP  ( Php memory profiling ) 
Какой хороший способ профиля использования памяти PHP? Например, чтобы увидеть, сколько памяти используют мои данные, а / или какие вызовы функций выделяют на...

1  Проблема памяти Tomcat  ( Tomcat memory issue ) 
У меня есть более 150 веб-приложений в моем каталоге Tomcat Web-Apps, могут быть одной из причин увеличения использования памяти. Я установил Tomcat как услуг...

0  Есть ли доступ на диске на каждой ошибке страницы?  ( Is there a disk access in every page fault ) 
Мой вопрос (как указано) Есть ли доступ к диску / виртуальной памяти каждый раз, когда есть ошибка страницы? Если нет, в каких случаях нет доступа к диску? ...

1  Как сравнить использование памяти приложения на Linux и Windows?  ( How to compare application memory usage on linux and windows ) 
Я пытаюсь сравнить использование памяти приложения, работающего под Linux и Windows на том же компьютере. Есть ли «быстрый и грязный» способ нормализации чтен...

7  Использование памяти в рекурсивном VS итеративной обходной графике  ( Memory utilization in recursive vs an iterative graph traversal ) 
Я посмотрел на некоторые общие инструменты, такие как Куча для измерения того, сколько памяти используется каждый Треверсальная техника, но я не знаю, дают ...

0  Управление памятью UC / OS II, OSMEMPUT () возвращает блок памяти без очистки памяти  ( Uc os ii memory management osmemput return the memory block without memory cle ) 
Я новичок о UC / OS II, и запутался с помощью управления памятью. В функции Osmemget () мы можем видеть, что задача требует первого блока связанного спис...

1  Как мне найти PTEP для данного адреса?  ( How do i find the ptep for a given address ) 
Я пытаюсь написать функцию, которая записывает - защищает каждый <код> pte в данном <код> vm_area_struct . Какова функция, которая дает мне <код> ptep для д...

Связанный проблема

0  Как Spark управляет физической памятью, виртуальной памятью памяти памяти и исполнителя? 
1  Доступ к недвижимости в NsmanagedObject вызывает шип памяти и сбой 
2  Почему мой «использовать my_module;» Возьми столько кучи памяти? 
0  Разделение словаря в Python на основе размера памяти 
3  Как избежать ошибки памяти в браузере из-за слишком много вызовов AJAX 
0  Окрашенное изображение всегда черное 
0  Размер указателя, выделенного malloc [дублировать] 
1  Разница между указателем и массивом с точки зрения памяти [дубликат] 
96  Профилирование памяти PHP 
1  Проблема памяти Tomcat 
0  Есть ли доступ на диске на каждой ошибке страницы? 
1  Как сравнить использование памяти приложения на Linux и Windows? 
7  Использование памяти в рекурсивном VS итеративной обходной графике 
0  Управление памятью UC / OS II, OSMEMPUT () возвращает блок памяти без очистки памяти 
1  Как мне найти PTEP для данного адреса?