Тема: Битая память (RAM) и vm.blacklist
Здравствуйте !
У меня битая, испорченная память.
Если в BIOS включить полный тест памяти, то при загрузки компьютера появляется сообщение "Memory fail".
Запуск теста памяти Memtest-86 показывает ошибки по четырям адресам.
Узнал что в FreeBSD имеется возможность исключения адресов из использования.
Нашёл такое сообщение в www.opennet.ru :
17.04.2005 21:12 Использование дефектных блоков памяти в FreeBSD
В CVS дерево FreeBSD включен код, позволяющий использовать FreeBSD на машинах имеющих частично поврежденные модули памяти.
Сбойные области определяются при помощи memtest и исключаются из адресного пространства VM используя sysctl переменную vm.blacklist.
-------------------------------------------------------------------
Попытался на другом компьютере c нормальной памятью в виртуальной компьютере (VirtualBox) настроить переменную vm.blacklist чтобы потом подключить винчестер своего компьютера и настроить свою FreeBSD.
-------------------------------------------------------------------
У меня FreeBSD 7.0-RELEASE (три CD).
Загружался с ядром Generic :
# uname -a
FreeBSD 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008
[email protected]:/usr/obj/usr/src/sys/GENERIC i386
-------------------------------------------------------------------
Как оказалось просто так переменная vm.blacklist не включается. Появляется такая ошибка :
# sysctl vm.blacklist
sysctl: unknown oid 'vm.blacklist'
-------------------------------------------------------------------
В настройках ядра для компиляции в /usr/src/sys/i386/conf/ не нашёл никаких слов blacklist.
В source коде ядра в файле /usr/src/sys/vm/vm_pageq.c есть место использования vm.blacklist :
list = getenv("vm.blacklist");
Функция getenv ("man getenv") возвращает значения из Environment Variables List.
В функции vm_page_blacklist_lookup есть такой вызов функции strtoq :
bad = strtoq(pos, &cp, 0);
На основании "man strtoq" выяснил что адреса для переменной vm.blacklist могут быть указаны в шестнадцатиричном виде "0x12345678" и десятичном.
Также в этом файле указано что если адрес страницы памяти указан правильно то должно появиться сообщения типа "Skipping page with pa 0x".
Как я понял в качестве чисел переменной vm.blacklist нужно указывать номера страниц памяти.
В x86 компьютерах адрес страницы равен 4 килобайтам. Отсюда вывел что адрес
HEX A98B5C = Dec 11111260
11111260 / 4048 = 2744,8764822134387351778656126482
т.е. страница памяти 2744
(Адрес HEX A98B5C находится в районе 10.5 MB.)
-------------------------------------------------------------------
Если в /boot/loader.conf указать
vm.blacklist="2744"
то никаких сообщений вообще не заметил !!!
Если в /boot/loader.conf указать
set vm.blacklist="2744"
даёт ошибку до появления загрузочного меню :
Warning: syntax error on file /boot/loader.conf
set vm.blacklist="2744"
^
Если в /boot/loader.conf указать
kernel_options="vm.blacklist=2744"
ничего не даёт.
Если в /etc/rc.conf указать vm.blacklist=2744
то при загрузке множесто раз пишется :
vm.blacklist=2744: not found
Искал сообщения с помощью таких команд :
dmesg | grep skip
dmesg | grep blacklist
cat /var/log/messages | grep skip
cat /var/log/messages | grep blacklist
-------------------------------------------------------------------
Только не надо предложений купить новую память. :evil:
Если в операционной системе есть определённая функция то она должна быть использована. :!:
Просто надо разобраться как её использовать.
Куда надо указывать vm.blacklist ? :?:
Как же назначать переменную vm.blacklist ? :?: