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

Очень низкая пропускная способность диска на томах AWS EBS

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

Я использую экземпляр t3.micro (оптимизированный для EBS) с Amazon Linux 2 AMI, к которому подключены оба тома EBS (gp2) в дополнение к основному от экземпляра (все в одной зоне доступности)

Я уже сделал это, и на копирование 95 ГБ данных уходило около 5-10 минут (что было бы, если бы 10 минут, 162 МБ / с пропускной способности), но теперь, с теми же объемами, это происходит очень медленно.

Процесс копирования:

tar cSf - /mnt/nvme1n1p1/ | cat | (cd ../nvme2n1p1/ && tar xSBf -)

У меня он работает в фоновом режиме и проверяет одновременно с iostat -xm 5 3 Я получаю такие результаты:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.02    0.86   39.62    0.05   59.39

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme1n1           0.00     0.00   54.20    0.00     6.70     0.00   253.19     0.94   34.62   34.62    3.56  17.32  93.90
nvme2n1           0.00     0.28    0.06   27.20     0.00     6.71   503.98     0.14    6.67    0.31    6.68   1.22   3.32
nvme0n1           0.00     0.02    2.10    0.90     0.04     0.00    30.65     0.00    0.63    0.63    0.62   0.08   0.02

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.10    0.00    0.70   37.54    0.00   61.66

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme1n1           0.00     0.00   46.40    0.00     5.80     0.00   256.00     1.00   43.16   43.16    0.00  21.48  99.68
nvme2n1           0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
nvme0n1           0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.90   38.66    0.10   60.34

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
nvme1n1           0.00     0.00   53.80    0.00     6.73     0.00   256.00     1.00   36.67   36.67    0.00  18.57  99.92
nvme2n1           0.00     0.00    0.00   16.00     0.00     4.00   512.00     0.03    3.20    0.00    3.20   0.80   1.28
nvme0n1           0.00     0.60    0.00    1.40     0.00     0.02    23.14     0.00    0.00    0.00    0.00   0.00   0.00

Как видите, у меня пропускная способность ниже 10 МБ / с, и она становится все меньше и меньше. Я читал о пропускной способности EBS и не могу понять, что это может быть, есть ли штрафы или что-то подобное ...

Вы знаете, что это может быть?

Заранее спасибо! :)

Дополнительная запрошенная информация:

ulimit -a:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3700
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3700
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

df -h:

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        463M     0  463M   0% /dev
tmpfs           480M     0  480M   0% /dev/shm
tmpfs           480M  380K  480M   1% /run
tmpfs           480M     0  480M   0% /sys/fs/cgroup
/dev/nvme0n1p1  8.0G  1.1G  7.0G  13% /
tmpfs            96M     0   96M   0% /run/user/1000
/dev/nvme1n1p1  500G   93G  408G  19% /mnt/nvme1n1p1
/dev/nvme2n1p1  150G   55G   96G  37% /mnt/nvme2n1p1

EBS Burst Balance всегда + 98%.

РЕДАКТИРОВАТЬ: это перестало происходить в новое время, когда я это сделал

Откройте Amazon Cloudwatch и просмотрите «CPUCreditBalance» для экземпляра. Посмотрите общее количество доступных кредитов с частотой дискретизации каждые 5 минут. Снижается ли количество кредитов почти до нуля в какой-то момент?

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-monitoring-cpu-credits.html

Экземпляр AWS типа «T» - это пакетный тип с ограниченной производительностью. Экземпляр t2.micro зарабатывает всего 6 кредитов ЦП в час. Это означает, что ваш ЦП может работать только при устойчивом использовании 10%, иначе он поглотит все свои кредиты и замедлится до сканирования.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-monitoring-cpu-credits.html

Увеличьте размер вашего типа экземпляра. Я бы порекомендовал перейти на экземпляр типа «C» достаточного размера, пока не будет выполнено копирование. Впоследствии вы можете вернуться к более мелкой версии.

Обновление 2019

Другой возможный и более вероятный ответ - это предел пропускной способности экземпляра, который был измерен и задокументирован. Вот. T2.micro имеет базовый уровень 0,06 Гбит / с, что составляет около 7,5 МБ / с, хотя он может увеличиваться примерно в 10 раз.

Кредиты EBS

Одна из возможностей заключается в том, что у вас закончились кредиты EBS, которые отличаются от баланса ЦП t2 / t3. Читать эта статья AWS об этом.

Добавьте «EBS Burst Balance» для всех своих томов на панель управления CloudWatch. Если какие-то из них равны нулю или близки к нулю, это ваш ответ. Если нет, продолжайте поиски.

Вот часть документации, на которую я ссылался.

Многие клиенты AWS добиваются отличных результатов с томами EBS общего назначения SSD (gp2), которые мы запустили в середине 2014 года (дополнительную информацию см. В разделе Новое эластичное блочное хранилище на основе SSD). Если вы не знаете, какой тип тома использовать для вашей рабочей нагрузки, лучше всего выбрать тома gp2 по умолчанию, поскольку они предлагают сбалансированное соотношение цена / производительность для широкого спектра рабочих нагрузок баз данных, разработки и тестирования, а также загрузочных томов. Одним из наиболее интересных аспектов этого типа объема является функция серийной съемки.

Мы разработали пакетную функцию gp2, чтобы соответствовать шаблонам ввода-вывода реальных рабочих нагрузок, которые мы наблюдали у нашей клиентской базы. Наши специалисты по анализу данных обнаружили, что объем ввода-вывода является чрезвычайно резким, кратковременным, с большим количеством простоев между пакетами. Этот непредсказуемый и прерывистый характер трафика является причиной того, что мы разработали пакетный сегмент GP2, чтобы позволить даже самым маленьким томам увеличиваться до 3000 IOPS и пополнять их пакетный сегмент во время простоя или при выполнении операций ввода-вывода на низком уровне. Конструкция Burst-Bucket позволяет нам обеспечивать стабильную и предсказуемую производительность для всех пользователей GP2. На практике очень немногие тома gp2 когда-либо полностью исчерпывают свой пакетный пакет, и теперь клиенты могут отслеживать свои шаблоны использования и соответствующим образом корректировать.

Мы много писали об оптимизации производительности для разных типов томов и различиях между тестированием и реальными рабочими нагрузками (дополнительную информацию см. В разделе «Характеристики ввода-вывода»). Как я описал в своем исходном посте, пакетные кредиты накапливаются со скоростью 3 на сконфигурированный ГБ в секунду, и каждый платит за одно чтение или одну запись. Каждый том может накапливать до 5,4 миллиона кредитов, и их можно потратить со скоростью до 3000 в секунду на каждый том. Для начала вы просто создаете тома gp2 желаемого размера, запускаете приложение, и ввод-вывод на том будет выполняться максимально быстро и эффективно.