Salah satu skenario kegagalan server yang umum adalah DRAM buruk, kadang-kadang bahkan ketika memori ECC digunakan.
memtest86+
adalah salah satu alat yang paling berguna untuk mendiagnosis masalah DRAM. Saat memuat sendiri di awal memori, saya sudah bertanya-tanya apakah memtest86+
memeriksa bagian dari memori yang memtest86+
dimuat ke.
Apakah memori dialokasikan memtest86+
sedemikian kecil sehingga tidak masalah, atau mungkinkah ada yang memtest86+
kehilangan DRAM karena tidak dapat menguji lokasi memori tempat ia berada?
Jawaban:
Jelas, memtest86 + tidak dapat menguji wilayah memori yang saat ini berisi kode yang dapat dieksekusi memtest86 + (tetapi jika ada kesalahan memori di wilayah itu, sangat mungkin bahwa tes itu sendiri akan crash). Namun, memtest86 + dapat memindahkan kode sendiri ke alamat yang berbeda saat runtime, dan dengan menggunakan trik ini, ia dapat menguji semua memori yang diizinkan untuk digunakan oleh firmware (BIOS) - tidak semuanya sekaligus.
Relokasi kode ini dijelaskan dalam README.background di dalam arsip kode sumber memtest86 + (file sedikit kedaluwarsa - misalnya, menyatakan bahwa alamat yang digunakan untuk kode memtest86 + adalah 0x2000 dan 0x200000, tetapi alamat rendah seperti yang didefinisikan dalam sumber adalah sebenarnya 0x10000, dan alamat tingginya adalah 0x2000000 atau 0x300000 tergantung pada jumlah memori di mesin).
Tetapi bahkan dengan trik relokasi ini memtest86 + tidak dapat menguji semua memori karena alasan berikut:
Biasanya firmware (BIOS) cadangan beberapa daerah RAM untuk penggunaannya sendiri (misalnya, tabel ACPI). Sementara wilayah RAM ini dapat diakses oleh CPU, menulis apa pun ke dalamnya dapat mengakibatkan perilaku yang tidak terduga.
Beberapa bagian dari RAM digunakan untuk Mode Manajemen Sistem dan bahkan tidak dapat diakses dari CPU di luar kode SMM istimewa.
Kisaran alamat RAM antara 640K dan 1M tidak dapat diakses karena kebiasaan tata letak memori PC lama (sebagian RAM ini dapat digunakan sebagai bayangan untuk ROM BIOS dan untuk SMM, bagian lain mungkin sepenuhnya tidak dapat diakses).
sumber
Tidak, memtest tidak dapat menguji ingatannya sendiri. Namun, ini sangat kecil (hanya beberapa KB) sehingga sulit. EDIT: pernyataan ini salah karena, sebagaimana dinyatakan dalam jawaban yang dipilih, memtest dapat secara dinamis memindahkan dirinya untuk menguji semua memori yang dapat dialamatkan pengguna.
-
Secara teori, prosesor modern dapat, pada saat boot, mengkonfigurasi sebagian dari cache mereka sebagai memori yang dapat diprogram, dari dalam program yang sangat kecil (seperti memtest) dapat dijalankan tanpa menyentuh DRAM sama sekali.
Namun, ini adalah fitur khusus model (yang memerlukan dukungan BIOS) dan saya tidak berpikir memtest menggunakannya.
sumber
memtest
sedang menguji cache CPU juga. Jadi jikamemtest
akan dimuat ke dalam cache ini, maka apakah ini bagian dari cache tidak dapat diuji, yang lebih bermasalah, karena jauh lebih kecil daripada memori?