Привет всем. Вопрос по использованию памяти при fork.

Есть у меня perl приложение, которое создает дочерние рабочие процессы.
Родительский процесс постоянно дает дочерним задания, дочерние отправляют 
ответы в главный. Количество дочерних процессов постоянно.

В дочерних процессах кроме perl кода исполняется C код: парсер html страничек и 
Curl (если используется).

Приложение может использовать в качестве HTTP клиента: LWP, Curl, 
AnyEvent::HTTP.

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


              LWP                Curl          AnyEvent::HTTP
       FreeBSD     Linix   FreeBSD   Linix   FreeBSD        Linix
 0      15         17       20        17       38           20
 1      23         26       35        20       47           25
 2      33         38       50        25       62           33
 3      43         51       64        30       80           40
 4      53         65       76        34       93           47
 5      61         78       84        37      109           55
 6      67         89       98        42      119           62
 7      75        103      105        45      126           69
 8      85        116      115        50      146           76
 9      93        126      122        52      153           83
10     103        136      130        57      166           91

Удивило сравнение с Linux.

Как можно это объяснить и что можно подкрутить?


P.S. OS обе 32 под KVM. Размер страниц одинаков.

FreeBSD 9.3
Perl v5.18.4
curl 7.39.0, Features: AsynchDNS IPv6 Largefile GSS-API SPNEGO NTLM NTLM_WB SSL 
libz

linux 3.16
Perl v5.14.2
curl 7.33.0 Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB 
SSL libz TLS-SRP

Грешил на версию perl, но потом и на Linux использовал Perl v5.18.4. Цифры 
увеличились, но в целом картина не поменялась:

Linux
          Perl v5.14.2    Perl v5.18.4
Curl 6 6      43               46
AE   6 6      63               71

(6 6 - это 6 fork, в каждом из которых по 6 IO)

Ответить