Hirdetés

Új hozzászólás Aktív témák

  • XMI

    csendes tag

    válasz fatpingvin #3 üzenetére

    Nem, nem volt egyszerű megmondani az x86-os ring0-ban látott "physical" addressből.
    Már azt sem triviális megmondani (ha nincs ECC és EDAC - desktopon általába nem szokott lenni), hogy melyik modul az érintett.
    Daniel Gruss-ék (akik a Rowhammer és a Meltdown/Spectre sebezhetőségeket felfedezték) írtak egy cikket, amiben visszafejtették az Intel Core processzorokban az x86-os "fizikai" címek tényleges fizikai memóriamodul címekre leképezését: [link]
    Messze nem egy-az-egyben megy a címbitek leképezése, és generációról-generációra az Intel mindig változtatott egy kicsit a logikán. Ennek a pontos műszaki indokát nem lehet tudni, de bizonyára volt valami ráció mögötte. Függ a leképezés a többcsatornás interleaving beállítástól is, a modulok méretétől (aszimmetrikus esetre is más leképezés van). Ez az egész természetesen hivatalosan dokumentálatlan volt.

    Réges-régen 1-2 chipset esetén még ismert volt ilyen szinten a memóriavezérlő működése, például Intel 440BX-re volt tool, ami képes volt a regiszterekből kiolvasni, hogy az egyes memóriamodulok pontosan hova vannak leképezve a processzor címtartományába. Nyilván akkoriban még lényegesen egyszerűbb volt az egész működés, nem volt több csatorna, stb.

    Ha már a címből a memóriamodul azonosítva van, még mindig problémás az érintett IC beazonosítása. Az adatbiteknél is szintén lehetnek nemtriviális leképezések a processzor memóriavezérlőjében. Lévén, hogy a memóriamodult nem rakod át egyik gépből a másikba úgy, hogy az adatok meg is maradjanak közben ezért semmi nem kötelezi a gyártót, hogy egy szabványos leképezést használjon. (Kishibás memóriavezérlős processzorok gyári harvestelése is elvileg lehetséges, ha a gyártó eleve úgy tervezi meg, hogy az ECC miatti kihasználatlan kilencedik 8-bites blokkal helyettesíteni tudja a hibás 8 bites blokkot. Ez szintén belezavarhat a bitek sorrendjébe.)

    És akkor még ott van az a probléma, hogy a memóriamodul gyártója hogy drótozta be a chipeket. Nyilván egy 8 chip-es modulon a [0..7]-es bit valószínűleg a legszélső IC lesz, mert akkor lehet legrövidebb vezetékekkel bekötni de a több rank-es memóriamoduloknál már eltérések lehetnek, hogy melyik rank fizikailag hova kerül. Registered memóriamodulnál a buffer IC is közben van, ami szintén megvariálja a vezetékezést.

    Nem egyszerű feladat, és vannak kétségeim, hogy az új memtest86 minden esetben képes-e helyes eredményt mutatni. Mint ahogy egyébként láttam már szerverben az EDAC-ot is durván mellélőni (volt olyan hibás memóriamodullal dolgom, sajnos többel is, amit ha betettél a gépbe, akkor 3 másik modult jelzett hibásnak, csak pont azt nem, amelyik a bajt okozta).

Új hozzászólás Aktív témák