Am Mon, 26 Jun 2000 schrieb Reinhard Foerster:
On Mon, Jun 26, 2000 at 12:06:02PM +0200, Andre Schulze wrote: Solaris 128MB + 200 MB freiem swap sagt: fork(): Not enough space Aha. Er denkt sich was dabei. Nett.
Linux-2.2, 128MB + 180MB freier swap: child with 200 MB Er macht fork() problemlos, gibt also 400MB Speicher raus, obwohl nur ca. 300MB da sind. Wenn ich nun anfange die 400MB zu beschreiben gehen Prozesse flöten wie bei Andre der nfsd.
Genau dieses Verhalten stört mich bei Linux. Das MM arbeitet einfach zu optimistisch und faellt deshalb öfters auf die Knie als andere Systeme. Meiner Meinung nach sollte man bei fork() gleich den Platz im swap reservieren und geht so bestimmt 99% der Out-Of-Memory-Situationen in Linux aus dem Weg. Mit Optimierung hat das IMO nix zu tun.
Den Platz gleich im SWAP zu reservieren macht Solaris sicherlich auch nicht.
Die Frage ist, soll fork() so intelligent sein und rausfinden ob, im schlechtesteten Fall, genug Speicher frei ist oder nicht. Das ist sicher 'ne Frage für einen Statistiker, Dr. Hamann oder ?
Oft macht man nach dem fork() nämlich ein exec(). Bei einem 200 MB Prozess ist das zwar ziemlich blöd programmiert, aber theoretisch unter Linux möglich, unter Solaris anscheinend nicht.
Der Sinn der Sache mit dem warten auf einen Schreibzugriff/Lesezugriff ist ja, daß das fork() dann wesentlich schneller ist, als wenn erst alles kopiert/reserviert wird.
Dahingehend ist dein fork()-Beispiel eher schlecht gewählt und unrealistisch.
Bye, Stephan