Тестируем память с помощью Memtest86+ и VirtualBox

в 14:50, , рубрики: linux, virtualbox, виртуализация, тестирование, метки: ,

По роду деятельности приходится иметь дело с железом, с большим количеством компьютеров разной конфигурации, и, в частности, заниматься их тестированием. Естественно, хочется чтобы этот процесс был автоматизирован на сколько возможно. Для этих целей я использую бездисковую загрузку линукс через PXE, на котором подготовлены к автозапуску соответствующие скрипты с разными тестами, демоны следят за состоянием системы, а мониторинг на сервере показывает результаты и ругается, если что-то не так. Тестируем память с помощью Memtest86+ и VirtualBoxВ общем-то, всем можно быть довольным, но процесс проверки оперативной памяти никогда мне не нравился. Нативный для линукса memtester, субъктивно, работает слишком долго, прежде чем что-то найдет, да и находит далеко не всегда. Собрать ядро или поиграться с архивами — неплохой способ проверить систему на стабильность, но в глюках не всегда бывает виновата память. А самым действенным способом, в конечном счете, является старый добрый Memtest86. Но с ним необходимо следить за каждым компьютером по отдельности, теряется весь поцесс автоматизации, а когда компьютеров слишком много, то начинает поджимать и время. К сожалению, обделен всякими хитрыми kvm'ами.

Размышляя над этим, я обратил свой взгляд на виртуализацию. Почему бы не попробовать? Хотя бы just for lulz. Память ведь используется таже самая.

Для этих целей в VirtualBox создаем виртуальную машину самой простой конфигурации: без сети, без жестких дисков, только CD-ROM куда подключается образ с MemTest. Создаем с помощью GUI или в консоли:

VBoxManage createvm --name memtest --ostype Linux --register

Подключаем к нашей машине загрузочный образ с Memtest. Я использовал бету пятой версии, скачать можно с официального форума.

VBoxManage storagectl memtest --name "IDE Controller" --add ide
VBoxManage storageattach memtest --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium /home/user/mt500b1.iso

Перед самым запуском вычищаем кеш линукса из памяти:

sudo sync
sudo echo 3 > /proc/sys/vm/drop_caches

Решаем сколько свободной памяти отдадим под проверку, а сколько оставим под нужды операционной системы:

a=`free -m | grep "cache:" | awk {'print $4'}`
b=$(($a*20/100))
free=$(($a - $b))

Если памяти оставить слишком мало, линукс начинает вести себя нестабильно, тем более бездисковая система, где нет свопа.

Пятая версия мемтеста поддерживает многоядерность, воспользуемся этим и отдадим под тест сколько не жалко:

cpus=$((`lscpu | grep "Core(s) per socket:" | awk {'print $4'}`*`lscpu | grep "Thread(s) per core:" | awk {'print $4'}`-1))
if [ $cpus -lt 1 ]; then
cpus=1
fi 

Вносим соответствующие изменения в машину:

VBoxManage modifyvm memtest --memory $free --cpus $cpus --ioapic on

И запускаем в фоне в консольном режиме:

VBoxManage startvm memtest --type headless

Выключить виртуальную машину можно командой:

VBoxManage controlvm memtest poweroff 

За состоянием теста следим с помощью отладчика VirtualBox:

VBoxManage debugvm memtest info vgatext

Пример вывода в терминал:

Скрытый текст
--------------------------------------------------------------------------------
      Memtest86+ 5.00b1     | Intel(R) Pentium(R) CPU G620 @ 2.60GHz            
CLK: 2600 MHz  (X64 Mode)   | Pass 10% ###                                      
L1 Cache:   64K  39386 MB/s | Test  4% #                                        
L2 Cache: 6144K  50971 MB/s | Test #6  [Moving inversions, random pattern]      
L3 Cache:  None             | Testing:    0K -   32M     32M of 1853M           
Memory  : 1853M  14939 MB/s | Pattern:   e2e5e6e8       R   | Time:   0:00:16   
------------------------------------------------------------------------------  
Core#: 0                               | RAM: 0   MHz (DDR3-  0) - BCLK: 650    
State: -                               | Timings: CAS 0-0-0-0 @ 64-bit Mode     
Cores:  1 Active /  1 Total (Run: All) | Pass:       0        Errors:      0    
------------------------------------------------------------------------------  
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                     S. S.                                      
(ESC)exit  (c)configuration  (SP)scroll_lock  (CR)scroll_unlock                 
--------------------------------------------------------------------------------

Теперь достаточно распарсить вывод в терминал любым удобным способом, чтобы узнать время, количество проходов, найденные ошибки, и другую интересную информацию. И соответственно написать под это дело управляющие скрипты, ради чего все и задумывалось.

Например, у меня при наличии ошибки в лог пишется «снимок» экрана, а на сервер отправляется соответствующее предупреждение:

if [[ `VBoxManage debugvm memtest info vgatext | grep Errors: | awk {'print $13'}` > 0 ]];then 

	"$path"/sendmess flog "`VBoxManage debugvm memtest info vgatext`"
	"$path"/sendmess nonstoperr "[error] Memtest"
	sleep 15
fi

Я запустил это дело тестироваться на нескольких компьютерах с не самой качественной памятью, и результат не заставил себя долго ждать:

Скрытый текст

--------------------------------------------------------------------------------
      Memtest86+ 5.00b1     | Intel(R) Core(TM) i3-2130 CPU @ 3.40GHz           
CLK: 3383 MHz  (X64 Mode)   | Pass  7% ##                                       
L1 Cache:   64K  51253 MB/s | Test 77% ##############################           
L2 Cache: 6144K  51253 MB/s | Test #5  [Moving inversions, 8 bit pattern]       
L3 Cache:  None             | Testing: 2048M - 3042M    994M of 3042M           
Memory  : 3042M        MB/s | Pattern:   80808080           | Time:   0:00:38   
------------------------------------------------------------------------------  
Core#: 012                             | RAM: 0   MHz (DDR3-  0) - BCLK: 845    
State: ---                             | Timings: CAS 0-0-0-0 @ 64-bit Mode     
Cores:  3 Active /  3 Total (Run: All) | Pass:       0        Errors:        2  
------------------------------------------------------------------------------  
                                                                                
Tst  Pass   Failing Address          Good       Bad     Err-Bits  Count CPU     
---  ----  -----------------------  --------  --------  --------  ----- ----    
  3     0  0004396be2c -  1081.6MB  02020202  02020206  00000004      1   1     
  3     0  0004396bd3c -  1081.6MB  02020202  0202020a  00000008      2   1     
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
(ESC)exit  (c)configuration  (SP)scroll_lock  (CR)scroll_unlock                 
--------------------------------------------------------------------------------

Для подтверждения, перезапускаю Memtest в нормальном режиме:

действиетльно, есть ошибка

Тестируем память с помощью Memtest86+ и VirtualBox

Способ на удивление работает. Поэтому использую его для себя наравне с другими. Таким образом получилось выявить уже много планок памяти с ошибками.

Плюсы:

  • Это старый добрый Memtest с радующим глаз интерфейсом.
  • Возможность полной автоматизации его работы.
  • Имеем соответсвующую эффективность.

Есть конечно и минусы:

  • Память не тестируется полностью, а только ее часть.
  • Этот способ сам по себе может привести к нестабильной работе системы. Редко, но бывает, к сожалению.

Надеюсь, кто-то найдет статью полезной. Ну, или по крайней мере улыбнется.

Автор: rommas

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js