Czy możemy uruchomić Linuksa w czymś szybszym niż RAM?


21

Jest to być może głupie pytanie i może być wynikiem nieporozumienia. Studiuję teraz procesory, a zwłaszcza pamięć. Właśnie czytałem o tym, jak szybsza jest pamięć SRAM niż DRAM, ale jest droższa. SRAM jest bardzo drogi: kupiłem trochę i znalazłem zasilaną baterią kartę SRAM z 16 MB za około 400 USD.

Niedawno znajomy wspomniał, że prowadzi Linuksa ze szczeniakami w pamięci RAM i że jest szybki. Zauważyłem jednak, że mały rdzeń linux może być jeszcze mniejszy ... tak mały jak 8 MB! To skłoniło mnie do myślenia: czy możemy uruchomić Linux w SRAM? Czy to pytanie jest nawet dobrze sformułowane?

Googlowanie tego pytania okazało się nieskuteczne, ale wywołało jeszcze więcej pytań. Czy można uruchomić Linuksa w pamięci podręcznej L3? Intel Core i7 może mieć pamięć podręczną L3 wystarczająco dużą, aby zmieścić 8 MB ... ale czy popełniam kategoryczny błąd? Jaka jest różnica między tym a „osadzonym” linuksem?

Oto pytanie: czy możemy uruchomić system Linux w pamięci SRAM lub L3 Cache? Czy jest coś szybszego? Jak szybko możemy linux !?

z.


3
Osadzone linuksy często działają na pamięci RAM lub pamięci nieulotnej. Osadzone linuksy często są po prostu usuwane, aby działały tylko na określonym sprzęcie lub używają mniej popularnych opcji jądra, takich jak małe opóźnienia
Journeyman Geek

2
Zastanawiam się, czy to pytanie ma jakieś praktyczne zastosowanie?
Robert Niestroj

4
+1 za użycie „linux” jako czasownika (w ostatnim zdaniu)!
Vorac

Odpowiedzi:


20

Linux lub inny system operacyjny nie wie, jak działa pamięć RAM. Tak długo, jak kontroler pamięci jest odpowiednio skonfigurowany (np. Ustawione częstotliwości odświeżania dla non-SRAM), system operacyjny nie dba o to, czy działa na zwykłej pamięci dynamicznej (zwykła pamięć RAM), szybkiej pamięci RAM w trybie strony (RAM RAM, z C64-ish razy), rozszerzony tryb wyjścia danych RAM (EDO), synchroniczna pamięć RAM (SDRAM), dowolna z podwójnej prędkości SDRAMS (DDR 1/2/3).

Wszyscy wspierają czytanie i pisanie z przypadkowych miejsc. Wszystko zadziała.

Teraz pamięć podręczna jest nieco inna. Nie musisz pisać do niego, aby zawartość się zmieniła. To przeszkadza. Mimo to jest w pewien sposób użyteczny. Wiem, że coreboot używa pamięci podręcznej jako pamięci podczas rozruchu, zanim kontroler pamięci zostanie poprawnie skonfigurowany. (Aby uzyskać szczegółowe informacje, obejrzyj filmy z rozmów o coreboot podczas FOSDEM 2011).

Więc teoretycznie tak, możesz go użyć.

ALE : W przypadku zadań praktycznych system z 1 GB „zwykłej” „średniej prędkości” pamięci będzie działał o wiele lepiej niż z zaledwie kilkoma MB superszybkiej pamięci. Co oznacza, że ​​masz trzy możliwości:

  1. Buduj rzeczy w normalny „tani” sposób. Jeśli potrzebujesz większej prędkości, dodaj kilkadziesiąt dodatkowych komputerów (wszystkie z „wolną” pamięcią)
  2. Lub zbuduj pojedynczy komputer z kilkanaście razy wyższą ceną i znacznie mniej niż kilkanaście razy większą wydajnością.

Z wyjątkiem bardzo rzadkich przypadków ten ostatni nie jest rozsądny.


6
Wiele procesorów obsługuje tryb „cache-as-RAM” poprzez rejestry specyficzne dla modelu procesora (MSR). Należy również pamiętać, że SRAM zużywa więcej energii niż DRAM i jest to również czynnik konstrukcyjny. Jeśli pamięć podręczna procesora jest wystarczająco duża lub jądro wystarczająco małe, możesz włączyć ten tryb pamięci podręcznej jako pamięci RAM i utrzymywać go w całości w SRAM na procesorze. Miałbyś jednak ograniczoną ilość pamięci RAM do uruchamiania programów itp. ponieważ pamięć podręczna AFAIK jako pamięć RAM i tryb normalny nie będą działać jednocześnie. Mogę się jednak mylić. Nawet gdyby tak się stało, większość szybkości procesora w dzisiejszych czasach wynika z użycia pamięci podręcznej L2, L3.
LawrenceC,

@Hennes, czy Linux dba tylko o (mapowane) adresy pamięci?
Alvin Wong,

SDRAM to synchroniczna pamięć D (ynamiczna) RAM, podczas gdy SRAM to statyczna pamięć RAM. Nie wiem, do którego chciałeś się odnieść w pierwszym akapicie i nie mam przedstawiciela, który mógłby wprowadzić „trywialne” zmiany, ale może mógłbyś to naprawić? Poza tym dobra odpowiedź.
CVn

Nie mam nic przeciwko wyjaśnianiu, ale nie jestem pewien, co chcesz wyjaśnić. Czy możesz to dodać w komentarzu, a ja go zmodyfikuję.
Hennes,

Kiedy po raz pierwszy przeczytałem ten komentarz, zobaczyłem: „Linux lub inny system operacyjny umiera, nie wiedząc, jak działa pamięć RAM”. Twój podział jest dobry: myślę, że nie miałem złudzeń, że byłoby to „lepsze”. Zastanawiałem się tylko, czy da się to zrobić.
Ziggy

8

Tak, możesz, i tak właśnie jest zrobione automatycznie. Najczęściej używane części pamięci RAM są kopiowane w pamięci podręcznej. Jeśli całkowite użycie pamięci RAM jest mniejsze niż rozmiar pamięci podręcznej (jak przypuszczasz), istniejący mechanizm buforowania skopiuje wszystko z pamięci RAM.

Jedyny moment, w którym pamięć podręczna zostanie skopiowana z powrotem do normalnej pamięci RAM, to przejście komputera w tryb uśpienia S3. Jest to konieczne, ponieważ pamięci podręczne są wyłączone w trybie S3.


1
Nie wszystkie można / zostaną skopiowane. W przypadku struktury pamięci podręcznej Intel / x86: Jeśli mam pamięć podręczną 256 KB i pamięć podręczną 1024 KB, mogę odczytać adres 0. Będzie on przechowywany w pamięci podręcznej w lokalizacji 0. Mogę następnie odczytać adres 1 i będzie on przechowywany w pamięci podręcznej w lokalizacji 1 Jednak jeśli odczytam adres z (256Kib + 1), będzie on również zapisany pod adresem 1 w pamięci podręcznej. Pamięć podręczna wykorzystuje dodatkową (znacznik) SRAM, aby wskazać, która z nich jest przechowywana. Oznacza to, że odczyt z wielokrotności wielkości pamięci podręcznej nie będzie działał dobrze. (Pamiętaj, że byłoby to rzadkie i zwykle można je zignorować).
Hennes,

To jest wnikliwe! Dlaczego miałbym niezdarnie wpychać to, co moim zdaniem jest ważne, do pamięci podręcznej L3, skoro mogłem pozwolić armii geniuszów na określenie optymalnej rzeczy do zrobienia i zaprogramować procesor, aby robił to optymalnie. Dobrze?
Ziggy

3

Wiele procesorów pozwala na użycie pamięci podręcznej jako pamięci RAM. Na przykład większość nowszych procesorów x86 może konfigurować niektóre regiony jako zapisy z zapisem bez uzupełniania przy odczytach przez MTRR. Można to wykorzystać do wyznaczenia regionu przestrzeni adresowej jako - efektywnie - pamięci podręcznej jako pamięci RAM.

Czy byłoby to korzystne, to kolejne pytanie - zablokowałoby jądro w pamięci RAM, ale jednocześnie zmniejszyłoby efektywny rozmiar pamięci podręcznej. Mogą również wystąpić skutki uboczne (takie jak wyłączenie buforowania dla reszty systemu), które spowodują, że będzie to znacznie wolniejsze.


2

„czy możemy uruchomić Linuksa w pamięci podręcznej L3?”

Nie , nie jest to możliwe, ponieważ pamięć podręczna nie jest adresowana bezpośrednio / liniowo.
Ze względu na sposób zaprojektowania pamięci podręcznej rejestr rejestru programowego procesora (IP) nie może wskazywać lokalizacji w pamięci podręcznej.

Pamięć podręczna procesora ma własną „asocjatywność”, która określa sposób, w jaki „normalna” pamięć jest „mapowana” na pamięć cache. Ta funkcja pamięci podręcznej jest jednym z powodów, dla których pamięć podręczna jest tak szybka.


1

„czy możemy uruchomić Linuksa w pamięci podręcznej L3?”

Nie, pamięć podręczna służy do przechowywania danych programu i instrukcji gotowych na wypadek, gdyby procesor ich potrzebował. System operacyjny i tak znajdziesz w pamięci podręcznej, ponieważ jest stale używany. Ładowanie całego systemu operacyjnego do pamięci podręcznej nie jest wydajne, ponieważ nie używasz wszystkich ścieżek kodu w jądrze jednocześnie.

„czy możemy uruchomić Linux w SRAM?”

Z pewnością można użyć SRAM z podtrzymaniem bateryjnym jako partycji rozruchowej, a następnie można użyć wbudowanej flagi execute na miejscu. Może to prowadzić do szybszych czasów uruchamiania i nieco szybszych operacji. Jednak głównym czynnikiem jest przepustowość między pamięcią podręczną L3 a miejscem, w którym znajduje się jądro (dysk rozruchowy lub pamięć RAM).

„Czy jest coś szybciej? Jak szybko możemy linux !?”

Zasadniczo producenci sprzętu i programiści systemów operacyjnych pracują nad tym, aby przetwarzanie było jak najszybsze. Jednak twoje pytanie jest bardzo ogólne: czy chcesz przyspieszyć rozruch, zoptymalizować dostęp do systemu plików, przyspieszyć obliczenia lub coś innego. Gdy masz bardziej szczegółowe pytanie, z pewnością możesz zacząć szukać wąskiego gardła i go usunąć. Napęd SRAM z pewnością przyspieszy proces rozruchu. Bardzo fajnie byłoby dostać się do GUI w 3 sekundy.


1

W czasach 486 istniały maszyny, w których cała pamięć RAM była SRAM. Wróciło, gdy 8 MB było dużo, ale wydaje się pasować do twoich ograniczeń. Jestem pewien, że 8 MB pamięci SRAM jest teraz znacznie tańsze niż wtedy.

Możesz więc uruchomić Linuksa w SRAM, jeśli maszyna została stworzona w ten sposób. To nie jest teoria; zostało zrobione.

Ale nie w pamięci podręcznej. Pamięć podręczna jest podłączona inaczej, a co ważniejsze inaczej adresowana. Nie możesz rozwiązać tego samego. Fragmenty są odwzorowywane w różny sposób, a nie jako fragment ciągły. A zawartość niekoniecznie jest tym, co widzisz na dysku - nowsze układy Intela wykonują swego rodzaju „kompilację” w samą porę (bardziej jak ponowne kodowanie CISC => RISC-mikro-op), gdzie mikro-operacje to rzeczy które kończą się w pamięci podręcznej. Krótko mówiąc, tym, co znajduje się w pamięci podręcznej, nie jest twój program, ale zmieniony widok, więc nie można go używać jako reprezentacji pamięci programu.

Pytanie brzmi dlaczego. Poza „ponieważ mogę” nie ma tego wiele powodów. System pamięci podręcznej zapewnia największe korzyści prędkości przy znacznie niższych kosztach. I pamiętaj, że koszt to nie tylko dolary ... SRAM wymaga więcej tranzystorów, co oznacza więcej energii elektrycznej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.