Jan Claeys wrote:
In dit geval is het gewoon jammer als de data niet past, dan moet ik de berekening verkleinen. Er is nu eenmaal een verschil in snelheid tussen ram en disk van verschillende ordes van grootte, mmap kan dat ook niet magisch oplossen.Op zaterdag 12-09-2009 om 12:32 uur [tijdzone +0200], schreef Eric Meijer:Ik heb een programma dat tamelijk random door een grote dataset heenloopt. Als je dan 6GB ram hebt en 2GB swap, en het programma gaat 6.5GB echt /gebruiken/, dan is het wel helemaal over met de snelheid. CPU gebruik duikelt dan van 100% naar 2% of zoiets, het wacht voortdurend op de harde schijf. Swap werkt alleen voor geheugen dat langere tijd niet wordt gebruikt.Logisch, maar dat betekent waarschijnlijk dat het programma dat je gebruikt slecht geschreven is voor deze situatie; als je meer data nodig hebt dan er in je RAM past (of als je kan vermoeden dat dat soms zo is), gebruik je best 'mmap' of zo.
Standaard is (was?) het gedrag van malloc onder linux zo dat er nooit een foutmelding gegeven wordt als er niet genoeg ramgeheugen beschikbaar is, omdat het pas op het allerlaatste moment echt gealloceerd wordt. Het idee hierachter is dat veel programma's wel geheugen alloceren, maar het lang niet allemaal gebruiken. Als het dan toch misgaat stopt het programma zonder een spoor achter te laten, wat inderdaad erg lastig is (vooral als het pas gebeurt na 14 uur rekenen).Verder heb ik de ervaring gehad dat dit programma direct crashte op het moment dat het meer geheugen probeerde te gebruiken dan ik ram had. Ik was enigszins verbaasd dat er geen swap werd gebruikt en ontdekte dat sinds mijn laatste hard disk upgrade twee maanden daarvoor er geen swap in het systeem geconfigureerd was. Tot dan toegeen probleem dus.Programma's die crashen ipv een foutmelding geven als het geheugen op is is ook een bug natuurlijk, al is het vaak moeilijk dat te voorkomen. ;)
Eric --