Memory allokering i Python.

From: doozer@freakout.dk
Date: Fri 24 Oct 2003 - 15:44:07 CEST


Date: Fri, 24 Oct 2003 15:44:07 +0200 (CEST)
Subject: Memory allokering i Python.
From: doozer@freakout.dk
To: bsd-dk@bsd-dk.dk

Hej venner,

Jeg er i gang med et diskanalyseværktøj i python som _kørte_ på
en FreeBSD 4.8 box. Under en tur i profileren viste det sig at
programmet brugte det meste af sin tid på break systemkald.

Jeg har isoleret funktionaliten i vedhæftede python script.
(Hvis jeg lod jer se den rigtige kode ville jeg være tvunget
til at slå jer allesammen ihjel!)

Hvis man kører en:
$ truss -o freebsd.truss.out ./example.py

kan man efterfølgende tælle 41292 break() kald:
$ grep ^break freebsd.truss.out | wc -l
41292
..på en FreeBSD box.

Kører man en:
$ strace -o linux.strace.out ./example.py

på en Linux box, kan man tælle 22017 kald til brk():
$ grep ^brk linux.strace.out | wc -l
22017

Det som er _virkelig_ scary er, at hvis man kører en:
$ truss -o hpux.truss.out ./example.py

på en HP-UX box, kan man tælle 18 (atten!) kald til brk():
$ grep ^brk hpux.truss.out | wc -l
18

Mit spørgsmål er: hvor går memory allokeringen galt i byen?
Jeg har vedhæftet de 3 truss/strace output filer.
Hvis man kigger på Linux' brk forbrug, går de stødt og
roligt op ad. HP-UX laver nogle ordenlige chunks hvilket
viser sig at være umådelig effektivt, mens FreeBSD
kører op og ned i en uendelighed kort efter start.

I'm puzzled! Nogen gode bud?

-- 
/Anders

P.S.: Vores MS-Exchange tarpit &%#"# mail gateway grubler sandsynligvis stadig over den originale udgave af denne mail som jeg sendte i går. Beklager når/hvis denne mail kommer igen...

Jeg sludrede lidt om det med PHK i går aftes, som brødbetynget vedkendte sig skylden for problemet. Kunne tiltalte måske "just for the archives" forklare phkmalloc's aktier i sagen, og måske et par tanker om hvordan problemet kan omgåes, hvis muligt? Kunne man forestille sig, at det er et område hvor der skal sættes ind, eller er det sjældent et problem?

P.P.S: Scriptet er her: http://www.doozix.dk/example.py og truss outputet her: http://www.doozix.dk/truss.tgz Det kan være at det var det der gjorde at hobbes ikke ville kendes ved min post! Så skal vores &%#"# mail gateway ikke have _al_ skylden



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:32 CET