Programowanie mikroprocesorów jednoukładowych Pamięć cache Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 1 / 22
Plan I Cache Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 2 / 22
Relacje miedzy pamięcią cache, procesorem i główna pamięcią Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 3 / 22
Pamięć cache i jednostka MMU(przed) Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 4 / 22
Pamięć cache i jednostka MMU(za) Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 5 / 22
Architektura pamięci CACHE achitektura Von Neumanna achitektura Harwardzka (I-cache i D-cache) Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 6 / 22
Podstawowa architektura pamięci cache Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 7 / 22
Kontroler cache Zadaniem kontrolera jest automatyczne odczytywanie danych z pamięci głównej do pamięci cache oraz zapis z pamięci cache do pamięci głównej. Przechwytuje on zadania do pamięci głównej i porównuje je z zawartością pól w linii cache. Kontroler porównuje bit statusu by sprawdzić czy linia cache jest aktywna, następnie porównuje cache-tag z zadanym adresem, jeżeli porównanie okaże się trafne, wtedy oznacza się to jako cache hit, jeżeli porównanie jest nieprawdzie traktuje się to jako cache miss. Jeżeli nastąpi cache miss, wtedy zawartość z pamięci głównej jest kopiowana do pamięci cache. Kopiowanie z pamięci głównej do pamięci cache nazywa się cache line fill. W przypadku cache hit dane lub kod przenoszone są z pamięci cache do procesora. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 8 / 22
Relacje między pamięcią cache, a pamięcią główna Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 9 / 22
Cache trashing I Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 10 / 22
Pamięć cache z dodatkowymi modyfikacjami Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 11 / 22
Przykład pamięci cache w ARM940T 4 Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 12 / 22
Pomiar wydajności cache hit rate = ( cache hits memory requstes ) 100 Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 13 / 22
Writethrough Kiedy kontroler korzysta z zasad zapisu writethrough, dane które trafiają podczas zapisu do pamięci cache trafiają również do pamięci głównej, odbywa się to przy każdym zapisie, przez co działa to wolno. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 14 / 22
Writeback Kiedy kontroler korzysta z zasad zapisu writeback, dane są zapisywane do pamięci cache, a nie są zapisywane do głównej pamięci, przez co zawartość pamięci cache i głównej mogą się różnić. Zaleta takiego rozwiązania jest częste korzystanie ze zmiennych tymczasowych lokalnych w podprocedurach. Zmienne takie nie muszą być zapisywane do głównej pamięci, bowiem są one przezroczyste dla systemu z natury. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 15 / 22
Zastępowanie danych w liniach cache round-robin lub cykliczna - wybór następnej linii danych do podmiany danych. pseudolosowe - losowy wybór linii danych do podmiany danych. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 16 / 22
Polityka pamięci podręcznej Rdzeń Polityka zapisu Polityka nadpisywania Polityka lokacji ARM720T writethrough random read-miss ARM740T writethrough random read-miss ARM920T writethrough, writeback random, round-robin read-miss ARM940T writethrough, writeback random read-miss ARM926EJS writethrough, writeback random, round-robin read-miss ARM946E writethrough, writeback random, round-robin read-miss ARM10202E writethrough, writeback random, round-robin read-miss ARM1026EJS writethrough, writeback random, round-robin read-miss Intel StrongARM writeback round-robin read-miss Intel XScale writethrough, writeback round-robin read-miss, write-miss Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 17 / 22
Polityka alokacji na podstawie cache miss read allocate - alokuje linie cache podczas odczytu danych z pamięci, zawartość linii cache zapisywana jest do pamięci, a następnie wartość odczytana jest zapisywana do pamięci cache allocate - alokuje linie cache podczas odczytu/zapisu z/do pamięci pod warunkiem, ze jej zawartość nie znajduje się już w pamięci cache. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 18 / 22
Koprocesor 15 i pamięć podręczna Funkcja Pierwszy rejestr Drugie rejestry Opcode Clean and flush cache c7 c5, c6, c7, c10, c13, c14 0, 1, 2 Drain write buffer c7 c10 4 Cache lockdown c9 c0 0, 1 Round-robin replacement c15 c0 0 Flush cache oznacza wyczyszczenie pamięci podręcznej z jej zawartości, fizycznie następuje czyszczenie statusu valid. Clean cache oznacza wymuszenie zapisu linii o statusie dirty do głównej pamięci i wyczyszczenie statusu dirty. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 19 / 22
Flush cache Komenda Instrukcja MCR Wspierane rdzenie Flush cache MCR p15, 0, Rd, c7, c7, 0 ARM720T, ARM920T, ARM922T, ARM926EJ-S, ARM1022E, ARM1026EJ-S, StrongARM, XScale Flush data cache MCR p15, 0, Rd, c7, c6, 0 ARM920T, ARM922T, ARM926EJ-S, ARM940T, ARM946E-S, ARM1022E, ARM1026EJ-S, StrongARM, XScale Flush instruction cache MCR p15, 0, Rd, c7, c5, 0 ARM920T, ARM922T, ARM926EJ-S, ARM940T, ARM946E-S, ARM1022E, ARM1026EJ-S, StrongARM, XScale Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 20 / 22
Clean cache Komenda Instrukcja MCR Wspierane rdzenie Flush instruction cache line MCR p15, 0, Rd, c7, c5, 2 ARM926EJ-S, ARM940T, ARM1026EJ-S Flush data cache line MCR p15, 0, Rd, c7, c6, 2 ARM926EJ-S, ARM940T, ARM1026EJ-S Clean data cache line MCR p15, 0, Rd, c7, c10, 2 ARM920T, ARM922T, ARM926EJ-S, ARM940T, ARM946E-S, ARM1022E, ARM1026EJ-S Clean and flush data cache line MCR p15, 0, Rd, c7, c14, 2 ARM920T, ARM922T ARM926EJ-S, ARM940T, ARM946E-S, ARM1022E, ARM1026EJ-S Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 21 / 22
References Andrew Sloss, Dominic Symes, and Chris Wright. ARM System Developer s Guide: Designing and Optimizing System Software. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2004. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 22 / 22