23 июня 2015

Выделение вычислительных ресурсов для OpenStack


Говоря о ресурсах, нужно заметить что OpenStack позволяет подтверждать виртуальным машинам больше физической памяти и вычислительных ресурсов, чем имеется в наличии. По умолчанию планировщик ассоциирует с одним физическим или «гипертрейдинговым» ядром 16 виртуальных процессоров (vCPU). Объем памяти, выделяемой виртуальным машинам по умолчанию в полтора раза больше, чем имеющийся физический. За эти значения в конфигурационном файле /etc/nova/nova.conf отвечают параметры:

cpu_allocation_ratio=16.0
ram_allocation_ratio=1.5

В целом, по рекомендациям в списках рассылки OpenStack для памяти выбирают значение 0.9. Также рекомендуется задать резервирование оперативной памяти при помощи параметра reserved_host_memory_mb в nova.conf. Обычно в расчетах можно руководствоваться закладывая на накладные расходы порядка 100 Мб на одну виртуальную машину. Обязательно нужно предусмотреть swap, как минимум вдвое больший чем этот параметр. Для процессора коэффициент сильно зависит от нагрузки. Обычно память становится раньше «бутылочным горлышком», чем ресурсы центрального процессора. Если запускается много требовательных к ЦП приложений типа Hadoop, то коэффициент выставляется ближе к 2, а иногда и к 1. Если основная нагрузка веб-сервера, то число можно увеличить вплоть до 16 заданного по умолчанию. Если вы не можете разделить типы нагрузки, то можно попробовать использовать коэффициент от 2 до 5.
Рекомендуется по возможности ограничить в своем облаке использование flavor (типы виртуальных машин) с числом vCPU более одного. Для гипервизоров первого типа намного проще выделить ресурсы виртуальной машине с 1 vCPU. Например, для выделения вычислительных ресурсов машине типа m1.xlarge планировщику гипервизора необходимо будет ждать пока не освободятся восемь физических ядер центрального процессора.
Для целей приблизительного «сайзинга» (определения достаточных аппаратных требований) можно воспользоваться калькулятором от Mirantis — https://www.mirantis.com/openstack-services/bom-calculator/. Еще один калькулятор приводится в руководстве по планированию архитектуры OpenStack на официальном сайте OpenStack — https://github.com/noslzzp/cloud-resource-calculator/blob/master/cloud-resource-calculator.ods.
Полезной командами для сбора статистики по использованию оперативной памяти будет nova diagnostics. По умолчанию ее выполнять может только пользователь admin. В качестве аргумента команде необходим идентификатор экземпляра виртуальной машины:

$ nova diagnostics
6aec269e-2633-4c56-9a61-7b8cb084995e
+---------------------------+-------------+
| Property                  | Value       |
+---------------------------+-------------+
| cpu0_time                 | 34150000000 |
| memory                    | 307200      |
| memory-actual             | 307200      |
| memory-rss                | 127812      |
| tap6fc6b1e7-e7_rx         | 10177       |
| tap6fc6b1e7-e7_rx_drop    | 0           |
| tap6fc6b1e7-e7_rx_errors  | 0           |
| tap6fc6b1e7-e7_rx_packets | 97          |
| tap6fc6b1e7-e7_tx         | 11576       |
| tap6fc6b1e7-e7_tx_drop    | 0           |
| tap6fc6b1e7-e7_tx_errors  | 0           |
| tap6fc6b1e7-e7_tx_packets | 116         |
| vda_errors                | -1          |
| vda_read                  | 17636864    |
| vda_read_req              | 731         |
| vda_write                 | 324608      |
| vda_write_req             | 98          |
+---------------------------+-------------+

Еще одна полезная подкоманда virsh dommemstat которую необходимо использовать непосредственно на вычислительном узле. Для начала необходимо узнать имя виртуальной машины:
[root@os2 ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 2     instance-00000036              running
После чего можно отдать непосредственно команду virsh dommemstat:

[root@os2 ~]# virsh dommemstat
instance-00000036
actual 307200
rss 127812
Также могу порекомендовать запись в моем блоге о структурах памяти Linux, на которую я всегда ссылаюсь читая курс о настройке производительности в GNU/Linux (интересно, что это - самая популярная запись :) — http://markelov.blogspot.ru/2009/01/linux-procmeminfo.html.

Комментариев нет: