Вопрос к разработчикам о правильном распределении агентов metatester между отдельными процессорами

 

Дано:

Имеюся двухпроцессорные сервера с Xeon 2650v2 ( в каждом 8 ядер/16 потоков, итого 16 ядер/32 потока ) и 512Гб оперативы

Вопрос к разработчикам, если я в VMWare ESX создаю для каждой NUMA ноды отдельную виртуальную машину с 8-мью ядрами и жесткой привязкой к ядрам ( в настройках первой виртуальной машины указываю ядра 0,2,4,6,8,10,12,14, во второй 16,18, 20, 22, 24, 26, 28, 30) и память выделяю по 192 Гб каждой

Делается это для того, чтоб VMWare ESX использовала для каждой виртуальной машины только память одной NUMA ноды, что увеличивает быстродействие приложений в каждой виртуалке примерно на 20-30%, по сравнению с вариантом, если просто сделать одну виртуалку под все ядра и всю память.

Далее я устанавливаю в каждой виртуалке по 8 агентов Metatester.


Теперь вопрос: не будет ли Metaquotes считать, что у меня всего один процессор, и что я выделил для каждой виртуалки по 8 потоков одного процессора? Что нарушает правила использования агентов для вознаграждения. Просто замечал, что на одну виртуалку практически не приходит заданий метатестерам, в отличие от второй.

И как правильно распределить агентов между процессорами, когда их несколько, чтоб не схватить какой-нибудь бан или еще что-то подобное?

Виртуальный хостинг для MetaTrader 5
Виртуальный хостинг для MetaTrader 5
  • www.mql5.com
Самый быстрый виртуальный выделенный сервер (VPS) для трейдинга на форексе от производителей терминала MetaTrader 4/5
 

Не надо создавать на таком физическом сервере никаких виртуалок ни в коем случае.

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

Тестер торговых стратегий запускается в виде отдельных процессов с четким учетом NUMA архитектуры. То есть, процессы тестера автоматически распределяются на NUMA ноды самим терминалом.

Мы механизм правильного распределения ресурсов в NUMA окружении отработали много лет назад.



Если речь о сдаче в аренду расчетных мощностей, то все остается в силе. Запустив 32 агента как независимые сервисы, вы отдаете операционке право автоматически их распределить по NUMA нодам.

Посмотрите на практике как все будет работать. В крайнем случае можно CPU Affinity вручную раскидать для процессов.

 
Renat Fatkhullin:

Не надо создавать на таком физическом сервере никаких виртуалок ни в коем случае.

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

Тестер торговых стратегий запускается в виде отдельных процессов с четким учетом NUMA архитектуры. То есть, процессы тестера автоматически распределяются на NUMA ноды самим терминалом.

Мы механизм правильного распределения ресурсов в NUMA окружении отработали много лет назад.



Если речь о сдаче в аренду расчетных мощностей, то все остается в силе. Запустив 32 агента как независимые сервисы, вы отдаете операционке право автоматически их распределить по NUMA нодам.

Посмотрите на практике как все будет работать. В крайнем случае можно CPU Affinity вручную раскидать для процессов.

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

Я пока вижу 3 варианта:

1) 2 виртуалки по 8 ядер с жестким указанием привязки к ядрам процессора, чтоб не получилось, что в двух виртуалках используются ядра одного и того же процессора. И по 8 агентов соответственно на каждую виртуальную машину (так сейчас делаю)

2) 2 виртуалки по 16 ядер также с жесткой привязкой к разным процессорам, но уже включая гипертрейдинговые ядра. И также по 8 агентов в каждую виртуалку с указанием CPU Affinity на физические ядра. (этот вариант на тот случай, если агентам нужно видеть сколько всего ядер в компьютере, включая гипертрейдиноговые)

3) 1 виртуалка на все 32 потока и операционка сама пусть выбирает, куда разместить агентов или привязываю ручками с помощью CPU Affinity. И запускаю в ней 16 агентов (по одному на каждое физическое ядро). 

Последний самый медленный вариант, т.к. в этом случае в операционку не передается информация о том, к какому процессору принадлежит тот или иной участок оперативной памяти и операционка будет использовать память без разбора и обращаться к памяти соседнего процессора через шинц QPI, вместо памяти текущего процессора.

------------

Тут в принципе больше интересует, умеет ли агент Metatester определять из виртуалки по серийному номеру или еще какой-то информации, что перед ним разные физические процессоры на двух виртуалках, а не один и тот же. Соответственно, если умеет, то тогда самыми быстрыми будут первые 2 варианта и их можно использовать. Если же не умеет различать процессоры сквозь гипервизор VMWare, то тогда скорее всего останется только использовать вариант 3 или всего одну виртуалку с ядрами одного только процессора.


Если речь о сдаче в аренду расчетных мощностей, то все остается в силе. Запустив 32 агента как независимые сервисы, вы отдаете операционке право автоматически их распределить по NUMA нодам.

Посмотрите на практике как все будет работать. В крайнем случае можно CPU Affinity вручную раскидать для процессов.

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

 
Всё просто, 32 виртуалки один поток :))))
Причина обращения: