Есть сервер с 2 Xeon Gold 6146, то есть 2*12 ядер. Два NUMA узла. Лицензия проф.
При запуске только одного рабочего процесса 1С он попадает в один узел и может использовать все 12 ядер, но нагрузка на двухпроцессорную систему не оптимальная, один процессор работает (и греется) больше другого.
Если запускать 2 процесса, то второй, "по ощущениям", тоже попадает в один узел с первым процессом, так как нагрузка не процессоры не перераспределяется. Может ли является ли такое поведение стандартным для лицензии проф, так как она не использует больше 12 ядер или рабочий процесс может запускаться на другом узле с освобождением соответствующего количества ядер на первом?
Если разговор про Виндоус идет, то в диспетчере задач в подробностях можно у рпхоста посмотреть, на каких ядрах/потоках он выполняется (пункт Задать сходство), по умолчанию на первых. Затем вручную перераспределить на нужные. Экспериментировать на боевом сервере не буду ) Несколько лет назад поднимался здесь такой вопрос. Вроде как, нарушением лицензионного соглашения это не было на тот момент. Другое, что это неудобно, создастся новый процесс, и не факт, что так же будет распределен по ядрам. А вообще да, неплохо бы более оптимально распределить нагрузку.
(1) С помощью Process explorer провел наблюдения. Сейчас 1с запускает 4 рабочих процесса, и 2 из них работают на всех ядрах 0 NUMA узла, 2 на всех ядра 1 NUMA узла. То есть, вроде как используется 24 ядра на проф лицензии. Другое дело, что 1с все соединения, потребляющие процессор держит на 1-м процессе, на оставшихся нагрузка небольшая. В итоге все равно 1 процессор перегружен.
На самом нагруженном рабочем процессе больше соединений (больше, чем задано в настройке рабочего сервера), больше время реакции сервера и все равно 1с новые процессы садит на него. Почему она так делает - не понимаю.
Если разговор про Виндоус идет, то в диспетчере задач в подробностях можно у рпхоста посмотреть, на каких ядрах/потоках он выполняется (пункт Задать сходство), по умолчанию на первых. Затем вручную перераспределить на нужные. Экспериментировать на боевом сервере не буду ) Несколько лет назад поднимался здесь такой вопрос. Вроде как, нарушением лицензионного соглашения это не было на тот момент. Другое, что это неудобно, создастся новый процесс, и не факт, что так же будет распределен по ядрам. А вообще да, неплохо бы более оптимально распределить нагрузку.
(3) Спасибо! К сожалению, в диспетчере задач нельзя увидеть, на каких процессорах/ядрах выполняется процесс, только задать. Мы выбрали путь увеличения количества рабочих процессов, чтобы они гарантированно попадали в разные ноды, путем задания параметра количество соединений на процесс в свойствах рабочего сервера 1С. Но этот параметр работает как-то странно: при значении 32 и 140 соединений создается 3 рабочих процесса с 76, 51 и 10 процессами (примерно:). При этом в диспетчере задач примерно по 90 потоков на каждом процессе. В общем, работает как-то не так, как описывается в тех. документации:)
В Windows NT и следующих версиях, привязка нитей и процессов можно устанавливаться отдельно с помощью вызовов API SetThreadAffinityMask[13] и SetProcessAffinityMask[14] или через интерфейс диспетчера задач (только для процессов).