No, as far as I can tell, the kmem allocs in fork use KMEM_SLEEP. This means that they're guaranteed to return memory, and will sleep until some becomes available.
EAGAIN covers a lot of different errors in fork. EAGAIN A resource control or limit on the total number of processes, tasks or LWPs under execution by a single user, task, project, or zone has been exceeded, or the total amount of system memory available is temporarily insufficient to duplicate this process. According to the manpage, quoted above, this can occur when you've exceeded rctls or process limits, or hit a problem allocating a resource needed for the process. A quick look through cfork, the kernel's common fork routine, shows that we'll return EAGAIN for a wide class of errors. An as_dup() that fails but isn't an ENOMEM, no available lwpids, exceeding resource limits, all generate an EAGAIN error. DTrace has a feature called speculative tracing that is particularly helpful when looking at these kinds of failures. It allows you to examine just the code paths that are causing the failure. There's an example that uses open64 here: http://wikis.sun.com/display/DTrace/Speculative+Tracing You could adapt this to use forksys instead. This would allow you to see just where in the kernel your fork is actually failing. -j On Fri, Nov 14, 2008 at 06:37:21AM -0800, tester wrote: > I was wondering if a fork failure with EAGAIN will manifest as an allocation > failure in vmem, if so how to see that and if there is a specifc cache that > can be tweaked. At present the only cache that is reporting any failure is > > kmem_lp 1002438656 1002438656 239 1858 > > thanks > -- > This message posted from opensolaris.org > _______________________________________________ > perf-discuss mailing list > perf-discuss@opensolaris.org _______________________________________________ perf-discuss mailing list perf-discuss@opensolaris.org