Рейтинг:3

Vmware Esxi — старая проблема с производительностью 32-битного программного обеспечения на многоядерном процессоре

флаг cn

Уже 2 дня схожу с ума, прошу помощи.

У меня есть программа, разработанная в Delphi (около начала 2000-х годов), которая обращается к базе данных firebird v3, которая в настоящее время установлена ​​на том же компьютере (Windows Server 2016 x64 - db и программа x86).

Машина представляет собой виртуальную машину, настроенную на vmware esxi, я перехожу к сути: если я настрою виртуальную машину только с 1 виртуальным ЦП, программа работает очень хорошо, если я также настрою ее с 2 виртуальными ЦП (1 сокет и 2 ядра) или более, производительность снижается вдвое.

Проблема в том, что, оставив только один виртуальный ЦП, ЦП постоянно загружен на 100%, даже только для заданий сервера Windows (например, для поиска обновлений и прочего).

Есть ли у вас какие-либо рекомендации?

PS: я не могу переключиться на firebird x64, потому что многие библиотеки x86.

PPS: ОС на виртуальной машине — Windows Server 2016 Standard ed.

joeqwerty avatar
флаг cv
**Можете ли вы что-нибудь посоветовать?** - Если программа работает очень хорошо с 1 виртуальным ЦП, оставьте все как есть и игнорируйте загрузку ЦП. В противном случае перестройте приложение.
vidarlo avatar
флаг ar
Выясните, где находится узкое место, которое приводит к снижению производительности наполовину. У этой проблемы нет простого решения.
флаг cn
Попробуйте установить привязку процессора к ЦП 0 в диспетчере задач или с помощью команды start/affinity.
shodanshok avatar
флаг ca
Вы пытались настроить своего гостя с двумя сокетами, каждый из которых имеет одно ядро?
флаг cn
При использовании 1 виртуального ЦП без запущенного приложения вы получаете 100% загрузку ЦП только фоновыми службами Windows? Может быть, здесь что-то не так. Не уверен, какие у вас физические процессоры, но мне это не кажется нормальным.
флаг cn
Хорошо, это старое программное обеспечение, но на какой ОС работает? Тот, что в ВМ?
MenInTheMiddle avatar
флаг cn
ОС — Windows Server 2016 Standard edition.
Рейтинг:5
флаг cn

Оставьте гостя на одном процессоре. И задокументируйте причину в некоторых заметках об этом госте в инвентаре.

Сосредоточьтесь больше на показателях производительности приложений и меньше на вводящих в заблуждение основных показателях, таких как загрузка ЦП. Отвечают ли интерактивные приложения? Выполняются ли пакетные запросы за приемлемое время? Если это так, не беспокойтесь о процессоре.

Изменить: «Заблокировать» уровни плохой производительности не было в вашем исходном вопросе, это важный контекст. Решение этой проблемы может стоить дополнительных усилий:

  • Запланируйте время обслуживания, когда база данных выключается, для применения обновлений и других задач.
  • Увеличьте количество ЦП и примените конфигурацию CPUAffinity на уровне приложения, упомянутую в других комментариях, чтобы зафиксировать ее на одном.
MenInTheMiddle avatar
флаг cn
Я оставил гостя на 1 vCPU, все в порядке, пока сервер Windows не решил установить обновления (процесс установки модулей Windows ускоряет процессор до 100%, что приводит к полной блокировке процесса firebird)
Рейтинг:2
флаг ru

Если вы зафиксируете привязку процесса к одному ядру, другое ядро ​​останется свободным для других процессов. В зависимости от фактической проблемы с планированием может возникнуть необходимость настроить сервер Firebird на то же или другое ядро.

Однако, поскольку ESXi также виртуализирует ядра ЦП, он будет продолжать перемещать ядра виртуального ЦП между вашими физическими ядрами. Возможно, вам также потребуется исправить привязку виртуальных машин к определенным ядрам.

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

флаг ar
jpa
[Часто задаваемые вопросы по Firebird] (https://www.firebirdfaq.org/faq52/) также предлагают установить привязку к ЦП, хотя и через их собственный файл конфигурации.
Zac67 avatar
флаг ru
Это цифры, однако из-за виртуализации ЦП виртуальная машина, вероятно, также требует фиксации для определенных ядер.
MenInTheMiddle avatar
флаг cn
Я попытался установить маску привязки процессора к первому процессору (и я также пытался установить маску привязки к ядру # 0 в спецификациях vm) без заслуживающих внимания результатов. Последняя версия Firebird, похоже, имеет проблему с параметром маски привязки к процессору в файле конфигурации, о котором сообщается в [Давайте использовать 64-битное целое для маски привязки к процессору] (https://github.com/FirebirdSQL/firebird/commit/188c1c6176c63cff6eedd85806bd266352df11f0), Вы подтверждаете, что ошибка может быть причиной отсутствия результатов установки маски сходства процессора в firebird.conf?
Zac67 avatar
флаг ru
@MenInTheMiddle Если есть проблема с кэшированием, вам также необходимо исправить привязку виртуальной машины в дополнительных настройках ESXi/vSphere.
Рейтинг:0
флаг cn

Это известная проблема FireBird.

Я управлял некоторыми клиентами, которые используют FireBird для различного программного обеспечения, и статистику многопоточности сложно настроить с помощью .conf, но сначала вы должны установить Firebird с настройками, необходимыми для использования многопроцессорного классического сервера.

введите описание изображения здесь

Не забывайте, что клиентскому приложению также нужна многопоточная безопасная библиотека, если вы хотите быть уверенным.

Поточно-ориентированная клиентская библиотека

Поточно-ориентированная клиентская библиотека

Дмитрий Еманов
Владислав Хорсун
Алексей Пешков

Референс трекера CORE-707.

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

синхронизация.

MenInTheMiddle avatar
флаг cn
Спасибо за ответ. Я использую firebird 3 (суперсервер), версия 3 кажется оптимизированной для многоядерной работы (основными целями Firebird 3.0 были унификация серверной архитектуры и улучшение поддержки SMP и многоядерных аппаратных платформ - firebirdsql.org). Я все равно попробую с классической конфигурацией сервера, я дам вам знать
yagmoth555 avatar
флаг cn
@MenInTheMiddle о, хорошо, я не видел версии 3, тогда просто убедитесь, что вы используете сходство, тогда, если на суперсервере, по умолчанию классический, он вам не нужен, но на суперсервере он работает, но вам нужно установить настройки, если я правильно помню

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.