Как Увеличить Виртуальную память Ubuntu и/или Подкачку для Matlab?

Ситуация: зафиксировать Out of Memory ошибки в Matlab Ubuntu
Цель: выделите некоторую виртуальную память и/или Подкачку на внешнем жестком диске/SSD; уменьшение чтения-записи от 20 Гбайт/с до 0,1 Гбайт/с, которое в порядке!
Терминология: подкачка и виртуальная память здесь

Нет, подкачка и виртуальная память полностью отличаются. Например, размещение в ОЗУ файл на 1 ГБ использует дополнительного 1 ГБ виртуальной памяти, но не имеет никакого изменения в использовании подкачки. Подкачка является формой запоминающего устройства. Много использования виртуальной памяти не имеют никакого отношения к запоминающему устройству. (И были системы с виртуальной памятью и никакой подкачкой, а также системы с подкачкой, но никакой виртуальной памятью.)

Потребительские аппаратные средства ограничены так, я должен использовать больше виртуальной памяти и/или подкачки с моими внешними жесткими дисками. Matlab заявляет о памяти подкачки (TODO, исключая виртуальную память?)

Системы Linux — Изменение Ваша область подкачки при помощи mkswap и swapon команды.

Характеристики системы

  • Вы видите, каким количеством у Вас есть он swapon -s

    Filename                Type        Size    Used    Priority
    /dev/sda3               partition   8326140 0       -1
    
  • Конфигурации Matlab

    % https://stackoverflow.com/a/35971040/54964
    com.mathworks.services.Prefs.setIntegerPref('JavaMemHeapMax', 2048); % MB
    
    % TODO cannot find ways how to put Matlab use /dev/sda3
    
  • Таким образом, Вы видите, что мой Matlab не использует его. Я получаю Out of Memory ошибки с большими матрицами в Matlab. Я был неудачен в reshape'матрицы луга к векторам и пишущий параллельный код. Таким образом, я хочу использовать виртуальную память, потому что я должен получить сделанную работу; уровень не имеет значения.

Псевдокод

  1. Сценарий оболочки, который создает подкачку, запускает MATLAB и удаляет подкачку, когда MATLAB выходит. (MichaelHooreman)
  2. Включите подкачку на внешнем жестком диске. Как использовать sudo swapon -a здесь?
  3. Запустите Matlab.
  4. Помещенные Matlab используют подкачку.
  5. Удалите подкачку, когда Matlab выйдет.

Временная Подкачка, Выполняя Клиент и Закрытие/Удаление Загружает сценарий Micheal

Ситуация: не может управлять ошибками в установке среды (1), выполнение Matlab (2) и закрытие среды (3)
Сценарий

#!/usr/bin/env bash

# https://stackoverflow.com/a/69808/54964
set -e 
# TODO How to do swapoff if any error?

SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016"
SIZE_MB=16000
TO_RUN="matlab"

dd if="/dev/zero" of=${SWAP_FILE} bs="1M" count=${SIZE_MB} status="progress"
mkswap ${SWAP_FILE}
chmod 0600 ${SWAP_FILE}
sudo chown 0.0 ${SWAP_FILE} # https://unix.stackexchange.com/a/297153/16920
sudo swapon -v ${SWAP_FILE}
echo "Swap enabled. Press enter to continue"; read
${TO_RUN}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v ${SWAP_FILE}
rm -vf ${SWAP_FILE}

Повторение 1 с Transcend 25M3 1 ТБ с небольшим использованием berofe, где файловая система ext4

  1. Журналы после запуска сценария

    sh start_matlab_with_swap.sh 
    16000+0 records in
    16000+0 records out
    16777216000 bytes (17 GB, 16 GiB) copied, 134.489 s, 125 MB/s
    Setting up swapspace version 1, size = 15.6 GiB (16777211904 bytes)
    no label, UUID=48c2835b-4499-4534-aa49-0648e15bd5d9
    [sudo] password for masi: 
    swapon /media/masi/SamiWeek/tmp/swap_file_18.7.2016
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: insecure file owner 1000, 0 (root) suggested.
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: found swap signature: version 1d, page-size 4, same byte order
    swapon: /media/masi/SamiWeek/tmp/swap_file_18.7.2016: pagesize=4096, swapsize=16777216000, devsize=16777216000
    Swap enabled. Press enter to continue
    start_matlab_with_swap.sh: 11: read: arg count
    
  2. Выполнение клиента

    • История команд, в которую входят первый запуск Matlab в памяти подкачки (билет № 02075943), с ошибкой, была проблемой, читая Вашу историю команд-. Просто перезапустите свой Matlab и и проблема решена, если у Вас есть настройки по умолчанию. Команда prefdir дает /home/masi/.matlab/R2016a который является местоположением по умолчанию (/home/{username}/.matlab/R2016a. Файл /home/masi/.matlab/R2016a/matlab.prf существует после перезапуска, здесь.

    • ... [другие ошибки]...

  3. Закрытие Matlab и ввод пароля снова в Терминале

    [sudo] password for masi: 
    swapoff /media/masi/SamiWeek/tmp/swap_file_18.7.2016
    [ bugs here! ]
    

Открытый: Как Применить Лучшую Обработку ошибок Обнаружения ошибок здесь? См. мой сценарий для примера в источнике. Поток, Как Сделать Обнаружение ошибок и Swapoff если Ошибка/Предупреждение?

Постоянная подкачка = отдельная установка подкачки от рабочего клиента

Установка Подкачки

# https://unix.stackexchange.com/q/297767/16920
masi@masi:~$ sudo fallocate -l 20G /mnt/.swapfile

masi@masi:~$ sudo mkswap /mnt/.swapfile 
Setting up swapspace version 1, size = 20 GiB (21474832384 bytes)
no label, UUID=45df9e48-1760-47e8-84d7-7a14f56bbd72

masi@masi:~$ sudo swapon /mnt/.swapfile
swapon: /mnt/.swapfile: insecure permissions 0644, 0600 suggested.

masi@masi:~$ sudo chmod 600 /mnt/.swapfile

masi@masi:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7925        1494         175         196        6255        5892
Swap:         28610           0       28610

Поместите следующее в конец /etc/fstab для постоянного изменения

# https://unix.stackexchange.com/a/298212/16920
# https://unix.stackexchange.com/a/298543/16920

# If swap is on SSD, trim blocks each time at startup.
#/mnt/.swapfile  none    swap    defaults,discard      0        0

# If swap on External HDD, just use sw.
/media/masi/SamiWeek/.swapfile  none    swap    sw      0        0

Система: Linux Ubuntu 16.04 64 бита
Ядро Linux: 4.6
Опции ядра Linux: wl
Matlab: 2016a
Официальные документы Matlab: Твердость "Из Памяти" Ошибки
Внешний жесткий диск: обзор StoreJet 25M3 Transcend 1 ТБ, StoreJet 25M3 Transcend 2 ТБ
Внешняя файловая система жесткого диска: ext4
Внешний буфер жесткого диска: 8 МБ
Связанные потоки: Как увеличить ограничение памяти MATLAB в человечности? (как использовать mkswap, swapon для MATLAB?), Как Уменьшить увеличение Физической памяти Matlab?, Как Решить из ошибки памяти в Matlab?, Как Зафиксировать Из Ошибки памяти в Matlab для 10800x10800 матрица?, Как я увеличиваю предел памяти (непрерывный, а также полный) в Matlab r2012b?, Как Увеличить Блок Массива и Твердость Из Ошибки памяти в Matlab 2009b?, Как Разрешить это Из Проблемы памяти для Маленькой Переменной в Matlab?, 'Из памяти' в Matlab. Медленное, но постоянное решение?

16
задан 23 May 2017 в 05:39

5 ответов

Хорошо, настоящий список Вы имеете там. Позвольте мне ответить встроенный

  1. , Как Применить Лучшую Обработку ошибок Обнаружения ошибок здесь? См. мой сценарий для примера в источнике. Поток, Как Сделать Обнаружение ошибок и Swapoff если Ошибка/Предупреждение?.

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

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

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

  1. , Как иметь индикатор выполнения в вычислениях Вашей огромной матрицы в Matlab?

matlab имеет право API? Я не думаю, что это - правильный форум для того вопроса. Даже если у Вас был API, Вы будете блокироваться на IO через подкачку, таким образом, это просто будет судорожный индикатор выполнения, который на самом деле не отражает действительность.

  1. , Как уничтожить занятый прогресс и/или swapon-s/swapoff в повторении (2)?

Вы не делаете. просто, потому что Вы сделаны с вычислением, не означает, что операционная система сделана с ресурсами, которые Вы выделили. Когда это будет делать записи для свопинга, это освободит. Вы использовали такую память, что много приложений не может получить память, в которой они нуждаются так, они используют подкачку также. Просто оставьте его на и позвольте операционной системе сделать, это - вещь. Перед выполнением следующего запуска, четкого кэши.

echo 3 > /proc/sys/vm/drop_caches 

существует, вероятно, больше к нему, чем это, я не эксперт VM Linux. Стоило бы заняться расследованиями, как средство выделения SLAB/SLUB работает и как настроить его для Ваших требований памяти большой емкости. Вы можете к MLOCK matlab в память. Это вынуждает ОС зарезервировать память для Вас, или она просто не запускается, также необходимо разблокировать ее, когда Вы сделаны. Я могу сделать это с API C очень хорошо, но я не уверенный, как Вы сделали бы это за пределами процесса, который я не могу перекомпилировать, который потребовал бы некоторого исследования.

Наконец, это - вид материала, для которого был сделан EC2. Это похоже 16G, то, в чем Вы нуждаетесь, m4.4xlarge имеет 64G поршень 0,958$ в час. Это - меньше, чем кофе чашки. Напишите сценарий своей установки matlab использование очарования амулета или подобный и превратите все это в вычисление как услуга.

16G 16 ГБ?

  • Да, обычно когда мы бросаем суффикс, мы имеем в виду base2 числа в единицах байтов. Если бы Вы хотите к краткому, Вы записали бы 16 ГиБ.

"Мне нужны матрицы, которые являются> 100 ГБ. Я не знаю, можно ли сделать это с EC2".

необходимо ли очистить кэши также echo 3 > /proc/sys/vm/drop_caches?

  • Да, не повреждает всегда делать это. См. Documentation/sysctl/vm.txt в ядре Linux.

, Как может Вы MLOCK Matlab в память?

  • man mlock. Хотя я попал впросак, когда я заключил это в кавычки. Этот вызов гарантирует, что можно выделить всю память, которую Вы хотите и удерживаете от того, чтобы быть выгруженным, это никогда не будет использовать виртуальную память. Это не то, что Вы хотите.

я думаю, что можно связать API C с Matlab. - У Вас есть какая-либо идея выключить подкачку, если существует какой-либо отказ в процессах?

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

, Когда я прошу у ОС пространство адреса памяти, иногда она не всегда успешно выполняется, который не означает, что я не могу попробовать еще раз. Это, которое matlab не может выяснить для вызова malloc дважды, является проблемой matlab.

Так, для влияния на на изменение Вы хотите, если это 100G пространства действительно в большом почете затем необходимо выяснить, как сказать операционной системе обрезать, это - объем потребляемой памяти (путем очистки кэшей для начинающих), таким образом, диспетчер памяти не чувствует потребность использовать дополнительную область подкачки, которую это было обеспечено. Затем и только затем можете Вы просить, чтобы диспетчер памяти выпустил файл подкачки.

легко вырастить вещи как память и диски, намного более трудно уменьшить их. Уменьшающиеся силы изменение баланса каждого пользователя, которому выделили ресурсы в том пространстве. Если я вместо этого сказал, что "У меня есть массив хранения данных на 100 ТБ, но теперь мне только нужны 60 ТБ, почему это, когда я удаляю 40 ТБ диска, что массив прекращает работать?" Ну, Ответ был бы очевидным правом?

, Таким образом, вот Ваши опции, как я вижу его.

  1. исследуют matlab C API, чтобы видеть, можно ли получить лучший контроль над тем, как память выделяется для этих значительных рабочих наборов.

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

  3. пишут Вашу собственную программу в C/C++ с помощью изобилия библиотек линейной алгебры там для выполнения вычисления и использования malloc или mmap анонимный для выделения адресного пространства, в котором Вы нуждаетесь.

2
ответ дан 23 November 2019 в 02:36

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

Вот сценарий в качестве примера, который создает подкачку 10 МБ в/tmp каталоге, монтирует его, запускает R (у меня нет matlab), ожидайте выходы R, umount файл подкачки и удалите его.

Обратите внимание на то, что: - у Вас будет предупреждение, потому что файл подкачки не принадлежит корню. Поэтому система будет использовать, если для какого-либо программного обеспечения, возможно, не работал Вами, и можно читать на этом файле... Я позволяю Вам зафиксировать его. - если Вы [ctrl] - [c] сценарий или выход из системы, или и т.д., подкачка останетесь смонтированными. Я позволяю Вам зафиксировать его также.

#!/usr/bin/env bash

SWAP_FILE=/tmp/my_swap_file
SIZE_MB=10
TO_RUN="R"

dd if=/dev/zero of=${SWAP_FILE} bs=1M count=${SIZE_MB}
mkswap ${SWAP_FILE}
chmod 0600 ${SWAP_FILE}
sudo swapon -v ${SWAP_FILE}
echo "Swap enabled. Press enter to continue"; read
${TO_RUN}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v ${SWAP_FILE}
rm -vf ${SWAP_FILE}
12
ответ дан 23 November 2019 в 02:36

Это - то, как можно развернуть память ПОДКАЧКИ с помощью внешний жесткий диск :

  • Первый, запишите свою фактическую память ПОДКАЧКИ путем выполнения:

    free -m
    
  • 1120-секундный, имейте под рукой папку своего жесткого диска. Это должно быть что-то как /media/myhdd.

  • Решают размер дополнительной ПОДКАЧКИ, которую Вы хотите добавить. Скажем, X ГБ.
  • Вычисляют сумму байтов, которые количество. Используя ГБ, это: Y=X*1024^3, где Y является результатом Вашего вычисления.
  • Выбирают размер блока файла (это находится в байтах). Давайте использовать значение по умолчанию здесь: 4096 (См. больше об этом здесь ).
  • Вычисляют количество блоков, которые будет иметь файл: Z=Y/4096
  • Создают файл размера X ГБ с помощью следующей команды в терминале:

    dd if=/dev/zero of=/media/myhdd/swapfile bs=4096 count=Z
    
  • Создают ПОДКАЧКУ в использовании файла:

    sudo mkswap /media/myhdd/swapfile -f
    
  • Наконец, включите ПОДКАЧКУ:

    sudo swapon -p 1000 /media/myhdd/swapfile
    

Теперь Ваша ПОДКАЧКА увеличилась. Проверьте снова с free -m

<час>

, Мы можем настроить это в неинтерактивном сценарии (sudo необходимые полномочия):

#!/bin/bash

### Inputs ###

swap_GB=$(expr 1) # Enter here size of the swap memory to create, in GB.
swap_bs=$(expr 4096) # Enter here block size, in bytes (must be a multiple of 8).
HDD_folder="/media/myhdd/" # Enter absolute path of HDD inside the brackets.

### Swap creation ###

swap_size=$(expr $swap_GB \* 1024 \* 1024 \* 1024 / $swap_bs)
dd if=/dev/zero of=${HDD_folder}"/swapfile" bs=$swap_bs count=$swap_size
mkswap ${HDD_folder}"/swapfile" -f
swapon -p 1000 ${HDD_folder}"/swapfile"

### EOF ###

пз: оптимизируйте/исправьте, если это возможно. Как сказано, это - мой первый сценарий когда-либо :)

1
ответ дан 23 November 2019 в 02:36

Я, по крайней мере, протестировал бы, как хорошо сжатая RAM (zram модуль ядра, доступный начиная с версии 3.14 ядра), работает.

Следующий archlinux инструкции Wiki

modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 4G > /sys/block/zram0/disksize
mkswap --label zram0 /dev/zram0
swapon --priority 100 /dev/zram0

Мое предположение - то, что сжатая RAM должна быть быстрее, чем диск ввод-вывод.

Для оставления сдачу также после перезапуска поместите команды времени начальной загрузки в /etc/rc.local и работайте sudo systemctl enable rc-local.service.

1
ответ дан 23 November 2019 в 02:36

Используйте zswap, если у Вас есть части подкачки на жестком диске/SSD. Модуль Tho zram без частей подкачки на жестком диске/SSD, таким образом, ответ Hakala не применим. Посмотрите поток zram по сравнению с zswap по сравнению с zcache Окончательным руководством: когда использовать который для объяснений. Установка zswap, как описано в потоке , Как Активировать Zswap Успешно для Вычисления Matlab в Ubuntu 16.04?

  • Замена соответствующая строка со следующей строкой в /etc/default/grub

    # https://wiki.archlinux.org/index.php/Zswap
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.max_pool_percent=25 zswap.compressor=lzo"
    
  • Выполнение sudo update-grub.

1
ответ дан 23 November 2019 в 02:36

Другие вопросы по тегам:

Похожие вопросы: