Назад | Перейти на главную страницу

Создание файлов подкачки быстрее

Я использую Amazon EC2 и хочу иметь возможность быстро создавать большие файлы подкачки (~ 10+ ГБ) при запуске инстанса. К сожалению, скорость ввода-вывода на моих экземплярах (c1.xlarge) достаточно низкая (20 МБ / с), поэтому эта операция занимает 10+ минут, что неприемлемо для моего использования.

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

Однако есть ли какая-нибудь команда для распределения блоков без затраченного большого количества времени на обнуление блоков? Кроме того, если эта команда существует, правильно ли я предполагаю, что страница в файле подкачки обнуляется до того, как пользовательский процесс получит к ней доступ (снижение проблем безопасности)?

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

Обычно вы выпускаете dd команда, которая, в свою очередь, откачивает нулевой файл подходящего размера, а затем запускает mkswap, добавьте запись в /etc/fstab, а потом swapon чтобы активировать его. Я прикрепил довольно наспех написанный пример сценария оболочки, в котором, я уверен, есть ошибки (уже поздно, где я нахожусь, и fstab запись далека от идеала)

#!/bin/bash
# --- allocate 10Gbyte of swap space as 10 separate 1Gbyte files
# --- that are brought online sequentially during processing
for swpidx in 01 02 03 04 05 06 07 08 09 10
do
  dd if=/dev/zero of=/swapfile.$swpidx bs=16738 count=65536
  mkswap /swapfile.$swpidx
  echo "/swapfile.$swpidx    swap    swap    default    0 0" >> /etc/fstab
  swapon -a
done
swapon -s

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

Думаю, я должен упомянуть, что выделение пространства подкачки такого размера немного необычно даже для сервера; и я говорю это только потому, что к большинству серверов подключено несколько гигабайт оперативной памяти при работе с программами / данными такого размера. Не для того, чтобы подглядывать или что-то в этом роде, но вам действительно нужно столько места подкачки?

Еще одна вещь, которую вы, возможно, захотите рассмотреть, - это перенастроить вашу рабочую нагрузку, а не пытаться динамически выделять пространство подкачки. Хотя, как вы сами отметили, иметь такой объем «по требованию» - это здорово, это быстро станет узким местом из-за низкой пропускной способности ввода-вывода на вашем экземпляре сервера. К тому времени, когда вы исчерпаете свою память и по сути «живете в свопе», вы обнаружите, что скорость передачи 20 Мбайт / с превращает ваш экземпляр в 386SX.

Я успешно использую команду «fallocate». Это занимает менее 1 секунды.

sudo fallocate -l 10G /swapfile

После этого вы можете запустить mkswap. Для получения дополнительной информации вы можете использовать отличный учебник Digital Ocean для ubuntu здесь, который может работать без изменений для других версий Linux, по адресу https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04.

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

Оказывается, вы можете использовать устройство с обратной связью, чтобы поместить подкачку в разреженный файл: http://www.option-c.com/xwiki/Loop_Mounting_Swap_Partition