Меню Рубрики

Тест памяти в linux

Ubuntu — оперативная память: проверка, тип, объем

Оперативная память (ОЗУ — оперативное запоминающее устройство или RAM — Random Access Memory ) — это та память, в которой хранятся исполняемые процессором программы — машинный код, файлы и любые данные для оперативной работы с ними, она энергозависима, то есть очищается при перезапуске или выключении ПК. При сохранении файла, после оперативной работы с ним, происходит его запись в ПЗУ — постоянное запоминающее устройство — жесткий диск или любой другой энергонезависимый накопитель.

От объема «оперативки» зависит количество программ или же, например, вкладок браузера, которые могут быть запущены одновременно в системе. Что интересно: при переходе компьютера в режим сна операционная система записывает весь массив данных, содержащихся в ОЗУ, в полном объеме (дамп) на жесткий диск, а после пробуждения эти данные возвращаются в «оперативку». Именно поэтому после выхода из режима сна мы получаем рабочее окружение с уже запущенными программами, которые были активны перед переходом в режим гибернации (сна).

Исходя из вышенаписанного следует вывод, что ОЗУ — важная часть компьютера, к информации о которой необходимо иметь доступ любому пользователю системы Ubuntu. Поэтому сегодня мы рассмотрим такие вопросы, как:

  • Сколько доступно свободной оперативной памяти и каков ее полный объем
  • Какой тип у установленной оперативной памяти
  • Есть ли ошибки в оперативной памяти

Команды в статье приведены для исполнения их в терминале Ubuntu — Как открыть терминал

Объем оперативной памяти

Для того, чтобы получить информацию об общем объеме и количестве занятой/доступной памяти мы воспользуемся командой free с флагом -h поскольку при обычном выводе данной команды вывод объема производится в килобайтах, что не совсем удобочитаемо для пользователя. Флаг -h позволит отображать количественные единицы объема в мегабайтах и гигабайтах.

Исполним в терминале команду:

Вывод команды free -h в терминале Ubuntu

Как мы можем видеть — вывод команды дополнен, помимо данных об объемах ОЗУ, еще и информацией о файле подкачки. При необходимости данную команду можно использовать и для мониторинга за количеством оперативной памяти в реальном времени. Для этого нужно добавить к флагу -h еще один: -s [секунды]. Как аргумент к данному флагу указывается время в секундах, через которое следует обновлять информацию о состоянии памяти:

Вывод будет следующим:

Мониторинг ОЗУ через терминал

Обновленные данные в нашем примере будут выводиться каждые три секунды. Для того, чтобы закончить вывод данных в терминал следует нажать сочетание клавиш CTRL+C.

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

  • Mem – физическая память
  • Swap – виртуальная память
  • total – общий объем ОЗУ
  • used – кол-во занятой памяти
  • free – свободная память
  • shared – разделяемая память*
  • buff/cache – зарезервированное системой место

*Разделяемая память (англ. Shared memory) является самым быстрым средством обмена данными между процессами. После создания разделяемого сегмента памяти любой из пользовательских процессов может подсоединить его к своему собственному виртуальному пространству и работать с ним, как с обычным сегментом памяти. (цитата из Wikipedia)

Тип и частота оперативной памяти

Необходимость узнать тип установленной оперативной памяти может возникнуть при покупке дополнительных модулей. Ведь различные типы модулей несовместимы между собой физически. То есть, модуль памяти DDR2 невозможно установить в разъем, например, для DDR3.

Частота ОЗУ означает — сколько циклов чтения/записи память способна выполнить за одну секунду. Обычно максимальная частота, на которой способна работать оперативная память, определяется процессором или чипсетом материнской платы.

Для того, чтобы узнать тип и частоту оперативной памяти используется следующая команда:

Вывод команды sudo dmidecode —type memory

В выводе команды присутствует информация о каждом установленном модуле памяти в отдельности. Для получения необходимой нам информации найдем в нем следующие строки:

В списке вывода это будет выглядеть следующим образом:

Handle 0x0043, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x0041
Error Information Handle: Not Provided
Total Width: 64 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: ChannelA-DIMM1
Bank Locator: BANK 1
Type: DDR4
Type Detail: Synchronous
Speed: 2133 MT/s
Manufacturer: Kingston
Serial Number: 16334813
Asset Tag: 9876543210
Part Number: KHX2133C13D4/8GX
Rank: 2
Configured Clock Speed: 2133 MT/s
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: 1.2 V

Т.к. на ПК невозможно установить модули памяти с разным типом, а их частота обычно (при грамотной сборке ПК) совпадает, то, скорее всего, достаточно будет посмотреть информацию для любого из модулей в выводе команды.

Значение «Type» в данном выводе указывает на тип оперативной памяти (у меня в примере — DDR4), а «Speed» — на частоту (в моем примере 2133 мегатранзакции в секунду).

Для сокращения результатов вывода можно пропустить из через утилиту grep. Так, для поиска информации о типе ОЗУ можно выполнить команду:

Компактный вывод dmidecode

Проверка оперативной памяти на наличие ошибок

Иногда можно столкнуться с поломкой полупроводников оперативной памяти. Обычно это выражается в нестабильной работе программ, зависаниях и т.п. Такие поломки способны повлиять на производительность оперативной памяти. Такую поломку устранить не получится, можно только заменить модуль на новый. Поэтому при зависаниях ПК или отдельных программ необходимо убедиться в целостности ОЗУ, чтобы не потратить деньги впустую, приобретя новые модули памяти взамен рабочим.

Для проверки оперативной памяти можно использовать программу MemTester. Чтобы ее установить нужно выполнить следующую команду в терминале:

Для примера запустим проверку блока ОЗУ, размером в 100 мегабайт состоящую из двух циклов:

Результат работы memtester

Данная проверка проводится для блока ОЗУ размером в 100МБ (указанных нами) два раза. Как видим у меня все в порядке. При использовании данной утилиты важно помнить, что нельзя указывать размер блока проверки больше, чем доступно свободной оперативной памяти на момент начала проверки.

Для более тщательного тестирования памяти можно воспользоваться утилитой memtest86+ из меню загрузчика Grub. Для того, чтобы попасть в меню Grub при запуске ПК следует держать нажатой клавишу Shift или, в некоторых случаях, ESC. Если загрузилось не меню, а консоль, то нужно выполнить команду normal.

Меню загрузчика Grub

После выбора пункта меню «Memory Test (memtest86+)» начнется проверка памяти:

Проверка памяти memtest86+

По окончанию первого цикла проверки снизу экрана будет отображена информация с результатами проверки:

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Плюсы:

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

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

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

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

Ой, у вас баннер убежал!

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Установка Ubuntu на реальный жёсткий диск через VirtualBox

Поднимаем FreshTel в Linux

VirtualBox. Удобное переключение между Host и Guest

Курсы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 34

Этого не стоит делать решительно никогда, особенно на linux, как у автора.

Для начала мини-ликбез.

В современных ОС виртуальная память позволяет запрашивать для нужд программы буквально любой объем, не задумываясь, обеспечен он физической RAM или как-либо еще. Я опущу разницу между commited и reserved памятью, об этом читайте статьи. Часто бывает, что объем используемой commited виртуальной памяти запущенных программ превышает объем ОЗУ в разы. Для примера, вот скрин top на Mac OS X:

Такая память backed by swap, т.е. гарантированно, что программа получит нужный объем физической памяти, когда ей это будет надо. При отсутствии swap/paging, программам запрашиваемый объем просто не будет выдаваться и резервироваться. Рано или поздно начнутся ошибки и краши:

Конечно, если переделать Windows в однозадачную среду (запускать без Explorer или выполнять одну программу одновременно, н-р. только одна игра), то можно самому отлично выполнять работу менеджера памяти и следить за ее потреблением. 🙂 Например, в Windows Embedded paging file по-умолчанию выключен, правда, это инструмент и не для обычного пользователя. Такой режим работы называется Monoprogramming (в противоположеность Multiprogramming = многозадачности).

В Linux, кроме всего прочего, swap раздел используется swsusp для hibernate.

Если хочется детальнее, то ищем
A. Tanenbaum, Modern Operating Systems 3 e, 0-13-6006639

Но на самом деле, есть еще одна сторона медали, о которой не задумываются апологеты отключения свопа. При частом использовании десятками программ (а в многозадачных ОС происходит именно так), физическая память становится все больше похожа на решето — сотня страниц принадлежит одной программе, сотня другой, потом свободный блок и так далее. В масштабах программы это лишь проблема программы, в масштабах системы это приводит к потерям производительности. При высокой фрагментации памяти, менеджер может попробовать решить эту проблему:

Once free physical memory becomes fragmented, an operating system can consolidate free memory into a single, unfragmented block by moving code and data to new physical addresses (Figure 2). In this case, the three blocks of free memory were consolidated into one larger block by moving system memory upward and application 1 downward in physical memory.

When not needed by the processor, code and data can be saved temporarily on a hard disk (or other device with abundant storage). This frees physical memory for use by other code and data that the processor needs to access. The process of temporarily transferring code and data to and from the hard disk to make room in physical memory is called swapping.

За счет свопинга происходит реорганизация памяти и не используемые, но запущенные приложения не занимают физическую ОЗУ. Это позволяет бороться с фрагментацией и абстрактно можно сказать, что если компьютер некоторое время не использовать, то физическая память будет полностью дефрагментирована. На деле это не всегда так, но без использования свопа сходный уровень дефрагментации памяти достигается только выключением 🙂
Опережая стандартный ответ «все это фигня, у меня 16гб памяти без свопа и ничего не тормозит» я скажу, что ремни безопасности тоже нужны один раз из тысячи поездок, но пренебрегать ими как минимум глупо.

В современных ОС виртуальная память позволяет запрашивать для нужд программы буквально любой объем, не задумываясь, обеспечен он физической RAM или как-либо еще.

Запросить-то она запросит, но дадут ей не более, чем объем виртуальной памяти, которая ограничивается ram+swap

При отсутствии swap/paging, программам запрашиваемый объем просто не будет выдаваться и резервироваться.

Все правильно. Когда у вас закончится своп, будет тоже самое.

В целом — не убедили. При скорости работы RAM любая дефрагментация будет влиять на работу очень и очень мало. Гораздо быстрее, чем сбрасывание в своп и обратно. Так что Америку вы не открыли — своп был нужен, когда оператива была дорогая и ее было мало. При нынешней стоимости, проще взять на 2-4Гб больше «с запасом», чем держать своп.

Запросить-то она запросит, но дадут ей не более, чем объем виртуальной памяти, которая ограничивается ram+swap

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

Речь не о том, что сбрасывание в своп медленее, это и так ясно. Речь о том, что есть механизм, придуманный для решения многих проблем (в т.ч. и фрагментации) и с ним система работает быстрее, чем без него.
Для примера, ознакомьтесь с отличной статьей тов. amirul: habrahabr.ru/post/107607/

Именно для этого в Windows есть пункт «System managed page file size». В других ОС выделяют 1.5-2x RAM под swap раздел, иногда и больше

И тем не менее. Не «сколько попросит», а сколько есть

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

> И тем не менее. Не «сколько попросит», а сколько есть
если Windows и стоит авто режим, то будет выделять столько, насколько хватит винчестера.

> Автора подсказать, или сами найдете?
вырвано из контекста, где Марк объяснял, почему нельзя доверять подобную задачу сторонней программе, оставляя это ОС, одним из инструментов которой является, как ни странно, пейджинг.

на этом, наверное, закончим, а то так можно и дойти до советов отключения свопа на серверах, дабы там один процесс с утечкой не мог рости до позеленения, а крашился 🙂

p.s. такой совет действительно существует и в описанной сферически-вакуумной ситуации помогает.

если Windows и стоит авто режим, то будет выделять столько, насколько хватит винчестера.

А в юниксах/линуксах размер свопа фиксированный. Да и для винды, насколько я знаю, рекомендуют все же устанавливать ограничения на размер свопа.

вырвано из контекста, где Марк объяснял, почему нельзя доверять подобную задачу сторонней программе, оставляя это ОС, одним из инструментов которой является, как ни странно, пейджинг.

А виртуальная адресация — это тоже «из контекста»? Или вот это:

Непрерывная область памяти повышает быстродействие в одном случае: если в целях увеличения скорости кэш-памяти процессора Memory Manager использует механизм page coloring для назначения страниц, выделяемых процессам из списков свободных или обнуленных страниц.

> для винды, насколько я знаю, рекомендуют все же устанавливать ограничения на размер свопа.
начнем с того, что для винды рекомендуют его не отключать никогда и оставлять System managed size.

> А виртуальная адресация — это тоже «из контекста»? Или вот это:
Виртуальная адресация это сложнейший механизм, который в любом случае выигрывает, когда для каждой страницы из 4гб выделенной памяти не надо хранить отдельный адрес 4096-байтной страницы. Простой подсчет говорит, что при максимальной фрагментации таблица преобразования (Page address table по Таннербауму) будет иметь миллион элементов.

Непрерывная область памяти повышает быстродействие в одном случае: если в целях увеличения скорости кэш-памяти процессора Memory Manager использует механизм page coloring для назначения страниц, выделяемых процессам из списков свободных или обнуленных страниц.

Тоже «из контекста» и не о том?

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

Уже лет пять, с тех пор, как объем памяти на домашней машине перевалил за 4 гига, ни своп, ни файл подкачки не юзаю совсем.
УМВР ЧЯДНТ?

У меня memtester под linux, кстати находил ошибки (за 5 минут) которые memtest86 не находит (за целый день).
Ошибки были реальные, вызывали зависания.

Только потом выяснилось что они были связаны не с самой памятью а со связкой память-матплата (настройки напряжений итд) и проявлялись сбоями в памяти. Характерная черта таких ошибок, если найдены memtest86 — разные адреса всё время.

>>в чем же приимущество?
Преимущество по времени (не нужно обходить каждый компьютер отдельно), возможность оперативного контроля (не нужно обходить каждый компьютер отдельно), возможность встроить в пакет с другими тестами. Повторюсь, компьютеров не просто несколько десятков, их может быть очень много, и подготовлены они должны быть «на вчера».

Для нескольких же, да, подходим индивидуально, и качетсво тестирования заметно выше.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Тест операционная система linux 11 класс
  • Тест на проникновение kali linux
  • Тест на знание linux
  • Тест на выбор дистрибутива linux
  • Тест жесткого диска на скорость linux