Date: Tue, 28 Apr 1998 14:55:36 -0600 From: Lyndon Nerenberg <lyndon@ve7tcp.ampr.org> To: "David E. Cross" <dec@phoenix.its.rpi.edu> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: SIGDANGER Message-ID: <199804282055.OAA16644@ve7tcp.ampr.org> In-Reply-To: Your message of "Tue, 28 Apr 1998 12:17:40 EDT." <Pine.BSF.3.96.980428121410.15319C-100000@phoenix.its.rpi.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
>>>>> "David" == David E Cross <dec@phoenix.its.rpi.edu> writes: David> Default should be as it is on AIX, to terminate the David> process. Folks, the default (AIX 4.2) is to *ignore* the signal: The system monitors the number of free paging space blocks and detects when a paging-space shortage exists. When the number of free paging-space blocks falls below a threshold known as the paging-space warning level, the system informs all processes (except kprocs) of this condition by sending the SIGDANGER signal. If the shortage continues and falls below a second threshold known as the paging-space kill level, the system sends the SIGKILL signal to processes that are the major users of paging space and that do not have a signal handler for the SIGDANGER signal (**the default action for the SIGDANGER signal is to ignore the signal**). The system continues sending SIGKILL signals until the number of free paging-space blocks is above the paging-space kill level. [Above quoted from the AIX system doc] Processes in AIX will eventually die from SIGKILL, the same as any other UNIX that overcommits. If you don't do something explicit with SIGDANGER you'll never know it's there. (It has to behave this way to maintain backwards source compatibility.) AIX provides a pssignal() subroutine that can be used to query the state of the paging space. (pssignal manpage appended to the end of this message.) Limited user-space control of the swapspace allocation policy is available: If the PSALLOC environment variable is set to early, then every program started in that environment from that point on, but not including currently running processes, will run in the early allocation environment. In the early allocation environment, interfaces such as the malloc subroutine and the brk subroutine will fail if sufficient paging space cannot be reserved when the request is made. I *especially* like their suggested method of changing the policy from within a running program: Programming Interface The programming interface that controls the paging space allocation mode uses the PSALLOC environment variable. To ensure that an application always runs under the desired mode (with or without early paging space allocation), do the following: 1. Use the getenv subroutine to examine the current state of the PSALLOC environment variable. 2. If the value of the PSALLOC environment variable is not the value required by the application, use the setenv subroutine to alter the value of the environment variable. Since only the execve subroutine examines the state of the PSALLOC environment variable, call the execve subroutine with the same set of parameters and environment received by the application. When the application reexamines the state of the PSALLOC environment variable and finds the correct value, the application continues normally. 3. If the getenv subroutine reveals that the current state of the PSALLOC environment variable is correct, no modification is needed. The application continues normally. Are these guys for real? If anything, a process should be able to change it's allocation policy through vmadvise(), although I'd hate to contemplate what sort of kernel mods would be required. And no matter how this is implemented, any form of overcommit should be *disabled* by default. Any system that ships out-of-the-box with broken malloc() and sbrk() is pretty lame ... --lyndon psdanger Subroutine Purpose Defines the amount of free paging space available. Syntax #include <signal.h> int psdanger (Signal) int Signal; Description The psdanger subroutine returns the difference between the current number of free paging-space blocks and the paging-space thresholds of the system. Parameters Signal Defines the signal. Return Values If the value of the Signal parameter is 0, the return value is the total number of paging-space blocks defined in the system. If the value of the Signal parameter is -1, the return value is the number of free paging-space blocks available in the system. If the value of the Signal parameter is SIGDANGER, the return value is the difference between the current number of free paging-space blocks and the paging-space warning threshold. If the number of free paging-space blocks is less than the paging-space warning threshold, the return value is negative. If the value of the Signal parameter is SIGKILL, the return value is the difference between the current number of free paging-space blocks and the paging-space kill threshold. If the number of free paging-space blocks is less than the paging-space kill threshold, the return value is negative. Implementation Specifics This subroutine is part of Base Operating System (BOS) Runtime. Related Information The swapon subroutine, swapqry subroutine. The chps command, lsps command, mkps command, rmps command, swapon command. Paging Space Overview in Subroutines Overview and Understanding Paging Space Programming Requirements in AIX Version 4 General Programming Concepts: Writing and Debugging Programs. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804282055.OAA16644>