
EDIT: Я не могу заставить свой экземпляр hs1.8xlarge AWS обеспечить высокопроизводительный ввод-вывод из еголокальные 24 привода. Пожалуйста, не рассказывайте мне, как ускорить тома EBS.
Контекст: После нескольких лет успешной работы Greenplum single-node edition 4.0.4.0 на экземпляре Amazon cc1.4xlarge (назовем его gp
), я решил, что было бы неплохо воспользоваться экземпляром hs1.8xlarge и его 24 жесткими дисками (48 ТБ raw), смонтированными локально, плюс 120 ГБ оперативной памяти. Назовем эту новую настройку hsgp
.
На gp
я смонтировал в RAID-0 20 томов EBS (учитывая, что тома EBS резервируются и относительно устойчивы к битовым ошибкам, я решил выбрать максимальную скорость).
Теперь, как я полагал, новый блестящий hs1.8xlarge просто красиво превзойдет эту установку. Пока что я ошибался. Группа небольших и простых запросов (по несколько миллионов строк каждый) в среднем выполняется за 900 мс для gp
, 2800 мс для hsgp
. Более крупные запросы (6 миллиардов строк) также показывают преимущество по крайней мере в 2–3 раза для gp
.
Я ни в коем случае не эксперт по уровням RAID, но я решил, что RAID-10 — разумный выбор для 24x 2TB дисков. Я использую ext4
RAID-массив с -m .1 -b 4096
опциями, и он смонтирован с -a noatime
.
Я заметил, что даже после трех дней, которые потребовались mdadm для настройки («повторной синхронизации дисков»), он не так быстр, как, по утверждениям Amazon, может обеспечить hs1.8xlarge: я получаю примерно 305 МБ/с записи, 705 МБ/с чтения. Amazon утверждает, что можно получить до 2,4 ГиБ/с последовательной записи, 2,6 ГиБ/с последовательного чтения.
Есть идеи, как добиться более производительной настройки?
Стоит ли мне отказаться от единого дискового пространства (массива с 24 дисками) и вместо этого использовать меньшие массивы, по одному на каждый ломтик Greenplum?
Ниже приведены подробности установки hsgp
:
Я использовал экземпляр hvm Amazon Linux ( amzn-ami-hvm-2013.09.1.x86_64-ebs (ami-d1bfe4b8)
) и обновил его до vmlinuz-3.4.71-63.98.amzn1
.
Параметры для настройки системы приведены ниже.
sysctl.conf:
# greenplum specifics in /etc/sysctl.conf
kernel.sem = 250 64000 100 512
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.shmall = 4294967296
kernel.sem = 250 64000 100 512
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.conf.all.arp_filter = 1
net.core.netdev_max_backlog=10000
vm.overcommit_memory=2
ограничения:
# greenplum specifics in /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
Подробности RAID-массива:
mdadm --create --verbose /dev/md0 --chunk=2048 --level=raid10 --raid-devices=24 /dev/xvd[b-y]
mkfs.ext4 -v -m .1 -b 4096 /dev/md0
mount -o noatime /dev/md0 /data
решение1
Ряд факторов, которые могут объяснить этот разрыв в производительности:
- Сравнивая 24-шпиндельный RAID-10 с 20-шпиндельным RAID-0, можно ожидать, что производительность записи тома будет максимальной на уровне 12x и 20x одного диска соответственно. Так что замедление в ~2X с самого начала не является безумием.
- Вы сделали размер вашего фрагмента всего 2КБ. По умолчанию он равен 512КБ. (поддерживающие бенчмарки).
- Фактическая цитата «Производительность чтения и записи 2,6 ГБ в секунду...с размером блока 2 МБ." (Источник). Размер вашего блока ext4 составляет 4 КБ, что в 512 раз меньше.
Вы также не указали подробности о настройке тома с поддержкой 20-EBS. Без указания размера и типа тома (ssd GP, ssd provisioned IOPS или magnetic) нам остается только гадать о размере уравнения целиком.
решение2
Если diskio является вашим узким местом, вы можете получить гораздо лучшую производительность и простоту управления, запустив том IOPS на скорости 4000G/s. Им легче управлять, чем RAID0 на обычных томах EBS, а возможность создания снимков EBS упрощает восстановление. Мои предварительные тесты показывают, что IOPS на 4000 быстрее, чем RAID0 с 6 шардами по 100G, но я не проводил тщательного и последовательного тестирования, чтобы дать точные цифры.