Ten z Was, kto poświęcił choćby najmniejszą ilość czasu na poszukiwanie informacji o technologiach wbudowanej pamięci masowej, wie o tym: podprzestrzeń Internetu poświęcona temu konkretnemu tematowi jest zalana krótkimi artykułami porównującymi technologie NOR i NAND flash. Niektóre z nich są bardzo dobrze napisane i naprawdę pouczające. Jednak zbyt często samo nagromadzenie nijakich, suchych, pozbawionych kontekstu treści sprawia, że chce się więcej. Chyba że, być może, nie ma nic więcej? Chyba że te kilka kawałków obficie powtarzanego materiału to wszystko, co jest do poznania? My tak nie uważamy.
Trzeci artykuł z naszej serii wprowadzającej (Zobacz część 1 i część 2) na temat pamięci flash jest naszą własną wersją klasyki „NOR kontra NAND”. Wersja, która, miejmy nadzieję, zwiększy Twoje zrozumienie tych szeroko rozpowszechnionych technologii pamięci masowych i pomoże Ci podejmować lepsze decyzje projektowe. Artykuł ten nie jest dydaktycznym, samodzielnym, wprowadzającym tekstem. Jest to raczej uzupełnienie zwykłego wprowadzenia, obejmujące aspekty technologii NOR i NAND flash, które naszym zdaniem są zbyt często ignorowane. Jeśli jesteś zupełnie nowy w technologiach NOR i NAND flash, możesz najpierw przejrzeć bardziej neutralne materiały, takie jak artykuły Wikipedii na ten sam temat. Z drugiej strony, jeśli posiadasz już obszerną wiedzę na temat tych technologii, nadal możesz znaleźć w tym artykule przydatne (a może nawet zaskakujące) informacje.
Poza liczbami
Tabela 1 to porównanie technologii NOR i NAND flash oparte na różnych wskaźnikach wydajności. Chociaż liczby te mogą się znacznie różnić w rzeczywistych urządzeniach, są one wiarygodne i mogą służyć jako cenny punkt odniesienia.
NOR | NAND | ||
---|---|---|---|
Przepustowość zapisu | 1 MB/s | 1 MB/s | 10 MB/s |
Read Throughput | 40 MB/s | 30 MB/s | |
Erase Throughput | 0.1 MB/s | 300 MB/s | |
Erase-Write Throughput | 100 KB/s | 10 MB/s | |
Read Granularity | Byte | Page (4KiB typical) | |
Write Granularity | Byte (typowo) | Page (4 KiB typowo) | |
Erase Granularity | Block (64 KiB typowo) | Blok (256 KiB typowo) | |
Zużycie energii przy zapisie | 1uJ/bajt | 10nJ/bajt | |
Zużycie energii odczytu | 1nJ/bajt | 1nJ/bajt | |
Zużycie energii kasowania | 600nJ/bajt | 0.2nJ/bajt |
Tabela 1. Prawdopodobne charakterystyki NOR i NAND flash
Ale tak użyteczne, jak są, liczby bez właściwej interpretacji są bez znaczenia, jeśli nie wręcz mylące. Surowe liczby wydajności stanowią dobry materiał marketingowy, ponieważ są łatwe do podania i zrozumienia (przynajmniej powierzchownie), ale nie niosą ze sobą wielu istotnych informacji z punktu widzenia projektowania aplikacji.
Zilustrujmy, co mamy na myśli, na konkretnym przykładzie: wydajności zapisu. Tabela 1 sugeruje, że zapis jest znacznie szybszy na NAND niż na NOR. W rzeczywistości, jest to twierdzenie, które pojawia się zbyt często. Oczywiście, jest w nim trochę prawdy. Ale jest również całkowicie redukcyjne i toruje drogę do złych decyzji projektowych. Przyjrzyjmy się temu bliżej.
NOR flash umożliwia dostęp do zapisu na poziomie bajtów. NAND, z drugiej strony, ma znacznie większą ziarnistość zapisu. W przypadku pamięci NAND flash, dane mogą być zapisywane tylko w stronach, zazwyczaj 4 KiB na raz dla NAND SLC (8 KiB lub więcej dla NAND MLC). W przypadku małego dostępu do zapisu (powiedzmy 512 bajtów), cała strona musi zostać załadowana do pamięci RAM, zmodyfikowana i zapisana z powrotem. W efekcie końcowym więcej danych jest zapisywanych niż faktycznie modyfikowanych. Zjawisko to jest powszechnie określane jako write amplification. W naszym (bardzo prawdopodobnym) przykładzie, wzmocnienie zapisu wynosi 8 (4 KiB strony/512-bajtowy dostęp). W przypadku obciążenia zdominowanego przez tak małe dostępy, efektywna przepustowość zapisu spadłaby 8-krotnie. To dość dużo. Ale jest tego więcej.
Zanim dane mogą zostać zapisane, system plików (lub baza danych) musi je najpierw odnaleźć. Proces wyszukiwania może być mniej lub bardziej wydajny w zależności od systemu plików i ilości dostępnej pamięci podręcznej, wśród innych czynników. Mimo to, każdy dostęp do zapisu zazwyczaj wiąże się z odpowiednią liczbą dostępów do odczytu. W przypadku pamięci NOR flash, dostęp do odczytu jest bardzo szybki. Charakteryzują się opóźnieniami bliskimi zeru i bardzo wysoką przepustowością. Co najważniejsze, dostęp do odczytu jest wykonywany na poziomie bajtów. Jest to szczególnie korzystne dla procesu wyszukiwania danych, ponieważ wewnętrzne struktury systemów plików zwykle składają się z małych i rozproszonych fragmentów danych.
Z drugiej strony, losowe dostępy do odczytu na NAND flash są znacznie wolniejsze. I podobnie jak dostępy do zapisu, są one wykonywane na poziomie strony. W przypadku małych dostępów prowadzi to do pewnych strat, ponieważ i tak musi zostać załadowana cała strona. Ten dodatkowy narzut, określany jako wzmocnienie odczytu, ogranicza wydajność zapisu na NAND, co nie jest od razu oczywiste, gdy spojrzymy na tabelę 1.
Połączone razem, widzimy, że odpowiednie wydajności zapisu netto (tj. uwzględniające wzmocnienie odczytu/zapisu i narzut wyszukiwania) technologii NOR i NAND nie różnią się tak bardzo, jak wydają się wskazywać liczby. Najważniejsze jest to, że dokładna ocena wydajności nie może być przeprowadzona bez uwzględnienia wzorców dostępu do aplikacji, w tym wielkości dostępu i rozkładu na cały zestaw danych.
Trawa jest zielona, niebo jest niebieskie, NOR jest dla kodu, NAND jest dla danych
Czasami słyszymy błędne przekonanie, że NOR flash jest dla kodu, a NAND flash dla danych. Prawdą jest, że NOR flash jest częściej używany do przechowywania kodu niż NAND flash. Dzieje się tak z dwóch głównych powodów. Po pierwsze, granularność dostępu na poziomie bajtów pozwala na wykonywanie kodu w miejscu, co jest niezaprzeczalnym atutem dla małych systemów wbudowanych. Po drugie, dla małych i średnich rozmiarów firmware’u (powiedzmy poniżej 64Mbitów), NOR ma po prostu większy sens ekonomiczny, ponieważ najmniejsze dostępne urządzenia NAND są znacznie droższe.
To powiedziawszy, wielu naszych klientów używa NOR flash do przechowywania danych. I nie bez powodu. W przypadku aplikacji intensywnie korzystających z odczytu, NOR oferuje znacznie wyższą przepustowość niż NAND. Nawet w przypadku aplikacji o dużym obciążeniu zapisem, NOR może być rozsądnym wyborem. Dzięki dostępowi na poziomie bajtów i wysokiej przepustowości odczytu, NOR szczególnie dobrze nadaje się do zastosowań zdominowanych przez małe, losowe zapisy. Do punktu, w którym wydajność zapisu netto może zbliżyć się do wydajności uzyskiwanej na NAND flash (a czasem nawet ją przekroczyć). Jest to szczególnie istotne w przypadku małych zbiorów danych, gdzie argumenty ekonomiczne zdecydowanie przechylają szalę na korzyść NOR flash.
Chcesz więcej?
To, co opisaliśmy w tym artykule, to zaledwie wierzchołek góry lodowej. Mamy jednak nadzieję, że pokazaliśmy, czym różnią się technologie NOR i NAND flash z perspektywy projektowania aplikacji i jak można interpretować surowe liczby wydajności, aby podejmować lepsze decyzje projektowe.
Jeśli chcesz dowiedzieć się więcej o technologiach NOR i NAND flash, ocenie wydajności i innych zaawansowanych tematach związanych z pamięcią masową, Podręcznik użytkownika TREEspan zawiera wiele informacji, zarówno ogólnych, jak i specyficznych dla systemu plików TREEspan File System (TSFS).