KDV, 01.09.2004, последнее обновление – 23.12.2004, 14.12.2005.
При использовании Firebird/Yaffil Classic или InterBase 7.1/7.5 у многих возникает вопрос – какой сервер выбрать? Многопроцессорный или нет? Включать на нем HyperThreading или нет?
Вполне возможно, что если сервер приобретается у поставщика" железа", такие вопросы вообще не возникают – используется базовая конфигурация, например 2-х процессорный сервер с включенным HT.
Однако, различные тесты, отклики и комментарии говорят о том, что технологию HyperThreading имеет смысл использовать (оставлять включенной) только на однопроцессорных рабочих станциях (!), но не на сервере.
Внимание! Возможно, вам будет достаточно прочитать
этот документ. Если интерес не пропал сразу, читайте дальше.
Причин, чтобы выключить HyperThreading на сервере, много:
Замечание. Каждый пункт в качестве пояснения, почему "это так", содержит ссылку на документ. Но это не значит, что вывод, описанный в конкретном пункте, сделан на основании этого документа. Разумеется, вы и сами сможете найти в интернете подтверждение изложенным фактам и опыту. Мы же руководствовались собственным опытом и тестами, сообщениями (тестами) других людей, а также многочисленными документами по HyperThreading.
- СУБД (Firebird, InterBase, Yaffil) является приложением, которое активно использует как процессор так и дисковую память. Причем, в зависимости от запросов, процессор и диск могут быть нагружены в разном процентном соотношении. А 100% загрузку как нескольких реальных так и виртуальных процессоров можно получить только на "вычислительных" приложениях.
- Включение HT на двухпроцессорном компьютере означает появление четырех виртуальных процессоров. Таким образом, при загрузке всех процессоров возрастает нагрузка на процессорную шину. Как результат, вместо увеличения производительности можно получить общее замедление работы на 10-15%.
- По различным сообщениям, при включении HT можно получить небольшой прирост производительности, ухудшение производительности, либо отсутствие изменения производительности в ту или иную сторону. Следовательно, результат можно увидеть только на конкретной комбинации материнской платы, памяти и процессоров.
Как минимум, InterBase 6.0 (который уже давно не поддерживается Borland), еще используемый в некоторых системах, реагирует на включение HT под Win2003 долгим временем коннекта и резким ухудшением производительности.
- По утверждению Intel и Microsoft, "сертифицированной" для HyperThreading операционной системой является только Windows 2003. Значит, на Windows NT и Windows 2000 скорее всего либо производительность не изменится при включении HT, либо упадет. То же самое относится и к Linux, т. е. HT нужно включать только на определенных версиях этой ОС.
Примечание. Тесты InterBase 7.1 на Windows 2000 и Windows2003 с включенным HyperThreading показали, что на Win 2000 производительность хуже, а если HT выключить, то одинакова. Поэтому по умолчанию параметр ibconfig ENABLE_HYPERTHREADING для IB 7.1 выключен (disabled).
- Существуют приложения (вообще), которые при включении HyperThreading именно на многопроцессорных компьютерах могут работать некорректно (сбоить).
[сделайте поиск bsod+hyperthreading в Google]
- Технология HyperThreading призвана повышать производительность multi-thread приложений. Следовательно, скорость выполнения двух процессов на двух виртуальных процессорах будет ниже, чем на двух физических процессорах. Если на сервере кроме СУБД есть другие активно работающие приложения, то при включении HT общая производительность должна упасть (это не относится к однопроцессорным системам – здесь может быть небольшой прирост производительности).
- В нашу службу техподдержки за последнее время было несколько обращений с ошибкой Stack overflow и повреждением баз данных под InterBase 7.1/7.5. Причиной оказалось включение HyperThreading (в основном это были двухпроцессорные серверы).
Дополнение
В тексте остался неозвученным вопрос – выбрать сервер с одним или несколькими процессорами. Ответ на него зависит от архитектуры выбираемого сервера и операционной системы.
В столбце "2 и более процессоров":
"Нет" – не рекомендуется, или имеет смысл привязать процесс сервера к одному процессору (например, для Windows через утилиту ibaffinity или через параметр CPU_AFFINITY в ibconfig/firebird.conf).
"Да" – этот вариант сервера под данной операционной системой будет использовать все процессоры. Для IB 7.x требуется приобретение процессорных лицензийLINK на каждый +1 физический процессор.
Для облегчения выбора "да" выделено жирным шрифтом.
Сервер |
Тип сервера |
Операционная система |
2 и более процессоров |
InterBase 6.0 |
SuperServer |
Windows |
нет |
Linux |
нет |
Solaris-SPARC |
нет |
Classic |
Linux |
да |
InterBase 6.5 |
SuperServer
|
Windows |
нет |
Linux |
нет |
Solaris-SPARC |
нет |
InterBase 7.x |
SuperServer |
Windows |
да |
Linux |
да |
Solaris-SPARC |
да |
Firebird 1.0 |
SuperServer |
Windows |
нет |
Linux |
нет |
Solaris-x86 |
нет |
HP-UX |
нет |
Classic |
Linux |
да |
Solaris-x86 |
да |
Solaris-SPARC |
да |
FreeBSD |
да |
MacOS/X |
да |
HP-UX |
да |
Firebird 1.5 |
SuperServer |
Windows |
нет |
Linux |
нет |
Classic |
Windows |
да |
Linux |
да |
FreeBSD |
да |
MacOS/X |
да |
sinixz |
да |
Solaris-x86 |
да |
Yaffil |
SuperServer |
Windows |
нет |
Classic |
Windows |
да |
Имена файлов дистрибутивов InterBase и Firebird могут содержать буквы cs (Classic) и ss (SuperServer). Дистрибутив Firebird 1.5 for Windows содержит в себе установку как Classic, так и SuperServer.
Для регулирования количества используемых сервером процессоров (только для Windows, SuperServer) существует параметр ibconfig CPU_AFFINITY (битовая маска).