Вопрос или проблема
Я тестирую свою систему с zram, мне нужен скрипт, который будет использовать как можно больше оперативной памяти. Этот скрипт должен заполнять оперативную память случайными данными, а не просто нулями.
Просто выполните :
echo {1..1000000000}
Объяснение :
Оболочка, прежде чем передать команду ядру, расширяет все регулярные выражения и краткие обозначения. Расширенная команда временно сохраняется в оперативной памяти. Указанная выше команда расширяется до очень большой команды и поэтому полностью заполнит RAM (проверено на 8 ГБ).
ПРЕДУПРЕЖДЕНИЕ : Это неконтролируемый способ заполнения оперативной памяти. Вы можете застрять после выполнения этой команды. Я советую вам держать системный монитор
открытым (для наблюдения за использованием оперативной памяти) и попробовать с меньшими числами.
Как предложил prophecy201, stress – отличный инструмент для использования памяти вашей системы. Добавление еще больше рабочих процессов использует больше RAM, но это также будет использовать больше процессора, что довольно неэффективно, если вам просто нужно протестировать RAM. Не говоря уже о том, что процессор понадобиться zram для сжатия.
Вместо этого вы должны увеличить объем используемой RAM с помощью флага --vm-bytes
. Например, чтобы использовать 4 ГБ RAM с одним рабочим процессом:
stress -m 1 --vm-bytes 4G
Вы также можете найти флаг --vm-keep
полезным, так как он будет удерживать выделение памяти, а не постоянно перераспределять, так что использование памяти будет постоянным, а не колеблющимся:
stress -m 1 --vm-bytes 4G --vm-keep
Наконец, взгляните сюда, чтобы убедиться, что zram – это то, что вам действительно нужно; поскольку у вас есть swap, zswap может быть лучшим решением: zram против zswap против zcache Ultimate guide: когда использовать что
memtester
– это пользовательская программа, предназначенная для выделения памяти (любое количество, которое вы укажете) и тестирования ее случайными шаблонами. Однако она избегает использования swap. Но если вы сначала заберете всю память с помощью memtester
(проверьте с free -m
), а затем запустите что-либо еще, что использует много памяти (gimp, firefox, …), это должно привести к работе swap.
Другой вариант – это что-то вроде openssl rand -base64 $((1024*1024*1024)) | less
и в less используйте >
, чтобы перейти к последней строке; это загрузит 1 ГБ случайных данных, закодированных в base64, в память (но это медленно).
Если вы ищете что-то более эффективное, может помочь небольшой скрипт на любом языке сценариев (например, Python).
#!/usr/bin/python2
import numpy
result = [numpy.random.bytes(1024*1024) for x in xrange(1024)]
print len(result)
Это выделит 1 ГБ памяти со случайными данными и выведет количество выделенных MB перед завершением. Если вам нужно больше, чем 1024M, адаптируйте значение xrange соответствующим образом.
Я бы предложил использовать программу stress, устанавливаемую из репозиториев с помощью sudo apt-get install stress
.
Чтобы протестировать вашу RAM, используйте stress -m x
, где x – это количество рабочих процессов, которые заполнят оперативную память. Выбирайте больше рабочих процессов, чтобы использовать больше RAM.
Ожидайте, что zswap будет работать крайне плохо — значительно ухудшать производительность — если вы заполните память случайными байтами, особенно если вы быстро касаетесь большого количества памяти.
zram сжимает содержимое страниц памяти, и сжатие работает только если данные не случайные. Реальные данные (особенно данные в памяти) обычно довольно хорошо сжимаются.
zram также помогает, если у вас есть “локальность ссылок”, как у большинства программ — они имеют тенденцию неоднократно касаться одних и тех же страниц перед тем, как перейти к другой подгруппе страниц. (Вот почему работает нормальная виртуальная память. Сжатое кэширование просто добавляет новый уровень памяти между обычными не сжатыми страницами и дисковым хранилищем.)
Если вы знаете это и намеренно пытаетесь протестировать zswap при наихудших условиях, возможно, для поиска ошибок, дерзайте.
Но если это не так, вам, вероятно, стоит прочитать статью Пола Р. Уилсона и др. “Случай для сжатого кэширования в системах виртуальной памяти”, которая объясняет, когда сжатие RAM помогает, когда оно вредит и как адаптивный алгоритм может использовать его, когда это помогает, и нет, когда это не помогает. (Статья доступна онлайн в формате html на каком-то сайте USENIX и в формате pdf где-то еще. Поищите в Google.)
К сожалению, насколько мне известно, zram не делает такого рода автоматическое общее адаптирование, о котором они говорят, поэтому вам нужно установить размер сжатого кэша на какое-то разумное обычное значение для вашей рабочей нагрузки.
Один случай, когда это будет работать хорошо, это если у вас больше RAM, чем использует любая одна из ваших программ, но есть тенденция иметь неактивные приложения, тоже использующие память, и переключаться между приложениями. Страницы неактивных приложений, как правило, будут сжиматься, а когда вы переключаетесь обратно к ним, они только нуждаются в разжатии, а не в загрузке с диска.
Чтобы провести стресс-тест вашего устройства на Linux, возможно, вы захотите рассмотреть вариант контролируемого создания хаоса. В этих случаях лучше использовать такие инструменты, как stress, как предложил @prophecy в этой же теме.
Однако, если вам нужно протестировать устройство, работающее на минимальном Linux, таком как дистролесс Ubuntu (вероятно, в docker). Вам будет сложно получить эти инструменты для выполнения этих тестов.
В таких случаях написание собственного сценария оболочки будет лучшим способом заполнить ваши ресурсы.
вот сценарий ниже:
rstr="$(echo $RANDOM | md5sum | head -c 20)"
for i in $(seq 0 1000000); do
# исчерпывание памяти
rstr=$rstr+$rstr
echo $i
# исчерпывание циклов ЦП
./infor.sh &
done
# исчерпывание постоянных объемов
echo "${rstr}" > overflow.txt
Предупреждение: сценарий является неконтролируемым способом тестирования производительности вашей системы. И когда вам нужно будет остановить его, лучше вручную завершить процесс.
Если вы тестируете zram, вы не хотите заполнять оперативную память либо только нулями, либо случайными данными, так как нули бесконечно сжимаемы, а случайные данные вообще не сжимаемы, в то время как вы хотите что-то, что имеет разумный коэффициент сжатия. Тестирование zram или другого сжатого swap, IMHO, требует фактической памяти процессов. Возможно, вы захотите рассмотреть возможность уменьшения системной оперативной памяти с помощью параметров командной строки ядра mem=
и memmap=
, которые действительно дадут вашей системе меньше физической RAM, что может лучше симулировать ситуацию с низкой памятью раньше.
Или вы можете настроить тест, который открывает определенное количество вкладок браузера определенных тяжелых веб-сайтов и является повторяемым.
.
Ответ или решение
Для тестирования системной памяти и zram может понадобиться скрипт, который заполнит оперативную память (ОЗУ) и, возможно, пространством подкачки с целью моделирования различных сцен при работе системы. Важно отметить, что неправильное использование таких скриптов может привести к нестабильной работе системы, и их следует использовать с осторожностью. Рассмотрим основные подходы к данной задаче.
Теория
Тестирование памяти системы — это процесс, который позволяет оценить, как система справляется с нагрузками при ограниченных ресурсах. Для этой цели важно не просто заполнить оперативную память, но также учитывать различные сценарии использования, такие как работа с данными, которые могут сжиматься (например, тексты или структурированные данные), а также с теми, которые практически не поддаются сжатию (например, случайные данные).
Использование zram позволяет сжимать содержимое оперативной памяти, что теоретически может повысить производительность за счет уменьшения частоты обращений к жесткому диску для операций ввода-вывода. Однако, использование случайных данных минимизирует эффект от сжатия, так как такие данные сжимаются плохо. Для тестирования zram важно использовать данные, которые могут быть частично сжаты, что приблизит тест к реальным сценариям использования.
Пример
Вот несколько примеров скриптов и инструментов, которые можно использовать для заполнения оперативной памяти:
-
Использование команды Shell для заполнения ОЗУ:
echo {1..1000000000}
Эта команда генерирует большое количество данных, которые временно сохраняются в оперативной памяти.
-
Инструмент
stress
:
Утилитаstress
позволяет более контролируемо нагружать систему, устанавливая количество рабочих процессов и объём используемой памяти:stress -m 1 --vm-bytes 4G --vm-keep
Этот скрипт запускает один процесс, который использует 4 ГБ оперативной памяти.
-
Использование Python:
Скрипт на Python может генерировать случайные данные, заполняющие память:#!/usr/bin/python2 import numpy result = [numpy.random.bytes(1024*1024) for x in xrange(1024)] print len(result)
Этот пример выделяет 1 ГБ памяти случайными данными.
-
Автономный скрипт для Linux:
Следующий простой shell-скрипт также предназначен для создания нагрузки:rstr="$(echo $RANDOM | md5sum | head -c 20)" for i in $(seq 0 1000000); do rstr=$rstr+$rstr echo $i ./infor.sh & done echo "${rstr}" > overflow.txt
Этот скрипт создает строки случайных данных и записывает их в файл, увеличивая нагрузку на систему.
Применение
Когда вы используете скрипты или утилиты для тестирования памяти, важно следить за состоянием системы с помощью системных мониторов и предупреждений. Вы можете использовать инструмент htop
или встроенные средства мониторинга памяти, чтобы наблюдать за тем, как изменяется использование ресурсов системы в реальном времени.
При тестировании zram учтите, что его эффективность во многом зависит от характера данных. Реальные данные, используемые в программном обеспечении, зачастую поддаются сжатию в отличие от произвольных или случайных данных. Настройка zram должна соответствовать предполагаемой рабочей нагрузке, чтобы получить приближенные к реальности результаты.
Подобное тестирование полезно для:
- Определения оптимальной конфигурации zram для специфических рабочих нагрузок;
- Выявления минимального уровня ОЗУ, необходимого для стабильной работы системы с zram;
- Подготовки системы к работе в условиях высокой загрузки посредством симуляции нехватки ресурсов.
Однако всегда помните о рисках, что подобные тесты могут вызвать частичное или полное зависание системы, поэтому все действия должны быть максимально контролируемыми.