Советы по подбору оборудования

по сравнению с
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (71)

просмотр истории страницы
h2. Типы серверов
{toc}

|| Тип сервера || Описание || Плюсы || Минусы ||
| ATX | {color:#222222}Самостоятельно собранный или заказанный сервер из десктопных компонентов{color}\\ | {color:#222222}Такие сервера имеют высокую производительность за низкую цену.{color}\\ {color:#222222}С их помощью очень легко масштабироваться в ширину.{color}\\ {color:#222222}Компоненты легко приобрести.{color}\\ | Менее надёжны. \\
Не получится поставить в стандартную серверную стойку. |
| 1U, 2U | {color:#222222}Одноюнитовые и двухюнитовые сервера для установки в стойку.{color}\\ | {color:#222222}Верхний сегмент таких серверов позволяет проводить вертикальное масштабирование, то есть обрабатывать б{color}{color:#222222}{_}о{_}{color}{color:#222222}льший объём трафика в рамках одного сервера.{color}\\ {color:#222222}Высокая надёжность.{color}\\ {color:#222222}Чем меньше серверов - тем проще их администрировать.{color} | Высокая цена. \\
На некоторые модели сложно найти поставщика. |
h2. Процессоры


h2. Процессоры
_Гипертрединг_ \- необходимо отключить. Число ядер (cores) у процессоров в таблице ниже указано с учётом отключенного гипертрединга.

* гипертрединг - нужно отключать. число ядер (cores) у процессоров ниже указано с учётом отключенного гипертрединга.
* 4\+ ядра - хорошо
* Intel - хорошо, с AMD могут быть проблемы

Рекомендуется:

* 4 или более ядер.
* Призводитель --- Intel.
* Чем больше L3 кэш, тем лучше.
* 3GHz\+ частота - хорошо
* очень много ядер, но с маленькой частотой - не хорошо.
* несколько socket'ов (физических процессоров):
** если используется несколько сетевых карт для зеркала - хорошо
** если одна - имеет мало смысла и в некоторых случаях может быть хуже, чем на одном сокете.
** если у материнской платы один PCI слот или оба привязаны к одному процессору - плохо.

Не рекомендуется:

* Очень много ядер, но с маленькой частотой.
* Призводитель --- AMD


Для серверов с _несколькими_ физическими процессорами (sockets) нужно использовать материнские платы с несколькими PCI слотами, привязанными к разным процессорам. На каждый физический процессор должна использоваться отдельная сетевая карта (не порт), установленная в PCI-слот соответствующего ей процессора.



h3. Число процессоров

В идеале число процессоров = числу принимающих зеркало трафика сетевых карт. Иногда проще и дешевле масштабироваться, устанавливая дополнительные сервера и отправляя доп. зеркала трафика в них, чем покупать один мощный сервер с несколькими процессами и сетевыми картами.
* если сетевая карта 1, а процессора 2 - большой выгоды от использования 2 процессоров не будет.
* если сетевых карты 2, а процессор 1 - ничего страшного, главное чтобы его ресурсов хватало на обработку трафика.
* если сетевых карты 3, а процессора 2 --- лучше установить ещё 1 сервер.
* если сетевая карта 1, но двухпортовая, а процессора 2 - либо 2й процессор будет простаивать, либо один из портов будет обрабатываться с 10-30% эффективности.
* если сетевых карты 2, процессора 2, _но_ обе сетевые карты установлены в PCI слоты, принадлежащие к одной NUMA-ноде, либо 2й процессор будет простаивать, либо работать с 10-30% эффективности.

Среднестатистические системы с одним процессором в теории способны обрабатывать от 2 до 7 Гб трафика.

h3. Частота

Частота - один из самых важных показателей процессора. От него зависит сколько пакетов в секунду на 1 ядро способен обработать сервер.

* 2.0 - 2.4 GHz процессоры неэффективны в обработке трафика вне зависимости от числа ядер.
* 3.0 GHz приемлемо.
* 3.2 GHz\+ оптимально.
* 3.8 GHz отлично.

h3. Число ядер

* 1 ядро / процессор --- запрещено.
* 2 ядра / процессор --- не рекомендуется.
* 4 ядра / процессор --- рекомендуемый минимум.
* 6 ядер / процессор --- не всегда хорошо, из-за особенностей некоторых сетевых карт лучше выбирать процессоры с числом ядер, кратным степени двойки (4, 8, 16).
* 8 ядер / процессор --- хорошо.
* Гипертрединг нужно выключить, а число тредов не учитывать.

h3. L3 кэш

* Процессоры без L3 кэша в 99% признак того, что остальное железо (материнская плата, оперативная память)--\- старое и слабое.
* Чем больше L3-кэша тем лучше.

h3. Примеры одно\- и многопроцессорных решений


|| Трафик || Однопроцессорное решение \\ || Многопроцессорное решение \\ ||
| 10 Гбит/сек + \\ | Здесь не получится обойтись одним процессором. Можно масштабироваться \\
по числу серверов: на каждую точку съёма зеркала трафика установить \\
Можно масштабировать по числу серверов: \\
на каждую точку съёма зеркала трафика установить  отдельный недорогой сервер. \\
Это окажется дешевле при покупке, но, возможно, усложнит эксплуатацию \\
отдельный недорогой сервер. Это окажется дешевле при покупке, но, возможно, усложнит эксплуатацию (все сервера нужно администрировать). | * Intel® Xeon® Gold 6154 Processor, 3,00GHz, 4 sockets, 18 cores, 25M L3 cache
* Intel® Xeon® Gold 6144 Processor, 3.50 GHz, 4 sockets, 8 cores, 25M L3 cache
* Intel® Xeon® E5-2687W v4 @ 3.00GHz, 2 sockets, 12 cores, 30M L3 cache
* Intel® Xeon® E5-2689 v4 @3.10GHz, 2 sockets, 10 cores/socket, 25M L3 cache
* Intel® Xeon® E5-2690 @ 2.90GHz, 2 sockets, 8 cores/socket, 20M L3 cache |
| до 5 Гбит/сек \\ | Серверные процессоры \\
| до 5 Гбит/сек \\ | * Intel(R) Xeon(R) CPU W-2145 @ 3.70GHz, 8 cores, 11M L3 cache
* Intel(R) Xeon(R) CPU E5-1680 v4 @ 3.40GHz, 8 cores, 20M L3 cache
* Intel(R) Xeon(R) E5-2667 V4 @ 3.20GHz, 8 cores, 25M L3 cache
* Intel(R) Xeon(R) CPU E5-1660 v2 @ 3.30GHz, 6 cores, 16M L3 cache
* Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1270 @ 3.40GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz, 4 cores, 6M L3 cache
* Intel(R) Xeon(R) CPU E3-1240 @ 3.30GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz, 4 cores, 8M L3 cache
* Intel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz, 4 cores, 8M L3 cache\\
Десктопные процессоры \\
* Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, 4 cores, 8M L3 cache
* Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz, 4 cores, 6M L3 cache
* Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz, 4 cores, 6M L3 cache
* Intel(R) Core(TM) i5-4460 CPU @ 3.20GHz, 4 cores, 6M L3 cache | * Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz, 2 sockets, 6 cores/socket, 16M L3 cache
* Intel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz, 4 cores, 8M L3 cache | * Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz, 2 sockets, 6 cores/socket, 16M L3 cache
* Intel(R) Xeon(R) CPU X5650 @ 2.67GHz, 2 sockets, 6 cores/socket, 12M L3 cache
* Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz, 2 sockets, 6 cores/socket, 16M L3 cache
* Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz, 2 sockets, 4 cores/socket, 10M L3 cache
* Intel(R) Xeon(R) CPU X5570 @ 2.93GHz, 2 sockets, 4 cores/socket, 8M L3 cache
* Intel(R) Xeon(R) CPU E5645 @ 2.40GHz, 2 sockets, 6 cores/socket, 12M L3 cache |
* Intel(R) Xeon(R) CPU E5530 @ 2.40GHz, 2 sockets, 4 cores/socket, 8M L3 cache |



h2. Как оценивать сервер

h3. Сервер есть под руками
h2. Сетевые карты

Установите CentOS 6 или CentOS 7

Выполните:
h3. Размер rx-буфера

{code}
yum -y install epel-release
yum -y install python-pip
pip install netutils-linux
sudo server-info rate
{code}
* Менее 1024 - не рекомендуется.
* 2048-4096 - пригодно в общем случае.
* 8192 - отлично.

Для более общей оценки можно:
h3. Драйвер

{code}
cd /root/server/
# оценка с точностью до девайса
server-info-rate -f
# оценка с точностью до подсистемы
server-info-rate -ff
# оценка сервера целиком
server-info-rate -fff
{code}
От драйвера и модели карты зависит, что он умеет, например
* управление числом очередей
* управление размером буфера
* управление распределением пакетов между процессорами

Зафиксированные нами "рекорды" эффективной работы (без потерь и задержек обработки пакетов) сетевых карт, в зависимости от драйвера:

h3. Сервер только планируется собирать
* mellanox
** mlx5_core - 7500 mbit/s
** mlx4_en - 6500 mbit/s
* intel:
** i40e - 6000 mbit/s
** ixgbe - 4000 mbit/s
** igb - 800 mbit/s
** e1000e - 80 mbit/s
** e1000 - 50 mbit/s
* broadcom:
** bnx2x - 100 mbit/s
* r8169, ATL1E, 8139too - эффективная работа не фиксировалось.

Смотрите инструкцию ниже и консультируйтесь с нашей технической поддержкой.
h3. Число очередей

* Сетевые карты с одной очередью не рекомендуются для использования.
* Некоторые сетевые карты (Mellanox, Intel X710) способны работать только с числом очередей кратным степени двойки, использование 6-, 10-, 12-, 14-, 18\- ядерных процессоров с ними может быть неэффективно.

h2. Процессор
h3. Число портов

* Порты одной сетевой обрабатываются одним процессором (принадлежат к 1 NUMA-ноде), поэтому:
** Двухпортовые сетевые карты имеет смысл использовать только при сборе бонда (LAG)
** При наличии двух процессоров в системе лучше приобрести две однопортовые карты и вставить их в слоты так, чтобы они принадлежали к разным NUMA-нодам.

h3. Число процессоров

* В идеале число процессоров = числу принимающих зеркало трафика сетевых карт. Отсюда два вывода:
** если сетевая карта одна, а процессора два - большой выгоды от использования 2 процессоров не будет.
** если сетевых карты две, а процессор один - они будут конфликтовать за его ресурсы, что неэффективно.
** если сетевых карты три, а процессора два - может проще установить ещё один сервер?
** если сетевая карта 1, но двухпортовая, а процессора два - один из портов будет обрабатываться значительно менее эффективно.
** если сетевых карты две, процессора два, но обе сетевые карты принадлежат к одной NUMA-ноде, они будут использоваться неэффективно.
* Среднестатистические системы с одним процессором в теории способны обрабатывать около 2-4гб трафика.
* Однако можно масштабироваться не в рамках одного сервера, а устанавливая дополнительные сервера.

h3. Частота
Большинство сетевых карт имеют неоптимальные настройки по умолчанию, что может приводить к пропускам. Carbon Reductor DPI настраивает часть параметров автоматически при загрузке.

* Частота - один из самых важных показателей процессора. В каком-то роде по нему можно судить сколько пакетов в секунду на 1 ядро способен прожевать сервер.
* 2GHz процессоры не очень эффективны в обработке трафика.
* 2.8GHz приемлемо.
* 3.2GHz\+ оптимально
* 4GHz хорошо, но, обычно, дорого
* Для сетевых карт имеющих несколько очередей, распределение прерываний (RSS) настраивается автоматически на том процессоре, к которому эта сетевая карта привязана.
* Количество очередей не меняется, в случае с несколькими процессорами его нужно настроить вручную (настройки сети в /etc/sysconfig/network-scripts/ifcfg-ethX, параметр ETHTOOL_OPTS).
* Для сетевых карт не поддерживающих распределение прерываний, настраивается RPS, что также распределяет нагрузку между ядрами.
* Размер буфера устанавливается автоматически, если это возможно.

h3. Число ядер
При установке нового оборудования обращайтесь в техническую поддержку - мы поможем исключить потери пакетов и подтвердим, что оборудование справляется с текущей нагрузкой.

* 8 ядер на процессор - это хорошо.
* 1 ядро на процессор - это очень плохо.
* Гипертрединг в общем случае лучше выключить, а число тредов не учитывать:
** Гипертрединг для 1 ядра почти бесполезен.
** Гипертрединг для 8\+ ядер может быть незначительно вреден.
h3. Рекомендованные

h3. L3 кэш
|| Вендор || Модель || Тип || Число \\
очередей \\
(макс.) || Размер \\
буфера \\
(макс.) || Макс. наблюдавшаяся \\
нагрузка {color:#000000}{*}на 1 порт *{color}с \\
отсутствием потерь и \\
др. проблем || Проблемы ||
| Mellanox | MT27520 Family \\
\[ConnectX-3 Pro\] | 10 Гбит/сек | rx=128 | rx=8192 | 6.5 Гбит/сек | Число очередей может быть равным  \\
только степени двойки, неэффективно \\
на 6-, 10-, 12-, 14-, 18-ядерных процессорах |
| Broadcom \\
Emulex | OneConnect 10Gb NIC (be3) \\
Device e729 | 10 Гбит/сек | combined=4 | rx=1024 \\
tx=2048 | 1 Гбит/сек | Малое максимальное число \\
очередей, малый размер rx-буфера. \\
Подойдёт для 800-900мбит/сек. \\
Нужно увеличивать параметр модуля \\
rx_frag_size *\** |
| Intel | 82599ES, 82599EB (2 порта) \\
82599EN (1 порт) \\
(ixgbe driver) | 10 Гбит/сек | combined=63 | rx=4096 \\
tx=4096 | 3.5 гбит/сек | Необходимо [отключать опции LRO и GRO|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=65799130]. \\
В остальном хороши, популярны, легко купить \\
замену при  необходимости |
| Intel | X710 (i40e driver) | 10 Гбит/сек | combined=64 | rx=4096 | 4.5 Гбит/сек | Скорее всего способна обрабатывать и больший \\
объём трафика. |
| Intel | I210, I211, I350 \\
(igb driver) \\
82576, 82575EB \\ | 1 Гбит/сек | combined=8 \\
(иногда rx и \\
tx очереди \\
раздельны) | rx=4096 \\
tx=4096 | 800 мбит/сек | В некоторых ситуациях требует \\
пересборки драйвера без поддержки \\
LRO, в противных случаях зависает. |

* Процессоры с L2-only кэшем могут быть не такими уж плохими, но в 99% это сигнализирует о том, что остальное железо (материнская плата, оперативная память) старое и слабое.
* Чем больше L3-кэша тем лучше.
*\* увеличение rx_frag_size для Emulex*

h2. Сетевые карты
Из коробки иногда не хватает значения rx_frag_size, из-за чего растёт счётчик dropped пакетов, но решается выполнением:


h3. Размер rx-буфера

* Меньше 1024 - не рекомендуется
* 2048-4096 - пригодно в общем случае
* 8192 - отлично

h3. Драйвер

От драйвера и модели карты зависит, что он умеет, например
* Управление числом очередей
* Управление размером буфера
* Управление распределением пакетов между процессорами

Выдержка из кода утилиты server-info, в комментарии - наблюдаемая беспроблемная работа сетевых карт, использующих этот драйвер:

{code}
'driver': {
'mlx5_core': 10, # 7500 mbit/s
'mlx4_en': 9, # 6500 mbit/s
'i40e': 8, # 6000 mbit/s
'ixgbe': 7, # 4000 mbit/s
'igb': 6, # 400 mbit/s
'bnx2x': 4, # 100 mbit/s
'e1000e': 3, # 80 mbit/s
'e1000': 3, # 50 mbit/s
'r8169': 1, 'ATL1E': 1, '8139too': 1, # real trash, you should never use it
}
echo "options be2net rx_frag_size=8192" > /etc/modprobe.d/be2net.conf
reboot
{code}

h3. Число очередей

* Сетевые карты с одной очередью не рекомендуются
** Компенсировать их неэффективность можно с помощью технологии RPS
* Сетевые карты с 1 rx-очередью и 1 tx-очередью тоже не подходят, т.к. TX-трафика при приёме зеркала нет
* Некоторые сетевые карты умеют работать только с числом очередей кратным степени двойки, использование 6-ядерных процессоров с ними неэффективно.

h3. Число портов

* Порты одной сетевой обрабатываются одним процессором (принадлежат к 1 NUMA-ноде), поэтому:
** Двухпортовые сетевые карты имеет смысл использовать только при сборе бонда (LAG)
** При наличии двух процессоров в системе лучше приобрести две однопортовые карты и вставить их в слоты так, чтобы они принадлежали к разным NUMA-нодам.

h2. Материнская плата и корпус

h3. Тип оперативной памяти

* {color:#222222}Используйте DDR4-память{color}
* Используйте DDR4-память
* {color:#222222}В В крайнем случае DDR3, но это станет узким горлышком при апгрейде сервера{color}
* {color:#222222}DDR1 и DDR2 память не рекомендуется использовать при любом объёме трафика, она слишком медленная{color}

h3. Число модулей оперативной памяти

Для оптимальной производительности используйте число модулей не меньше чем по формуле: число каналов памяти процессора * число процессоров.

h3. Форм-фактор

|| Тип сервера || Описание || Плюсы || Минусы ||
| ATX | {color:#222222}Самостоятельно собранный или заказанный сервер из десктопных компонентов{color}\\ | {color:#222222}Такие сервера имеют высокую производительность за низкую цену.{color}\\ {color:#222222}С их помощью очень легко масштабироваться в ширину, докупая при необходимости новые сервера.{color}\\ {color:#222222}Компоненты легко приобрести.{color}\\ | Менее надёжны. \\
Не получится поставить в стандартную серверную стойку. |
| 1U, 2U | {color:#222222}сервера для установки в стойку.{color}\\ | {color:#222222}Верхний сегмент таких серверов позволяет проводить вертикальное масштабирование, обрабатывая б{color}{color:#222222}{_}о{_}{color}{color:#222222}льший объём трафика в рамках одного сервера.{color}\\ {color:#222222}Высокая надёжность.{color}\\ {color:#222222}Чем меньше серверов - тем проще их администрировать.{color} | Высокая цена. \\
На некоторые модели сложно найти поставщика. |