У нас есть ситуация, когда на сервере с 8 ядрами инициализируется сервис за 6 минут, а для второго сервера с 32 процессорными ядрами требуется 35 минут для инициализации службы. После правильного профилирования мы увидели, что это связано с двумя API-интерфейсами ядра (get_counters и snmp_fold_field), которые пытаются собирать данные из всех существующих ядер и по мере увеличения количества процессорных ядер время выполнения занимает больше времени, чем ожидалось. Чтобы уменьшить инициализацию время, которое, как мы думали, отключили дополнительные ядра, а затем и инициализацию, включили все ядра процессора. Но в этом подходе мы также включаем синхронизацию всех ядер на вновь активированных ядрах, поскольку это ядро SMP.Как удалить накладные расходы, вызванные увеличением количества ядер процессора
Может ли кто-нибудь предложить нам, как эффективно сократить накладные расходы, вызванные повышенным ядром процессора?
Вместо код я предпочел бы объяснить функции инициализации этой определенного пользователя системы service.During инициализации этот сервис прокладывает виртуальные интерфейсы на настроенных IP-адресах. Чтобы избежать дублирования ситуации с IP-адресами для каждого настроенного IP-адреса, он создает внутренний IP-адрес, и вся связь выполняется на интерфейсах, наложенных на внутренний IP-адрес. По мере того, как пакет достигает системы с назначением в качестве настроенного IP, правила таблицы Mangling/NATting/Routing применяются к системы для его решения. Интерфейс также позволяет настроить Ip, чтобы избежать переадресации IP-адресов. Наша проблема заключается в том, что мы масштабируем нашу систему, настроенную на 1024 IP-адреса на 8-ядерном компьютере, это занимает 8 минут, а на 32 ядра - 35 минут.
Дополнительная отладка, выполненная с использованием системного профилирования Мы видели, что модуль ядра ARPtables/IPtables потребляет больше всего времени в «get_counters()», а модуль ядра IP потребляет время в snmp_fold_field(). Если я просто отключу правила ARPtables Mangling, время сократится до 18 минут с 35 минут. Я могу поделиться коллажами модулей ядра, собранными с использованием профилировщика.
Запишите небольшую программу, которая показывает поведение. –