YellowBalancer: балансировщик процессов и потоков по группам NUMA

15.01.24

База данных - HighLoad оптимизация

Балансировщик распределения процессов 1С:Предприятия по процессорам групп NUMA (только для windows x64).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
YellowBalancer 1.0: балансировщик процессов и потоков по группам NUMA (архив исполняемого файла)
.zip 293,49Kb ver:1.0
3
3 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.0: балансировщик процессов и потоков по группам NUMA (архив исходных кодов)
.zip 18,46Kb ver:1.0
1
1 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.1: балансировщик процессов и потоков по группам NUMA (архив исполняемого файла)
.zip 323,00Kb ver:1.1
2
2 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.1: балансировщик процессов и потоков по группам NUMA (архив исходных кодов)
.zip 23,50Kb ver:1.1
0
0 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.2: балансировщик процессов и потоков по группам NUMA:
.zip 317,90Kb ver:1.2
5
5 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.2: балансировщик процессов и потоков по группам NUMA (архив исходных кодов)
.zip 24,19Kb ver:1.2
2
2 Скачать (1 SM) Купить за 1 850 руб.
YellowBalancer 1.4: балансировщик процессов и потоков по группам NUMA:
.zip 322,61Kb ver:1.4
10
10 Скачать (1 SM) Купить за 1 850 руб.

UPDATE 15.01.2024 YellowBalancer 1.4

Добавлена поддержка балансировки по numa-узлам в случае наличия только одной numa-группы.

UPDATE 04.02.2023 YellowBalancer 1.2

Добавлена поддержка работы в Windows Server 2019. Для тестирования доступа к процессам, конфигурации numa, счетчикам производительности добавлен режим запуска в консоли test. Благодарность Nabi911 за выявленную ошибку и содействие в исправлении.

UPDATE 06.11.2022 YellowBalancer 1.1

В версии 1.1 для решения о принятии балансировки используется информация о загрузке cpu по каждой numa группе. При запуске программы создаются файл settings.json с настройками по умолчанию (файл не совместим с файлом настроек от версии 1.0)

{ 
  "switching_frequency_in_seconds" : 10,
  "cpu_analysis_period_in_seconds" : 60,
  "log_storage_duration_in_hours" : 24,
  "maximum_cpu_value" : 70,
  "delta_cpu_values" : 30,
  "processes" : ["rphost.exe"]
}

switching_frequency_in_seconds - частота анализа выполнения балансировки, если необходимо (в секундах)

cpu_analysis_period_in_seconds - период скользящего окна загрузки CPU numa групп и USER_TIME процессов (в секундах)

log_storage_duration_in_hours - период хранения логов (в часах)

maximum_cpu_value - максимальное значение CPU любой numa группы, при котором принимается решение о балансировке (в процентах)

delta_cpu_values - разница потребления CPU между самой загруженной numa группой и самой незагруженной, при котором принимается решение о балансировке (в процентах)

processes - процессы, которые необходимо привязывать к numa группам.

Алгоритм балансировки:

1. Скользящим окном (длительность в параметре cpu_analysis_period_in_seconds) собирается загрузка CPU по numa группам. Показания cpu собираются раз в секунду.

2. Периодически (параметр switching_frequency_in_seconds) анализируются процессы, подлежащие балансировке (указанные в processes). По ним собирается потребление USER_TIME. Так же анализируется средняя загрузка CPU по каждой numa группе.

3. Если среднее значение CPU максимально загруженной numa группы превышает значение параметра maximum_cpu_value и разница CPU между самой загруженной numa группой и самой не загруженной превышает значение, указанное в параметре delta_cpu_values, то принимается решение о необходимости балансировки.

4. Процессы, подлежащие балансировке, сортируются по убыванию среднего USER_TIME и привязываются к numa группам по round robin.

YellowBalancer 1.0

При эксплуатации высоконагруженных систем на базе 1С:Предприятие на серверах, имеющих больше 64 процессоров и имеющих более одной группы NUMA столкнулись с неравномерным распределением процессов 1С по группам NUMA (см. скриншот "Потребление CPU без употребления потоками.png"). Для начала пробовали силами дежурной смены менять привязку процессов 1С:Предприятие к группам NUMA через Task Manager. Но это было возможно в основном только один раз. При повторной попытке через некоторое время возникала ошибка "Отказано в доступе". Было принято решение, использую API OS Windows, попробовать самим управлять распределением процессов и потоков по группам NUMA. В результате было создано приложение - служба windows. С результатом стороннего управления распределения загрузки по группам NUMA можно видеть на скриншоте "Потребление CPU с управлением потоками.png". Какого-то отрицательного воздействия при переключения thread с одной NUMA группы на другую замечено не было. Но т.к. процессоры стали загружаться более равномерно, то общая производительность системы выросла.

На текущий момент распределение процессов происходит следующим образом:

  1. Выбираются процессы, указанные в настройке "processes".
  2. Выбранные процессы сортируются по общему user time.
  3. Выбранные процессы распределяются по NUMA группам по алгоритму round robin.

Анализ загрузки CPU по NUMA группам при распределение процессов и потоков на текущий момент не используется.

С исходными кодами можно ознакомиться на Github. Для сборки необходима библиотека boost 1.79.0 или выше.

Проверено на ОС:

  • Windows 10 Home Edition
  • Windows Server 2012
  • Windows Server 2016

См. также

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    5429    ivanov660    12    

56

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    9611    Evg-Lylyk    61    

44

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    5247    spyke    28    

49

HighLoad оптимизация Программист Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    7795    vasilev2015    20    

42

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    12714    256    ZAOSTG    84    

115

HighLoad оптимизация Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Принимать, хранить и анализировать показания счетчиков (метрики) в базе 1С? Почему бы нет? Но это решение быстро привело к проблемам с производительностью при попытках построить какую-то более-менее сложную аналитику. Переход на PostgresSQL только временно решил проблему, т.к. количество записей уже исчислялось десятками миллионов и что-то сложное вычислить на таких объемах за разумное время становилось все сложнее. Кое-что уже практически невозможно. А что будет с производительностью через пару лет - представить страшно. Надо что-то предпринимать! В этой статье поделюсь своим первым опытом применения СУБД Clickhouse от Яндекс. Как работает, что может, как на нее планирую (если планирую) переходить, сравнение скорости работы, оценка производительности через пару лет, пример работы из 1С. Все это приправлено текстами запросов, кодом, алгоритмами выполненных действий и преподнесено вам для ознакомления в этой статье.

1 стартмани

24.01.2024    5885    glassman    19    

42

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    14974    doom2good    49    

71
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cdiamond 236 10.10.22 09:38 Сейчас в теме
Хотелось бы увидеть результаты нагрузочных тестов с балансировщиком и без него. Каков реальный прирост с именно с пользовательской точки зрения?
AllexSoft; +1 Ответить
2. sdf1979 206 10.10.22 17:32 Сейчас в теме
(1)Вечер добрый. Когда все rphost'ы на одной Numa группе, которая в итоге загружена в 100% cpu, а вторая группа загружена на 5-10% - какое тут может быть нагрузочное тестирование? Доходит до того, что снимаются дампы с нулевым смещением из-за фриза рабочих процессов. Отдаем себе отчёт, что переключение thread не бесплатно, поэтому в планах внедрить более интеллектуальное переключение.
3. cdiamond 236 10.10.22 17:47 Сейчас в теме
(2) Если фризы то конечно дело плохо.
Я задавая вопрос имел ввиду что если нагрузка не такая экстремальная и если учитывать что процессы rphost используют также и разделяемую память, то доступ к этой памяти от "дальнего" узла NUMA будет стоить гораздо больше, чем для "ближнего" узла, поэтому одна часть rphostов по идее должна быть быстрой, а другая часть наоборот медленнее, а если медленный rphost будет еще и блокировки накладывать, то результат может быть непредсказуемым. Поэтому интересен результат пользовательский.
Update Кстати можно же наверно реализовать так, чтобы все процессы раскидывало с учетом баз, т.е. все процессы одной базы были на одном узле, вторая база на другом и т.д.?
4. sdf1979 206 10.10.22 21:40 Сейчас в теме
(3)Управлять можно достаточно гибко. API позволяет привязывать не только process, но и thread к Numa группе и конкретному логическому процессору, т.к. называемая affinity mask. У нас проблемы возникают на рабочем сервере, где только фоновые задачи. На них две Numa группы. Мы стараемся держать четное количество рабочих процессов. Поэтому такое простое распределение нам очень зашло. Хотелось бы действительно провести нагрузочное тестирование до и после переезда, но пока не хватает и рук и времени.
5. Дмитрий74Чел 239 11.10.22 09:24 Сейчас в теме
А вы пробовали писать в техподдержку 1С? Хотелось бы чтобы вендор решал проблему, а не самим придумывать обходные пути.
6. sdf1979 206 11.10.22 10:09 Сейчас в теме
(5)Про эту проблему вендор знает давно. И даже если вот прям сейчас начнет её решать, то нужно будет ждать нового релиза. А у нас проблема здесь и сейчас.
user1715233; Upiterus; brr; +3 Ответить
7. triviumfan 97 11.10.22 11:50 Сейчас в теме
Платформа старовата, конечно, но наверняка они так и не исправили распределение нагрузки между numa.
Рарус когда-то предлагал изменить настройки в BIOS параметра NUMA Group Size Optimization с Clustered на Flat
ВайзАдвайз предлагает манипулировать количеством рабочих процессов (хз причём тут это).
А вообще тема интересная. Лайкос.
ЗЫ: А платформа ведь не корп?
8. sdf1979 206 11.10.22 15:05 Сейчас в теме
(7)Платформа то КОРП. Но балансировщику все равно, хоть процессы notepad раскидывать.
9. Lars Ulrich 625 11.10.22 18:44 Сейчас в теме
(7) Возможность настройки в BIOS как в примере у Раруса может варьироваться между производителями аппаратной части. В статье речь шла именно про HP, а, например, у Dell раньше такого не было.

Манипуляция с количеством рабочих процессов на практике действительно работала, утилизация повышалась. Но в этом случае появлялись накладные расходы на обслуживание большого количества самих рабочих процессов.
10. sdf1979 206 11.10.22 19:30 Сейчас в теме
(9)У нас Dell, админы сказали нет такой возможности. Два сокета по 18 процов. Итого с гипертрейлингом 72 на все. И всегда будет две группы Numa.
12. triviumfan 97 12.10.22 11:22 Сейчас в теме
(9)
Манипуляция с количеством рабочих процессов на практике действительно работала

И успешно работает, Антон Дорошкевич подтвердил.
11. geron4 196 12.10.22 08:50 Сейчас в теме
Насколько мне известно, 1С никак не решает проблему неравномерной загрузки ядер CPU, когда количество выделенных ядер для виртуальной машины превышает значение NUMA. Решение давно существует, делайте кластер 1С из нескольких ВМ, на ВМ не превышайте значение NUMA, т.е. кол-во vCPU <= NUMA.
user1715233; triviumfan; +2 Ответить
13. sdf1979 206 12.10.22 16:19 Сейчас в теме
(11)К сожелению ВМ не бесплатна с точки зрения cpu.
14. moksxxx 16.10.22 15:30 Сейчас в теме
Возможно программа "Process Lasso" как-то решит проблему.
15. sdf1979 206 16.10.22 16:26 Сейчас в теме
(14)Думаю решит, но есть нюанс - требуемый функционал платный.
16. moksxxx 17.10.22 00:45 Сейчас в теме
(15) Если надо ВСЁ лицензионное и 11 000 руб серверная лицензия Process Lasso за бессрочную лицензию, которая включает в себя все будущие версии продукта (Lifetime licenses https://bitsum.com/get-process-lasso-server-edition/), для организации имеющей сервер с 64 проц., лицензии на M$ сервер и M$ SQL, лицензии на сервер 1С и конфигурации, такая проблема, то возникает вопрос - а надо ли связываться с такой организацией, рассчитывающей поиметь все свои хотелки ещё и задаром, так мечтать вроде как еще не запретили...
17. sdf1979 206 17.10.22 09:51 Сейчас в теме
(16)Давайте не переходить к обсуждению организации и что она себе может позволить. Есть проблема, она успешно решена собственными силами. Исходные коды решения выложены на Github. Кто хочет - можно использовать как есть, можно свою ветку сделать. А можно купить и Process Lasso (с закрытым исходным кодом) и использовать его. Каждый делает выбор тот, который считает наиболее приемлемым.
18. Shmell 547 02.12.22 07:21 Сейчас в теме
Небольшой вопрос автору:

Имеется 3 Numa узла по 6 ядер. На третьем Numa узле - привязан mssql сервер. Лицензия 1С - Проф. Как отработает служба YellowBalancer? Она возьмет все rphost и раскидает по всем доступным трем узлам? Можно ли ограничить количество узлов или задать в настройках - на какие узлы раскидывать?
19. sdf1979 206 05.12.22 14:54 Сейчас в теме
(18) День добрый. На текущий момент в балансировке участвуют все numa группы, настройки по каким numa группам балансировать нет.
20. Nabi911 13.01.23 13:12 Сейчас в теме
Добрый день, попробовали балансировщик версия 1.1 используется Windows server 2019 , в логах системы идет следующая ошибка

2023-01-13 01:32:06.448;ERROR;Error get numa groups for process
2023-01-13 01:32:16.472;INFO;AVG for \\SERVER-001\Processor Information(_Total)\% Processor Time=53.207341
2023-01-13 01:32:16.476;INFO;AVG for \\SERVER-001\Processor Information(0,_Total)\% Processor Time=97.391672
2023-01-13 01:32:16.482;INFO;AVG for \\SERVER-001\Processor Information(1,_Total)\% Processor Time=9.023011
2023-01-13 01:32:16.486;INFO;AVG USER_TIME=12265625 for process rphost.exe with pid 18852
2023-01-13 01:32:16.491;INFO;AVG USER_TIME=364583 for process rphost.exe with pid 23332
2023-01-13 01:32:16.495;INFO;AVG USER_TIME=338541 for process rphost.exe with pid 38592
2023-01-13 01:32:16.498;INFO;AVG USER_TIME=312500 for process rphost.exe with pid 11420
2023-01-13 01:32:16.502;INFO;AVG USER_TIME=234375 for process rphost.exe with pid 46088
2023-01-13 01:32:16.506;INFO;AVG USER_TIME=208333 for process rphost.exe with pid 39612
2023-01-13 01:32:16.511;INFO;AVG USER_TIME=130208 for process rphost.exe with pid 31896
2023-01-13 01:32:16.515;ERROR;Error get numa groups for process

балансировщик запущен как приложение с правами Администратора, settings.json из примера. Можете подсказать в чем проблема? Система 2-х процессорная
21. sdf1979 206 04.02.23 17:14 Сейчас в теме
(20)Добрый день, ошибку поправил. Спасибо за обращение.
22. hudojnic 20.03.23 12:20 Сейчас в теме
Доброго дня!

Столкнулись с проблемой при которой при многократном назначении numa групп одному процессу, в какой-то момент очередная установка affinty для этого процесса становиться невозможна как этой программой, так и через диспетчер задач:

2023-03-17 05:38:03.451;INFO;AVG USER_TIME=91991041666 for process rphost.exe with pid 40004
2023-03-17 05:39:14.120;INFO;AVG USER_TIME=2901666666 for process rphost.exe with pid 18660
2023-03-17 05:40:23.877;INFO;AVG USER_TIME=12578125 for process rphost.exe with pid 37936
2023-03-17 05:41:32.170;INFO;rphost.exe;pid=40004;numa=[0];new numa=[0]
2023-03-17 05:42:26.847;INFO;rphost.exe;pid=18660;numa=[0,1];new numa=[1]
2023-03-17 05:43:23.035;ERROR;Error set thread affinity!
2023-03-17 05:44:06.150;INFO;rphost.exe;pid=37936;numa=[0,1];new numa=[0]
2023-03-17 05:45:02.400;ERROR;Error set thread affinity!

Есть идеи или может кто подсказать как избежать проблемы?
23. sdf1979 206 21.03.23 11:13 Сейчас в теме
(22)Добрый день!
Какую версию используете? Какая версия windows server?
24. hudojnic 22.03.23 17:10 Сейчас в теме
(23)
акая версия windows server?

Последнюю доступную на GitHub на 10 марта. Сервер 2019 Standart. Заметили что если просто менять руками через диспетчер affinity mask для rphost'а, то через некоторое количество операций смены может возникнуть ошибка access denied. С чем связано пока не понятно.
25. sdf1979 206 29.03.23 09:32 Сейчас в теме
(24)Добрый день! Сейчас в случае невозможность установить привязку для thread в лог выводится результат функции заглушки "ERROR;Error set thread affinity!" без описания ошибки. На наших серверах воспроизвести не удалось. Написал в личку, если есть возможность можно попробовать локализовать ошибку и исправить её.
26. user2035136 10.01.24 12:09 Сейчас в теме
Скрипт всегда кидает с 0 numa на 0, хотя видит numa 1
Вывод консоли
27. sdf1979 206 10.01.24 18:10 Сейчас в теме
(26) Не сталкивались с подобным поведением. Напишите в личку, что бы не разводить полемику тут, постараюсь помочь.
28. sdf1979 206 15.01.24 18:44 Сейчас в теме
(26) В версии 1.4 добавлена возможность балансировки по numa-узлам при единственной numa-группе.
29. Avu 26.04.24 11:46 Сейчас в теме
Добрый день,
есть ли возможность добавить в блансировщик возможность учитывать количество ядер в каждой NUMA?

В нашем случае в одной ~30, в другой ~60 и распределение по алгоритму roundRobin не дает нужного эффекта :(
30. sdf1979 206 26.04.24 12:36 Сейчас в теме
(29)Добрый день, теоретически возможно, с практической точки зрения вроде как редкий кейс с такой конфигурацией NUMA.
31. Avu 26.04.24 13:24 Сейчас в теме
Согласен, это кривая "специфическая" настройка ВМ скорее всего привела к такой конфигурации
Оставьте свое сообщение