Я работаю на Linux для процессора ARM для кабельного модема.Я написал инструмент, который отправляет / отправляет настроенные UDP-пакеты, используя необработанные сокеты.Я формирую пакет с нуля, чтобы у нас была возможность играть с разными вариантами.Этот инструмент предназначен в основном для стресс-тестирования маршрутизаторов.
У меня на самом деле создано несколько интерфейсов.Каждый интерфейс будет получать IP-адреса с использованием DHCP.Это сделано для того, чтобы модем вел себя как виртуальное абонентское оборудование (vcpe).
Когда система запускается, я запускаю те процессы, которые запрашиваются.Каждый процесс, который я запускаю, будет непрерывно отправлять пакеты.Таким образом, процесс 0 будет отправлять пакеты, используя интерфейс 0 и так далее.Каждый из этих процессов, которые отправляют пакеты, разрешает настройку (изменение параметров UDP и других параметров во время выполнения).По этой причине я решаю иметь отдельные процессы.
Я запускаю эти процессы, используя fork и исключая процессы инициализации модема.
Проблема в том, что каждый процесс занимает много памяти.Запуск всего 3 таких процессов приводит к сбою и перезагрузке системы.
Я пробовал следующее:
Я всегда предполагал, что передача большего количества кода в общие библиотеки поможет.Поэтому, когда я попытался переместить многие функции в разделяемую библиотеку и сохранить минимальный код в процессах, к моему удивлению это не имело никакого значения.Я также удалил все массивы и заставил их использовать кучу.Однако это не имело никакого значения.Это может быть потому, что процессы работают непрерывно, и не имеет значения, стек это или куча?Я подозреваю, что процесс, от которого я называю разветвление, огромен, и это является причиной того, что процессы, которые я делаю, являются огромными.Я не уверен, как еще я мог пойти.скажем, процесс A огромен -> я запускаю процесс B, разветвляясь и выполняя функции.B наследует область памяти A.Так что теперь я делаю это -> A запускает C, который запускает inturn B, также не поможет, так как C все еще наследует A ?.Я использовал vfork как альтернативу, которая тоже не помогла.Я удивляюсь, почему.
Буду признателен, если кто-нибудь даст мне советы, которые помогут мне уменьшить память, используемую каждым независимым дочерним процессом.