Доказательство того, что исполняемый файл, выполняемый много раз с использованием общих объектов, работает правильно и использует меньше памяти, чем статически связанная версия - PullRequest
1 голос
/ 07 августа 2020

У меня есть двоичный файл для программы, написанной на C / C ++, которая будет запускаться много раз на одном сервере (Linux CentOS 7, x64), чтобы имитировать нагрузочный тест на удаленном сервере. Исполняемый файл может быть либо статически связан (.a), либо динамически связан (.so) с зависимыми библиотеками.

Чтобы запустить как можно больше копий, мы пытаемся запустить версию, которая использует динамический c связывание, чтобы разделить как можно больше памяти между процессами, однако, похоже, это не имеет никакого значения (во всяком случае, это немного хуже).

Например, для запуска 9000 копий статически связанного процесса используется 43 ГБ RAM, при использовании динамически связанного используется 48 ГБ RAM).

При использовании pmap -XX может показаться, что общие объекты используются правильно (например, для одного из них libPocoFoundation.so):

     Address Perm   Offset Device    Inode   Size   Rss   Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Referenced Anonymous AnonHugePages Swap KernelPageSize MMUPageSize Locked                   VmFlagsMapping
7f6a9498c000 r-xp 00000000  fd:00 26053805   1940  844  422          844            0             0             0        844         0             0    0              4           4      0       rd ex mr mw me sd  libPocoFoundation.so
7f6a94b71000 ---p 001e5000  fd:00 26053805   2044    0    0            0            0             0             0          0         0             0    0              4           4      0             mr mw me sd  libPocoFoundation.so
7f6a94d70000 r--p 001e4000  fd:00 26053805     60   60   60            0            0             0            60         32        60             0    0              4           4      0       rd mr mw me ac sd  libPocoFoundation.so
7f6a94d7f000 rw-p 001f3000  fd:00 26053805     16   16   16            0            0             0            16         16        16             0    0              4           4      0    rd wr mr mw me ac sd  libPocoFoundation.so

Существует значительное значение Shared_Clean для libPocoFoundation.so, поэтому я думаю, это работает нормально.

Все инструменты, которые я могу найти для проверки свободной памяти (meminfo.py, top, free, smem, htop), похоже, примерно согласны с тем, что количество используемой и свободной памяти одинаково, поэтому я склонен верить цифрам.

Все библиотеки (и исполняемый файл) скомпилированы с -fPI C с использованием gcc / g ++ 4.9.2 (должна быть более старая версия, так как этот продукт скомпилирован на очень старых платформах).

Может ли кто-нибудь объясните, почему это не работает (или, по крайней мере, не работает) или что я делаю неправильно?

Большое спасибо.

...