memmap
Jest ten samouczek zatytułowany: Zła pamięć HowTo, który omawia wyłączanie pamięci przez jądro za pomocą memmap
argumentu do jądra. Zgodnie z howto masz 2 opcje, jeśli chodzi o memmap
:
- Wyłącz wszystko po złej pamięci -
(mem=###M option)
- Wyłącz tylko pamięć wokół złej pamięci -
(memmap=#M$###M option)
W przypadku pierwszej opcji, jeśli memtest zgłosi, że pamięć ma 600 m pamięci, możesz wyłączyć pamięć RAM od tego momentu aż do końca pamięci RAM w ten sposób:
mem=595M
Jeśli jest zła pamięć RAM przy 802M i 807M, możesz wyłączyć sekcję 10M RAM zaczynając od 800M w następujący sposób:
memmap=10M$800M
UWAGA: Spowoduje to umieszczenie na czarnej liście 10M po adresie podstawowym 800M. memtest86+
Następnie należy uruchomić, aby potwierdzić, że ten argument jest poprawny.
BadRAM
Dla Ubuntu dostępna jest łatka o nazwie BadRam. Jest bardzo dobrze omówione w tym poście zatytułowanym: BadRAM na stronie społeczności Ubuntu.
Po zastosowaniu łaty do jądra przy użyciu szczegółów z tej strony wprowadzasz zmiany w konfiguracji Grub2:
fragment z tej strony dla Grub2
Plik konfiguracyjny GRUB2 w Natty zawiera wiersz służący do konfigurowania wykluczeń złych pamięci RAM jądra. Zakładam więc, że jest to preferowany sposób mapowania części pamięci, w której wyświetlane są błędy. Ustawiłem linię
GRUB_BADRAM = "0x7DDF0000,0xffffc000"
Sugerowanym sposobem na każdej stronie internetowej, jaką mogłem znaleźć, było ustawienie memtest86 i pokazanie ustawień BadRAM. memtest86 dał mi stronę z materiałami, do których musiałbym wejść. Widziałem, że wszystkie adresy były w jednym bloku 16K, więc chciałem po prostu zmapować ten blok 16K z działania. Oto jak wygenerowałem poprawny wpis.
Pierwszy parametr jest łatwy. To jest podstawowy adres złej pamięci. W moim przypadku widziałem, że wszystkie złe adresy były większe niż 0x7DDF0000 i mniejsze niż 0x7DDF4000. Tak więc jako adres początkowy wziąłem początek bloku 16K.
Drugi parametr to maska. Wstawiasz jedynki, w których zakres adresów ma takie same wartości, a jedynki, gdzie będą się różnić. Oznacza to, że musisz wybrać zakres adresów tak, aby różniły się tylko bity niskiego rzędu. Patrząc na mój adres, pierwsza część maski jest łatwa. Chcesz zacząć od 0xffff. Do następnego kęsa wyjaśnię mapami bitowymi. Chcę mieścić się w zakresie od 0000 do 0011. Zatem maska dla badramu wynosiłaby 1100 lub heks c. Ostatnie 3 skrypty muszą mieć w masce wszystkie zera, ponieważ chcemy zmapować cały zakres. Tak więc otrzymujemy całkowity wynik 0xffffc000.
Po ustawieniu tej linii w / etc / default / grub, uruchomiłem sudo update-grub i zrestartowałem i moja zła pamięć nie była już używana. Żadne poprawki jądra nie są potrzebne do mapowania złej pamięci przy użyciu tej metody.
Kontynuacja # 1
Przeglądając stronę wikipedia dla memtest86 +, czytamy:
fragment strony Wikipedii Memtest86
Począwszy od Memtest86 2.3 i Memtest86 + 1.60, program może wypisać listę uszkodzonych regionów RAM w formacie oczekiwanym przez łatkę BadRAM dla jądra Linux; wykorzystując te informacje, system Linux może niezawodnie korzystać z modułu pamięci RAM, nawet jeśli ma kilka wadliwych bitów. Grub2 jest w stanie dostarczyć te same informacje do niezałatowanego jądra, co eliminuje potrzebę łatki BadRAM.
Natknąłem się również na tę stronę Gentoo, w której podano memmap=...
adres heksadecymalny, więc możesz podać go następująco:
memmap=5M$0x2f796c48
5M to tylko przypuszczenie, oczywiście możesz dostosować go niżej lub wyżej, w zależności od ilości pamięci RAM w tym regionie, którą chcesz / musisz pominąć.
Na koniec możesz również określić rozmiar szesnastkowy:
memmap=0x10000$0x2f796c48
Zignoruje 64KB zaczynające się pod adresem 0x2f796c48.
Referencje