Graceful failure instead of panicking in kmem_malloc
Kris Kennaway
kris at FreeBSD.org
Wed Jan 9 02:13:24 PST 2008
Joshua Isom wrote:
>
> On Jan 8, 2008, at 9:25 PM, Bharma Ji wrote:
>
>> Thanks for the response. I am hoping to keep some memory aside
>> specifically
>> for handling out of memory allocation situations. Yes the real fix is to
>> avoid out of memory allocation. Thanks for the patch. Will try that. As a
>> first cut I am just trying to handle failure gracefully.
>>
>> So asking again - if there is any way already discussed or
>> standardized to
>> make the system handle failures gracefully
>>
>> On Jan 8, 2008 4:30 PM, Kris Kennaway <kris at freebsd.org> wrote:
>>
>>> Bharma Ji wrote:
>>>> In FreeBSD 6_2, if kmem_malloc is unable to find space it panics. The
>>>> relevant code is in vm_kern.c
>>>> if ((flags & M_NOWAIT) == 0)
>>>> panic("kmem_malloc(%ld): kmem_map too small:
>>> %ld
>>>> total allocated",
>>>> (long)size, (long)map->size);
>>>>
>>>> Is there any way to make the system log and then gracefully shut off
>>> instead
>>>> of panicking?
>>>
>>> Not really, because those actions require memory allocation. The real
>>> fix is to either
>>>
>>> a) avoid running out of memory in the first place by tuning vm.kmem_size
>>>
>>> b) perhaps trying harder to avoid panicking by first trying to more
>>> aggressively reclaim memory.
>>>
>>> You can try
>>>
>>>
>>> http://www.freebsd.org/~pjd/patches/vm_kern.c.2.patch<http://www.freebsd.org/%7Epjd/patches/vm_kern.c.2.patch>
>>>
>>>
>>> which implements b) (patch against 7.0, but might apply to 6.2
>>> unchanged).
>>>
>>> Kris
>>>
>> _______________________________________________
>> freebsd-hackers at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
>> To unsubscribe, send any mail to
>> "freebsd-hackers-unsubscribe at freebsd.org"
>
> Why not try to take out some user processes? Going with a combination
> of process priority and memory usage, it should at least be more
> tolerable than a panic.
This is kernel memory, not user memory. There is a fixed-size arena for
mallocs in the kernel, and the panic happens when it fills up and no
free space can be immediately reclaimed.
Kris
More information about the freebsd-hackers
mailing list