klogd - phpMan

Command: man perldoc info search(apropos)  


KLOGD(8)                  Linux System Administration                 KLOGD(8)



NAME
       klogd - Kernel Log Daemon


SYNOPSIS
       klogd [ -c n ] [ -d ] [ -f fname ] [ -iI ] [ -n ] [ -o ] [ -p ] [ -s ] [ -k fname ]
       [ -v ] [ -x ] [ -2 ]


DESCRIPTION
       klogd is a system daemon which intercepts and logs Linux kernel messages.


OPTIONS
       -c n   Sets the default log level of console messages to n.

       -d     Enable debugging mode.  This will generate LOTS of output to stderr.

       -f file
              Log messages to the specified filename rather than to the syslog facility.

       -i -I  Signal the currently executing klogd daemon.  Both of these switches control
              the loading/reloading of symbol information.  The -i switch signals the dae-
              mon to reload the kernel module symbols.  The -I switch signals for a reload
              of both the static kernel symbols and the kernel module symbols.

       -n     Avoid auto-backgrounding.  This is needed especially if the klogd is started
              and controlled by init(8).

       -o     Execute in ’one-shot’ mode.  This causes klogd to read and log all the  mes-
              sages that are found in the kernel message buffers.  After a single read and
              log cycle the daemon exits.

       -p     Enable paranoia.  This option controls when klogd loads kernel module symbol
              information.   Setting  this  switch  causes klogd to load the kernel module
              symbol information whenever an Oops string is detected in the kernel message
              stream.

       -s     Force  klogd to use the system call interface to the kernel message buffers.

       -k file
              Use the specified file as the source of kernel symbol information.

       -v     Print version and exit.

       -x     Omits EIP translation and therefore doesn’t read the System.map file.

       -2     When symbols are expanded, print the line twice.  Once with  addresses  con-
              verted  to  symbols,  once with the raw text.  This allows external programs
              such as ksymoops do their own processing on the original data.


OVERVIEW
       The functionality of klogd has been typically incorporated into other  versions  of
       syslogd  but  this  seems  to be a poor place for it.  In the modern Linux kernel a
       number of kernel messaging issues such as sourcing, prioritization  and  resolution
       of  kernel  addresses must be addressed.  Incorporating kernel logging into a sepa-
       rate process offers a cleaner separation of services.

       In Linux there are two potential sources of kernel log information: the /proc  file
       system and the syscall (sys_syslog) interface, although ultimately they are one and
       the same.  Klogd is designed to choose whichever source of information is the  most
       appropriate.   It  does  this by first checking for the presence of a mounted /proc
       file system.  If this is found the /proc/kmsg file is used as the source of  kernel
       log  information.   If the proc file system is not mounted klogd uses a system call
       to obtain kernel messages.  The command line switch (-s) can be used to force klogd
       to use the system call interface as its messaging source.

       If  kernel messages are directed through the syslogd daemon the klogd daemon, as of
       version 1.1, has the ability to properly prioritize kernel  messages.   Prioritiza-
       tion  of  the  kernel messages was added to it at approximately version 0.99pl13 of
       the kernel.  The raw kernel messages are of the form:

              <[0-7]>Something said by the kernel.

       The priority of the kernel message is encoded as a single  numeric  digit  enclosed
       inside the <> pair.  The definitions of these values is given in the kernel include
       file kernel.h.  When a message is received from the kernel the klogd  daemon  reads
       this  priority  level and assigns the appropriate priority level to the syslog mes-
       sage.  If file output (-f) is used the prioritization sequence is  left  pre-pended
       to the kernel message.

       The  klogd  daemon also allows the ability to alter the presentation of kernel mes-
       sages to the system console.  Consequent with the prioritization of kernel messages
       was  the  inclusion  of default messaging levels for the kernel.  In a stock kernel
       the the default console log level is set to 7.  Any messages with a priority  level
       numerically lower than 7 (higher priority) appear on the console.

       Messages  of  priority  level 7 are considered to be ’debug’ messages and will thus
       not appear on the console.  Many administrators, particularly in a multi-user envi-
       ronment, prefer that all kernel messages be handled by klogd and either directed to
       a file or to the syslogd daemon.  This prevents ’nuisance’ messages  such  as  line
       printer out of paper or disk change detected from cluttering the console.

       When  -c is given on the commandline the klogd daemon will execute a system call to
       inhibit all kernel messages from being displayed on the console.   Former  versions
       always issued this system call and defaulted to all kernel messages except for pan-
       ics.  This is handled differently nowardays so klogd doesn’t need to set this value
       anymore.   The argument given to the -c switch specifies the priority level of mes-
       sages which will be directed to the console.  Note  that  messages  of  a  priority
       value LOWER than the indicated number will be directed to the console.

              For  example,  to have the kernel display all messages with a priority level
              of 3 (KERN_ERR) or more severe the following command would be executed:

                   klogd -c 4

       The definitions of the numeric values for kernel messages are  given  in  the  file
       kernel.h  which  can  be  found  in  the /usr/include/linux directory if the kernel
       sources are installed.  These values parallel the syslog priority values which  are
       defined in the file syslog.h found in the /usr/include/sys sub-directory.

       The  klogd daemon can also be used in a ’one-shot’ mode for reading the kernel mes-
       sage buffers.  One shot mode is selected by specifying the -o switch on the command
       line.  Output will be directed to either the syslogd daemon or to an alternate file
       specified by the -f switch.

              For example, to read all the kernel messages after a system boot and  record
              them in a file called krnl.msg the following command would be given.

                   klogd -o -f ./krnl.msg


KERNEL ADDRESS RESOLUTION
       If  the  kernel detects an internal error condition a general protection fault will
       be triggered.  As part of the GPF handling procedure the kernel prints out a status
       report indicating the state of the processor at the time of the fault.  Included in
       this display are the contents of the microprocessor’s registers,  the  contents  of
       the kernel stack and a tracing of what functions were being executed at the time of
       the fault.

       This information is EXTREMELY IMPORTANT in determining  what  caused  the  internal
       error  condition.  The difficulty comes when a kernel developer attempts to analyze
       this information.  The raw numeric information  present  in  the  protection  fault
       printout  is  of  very  little use to the developers.  This is due to the fact that
       kernels are not identical and the addresses of variable locations or functions will
       not  be the same in all kernels.  In order to correctly diagnose the cause of fail-
       ure a kernel developer needs to know what specific  kernel  functions  or  variable
       locations were involved in the error.

       As  part of the kernel compilation process a listing is created which specified the
       address locations of important variables and function in the kernel being compiled.
       This  listing  is saved in a file called System.map in the top of the kernel direc-
       tory source tree.  Using this listing a kernel developer can determine exactly what
       the kernel was doing when the error condition occurred.

       The  process  of resolving the numeric addresses from the protection fault printout
       can be done manually or by using the ksymoops program which is included in the ker-
       nel sources.

       As  a  convenience  klogd will attempt to resolve kernel numeric addresses to their
       symbolic forms if a kernel symbol table is available at  execution  time.   If  you
       require  the  original  address  of  the  symbol, use the -2 switch to preserve the
       numeric address.  A symbol table may be specified by using the  -k  switch  on  the
       command line.  If a symbol file is not explicitly specified the following filenames
       will be tried:

       /boot/System.map
       /System.map
       /usr/src/linux/System.map

       Version information is supplied in the system maps as of kernel 1.3.43.  This  ver-
       sion  information  is  used  to  direct an intelligent search of the list of symbol
       tables.  This feature is useful since it provides support for both  production  and
       experimental kernels.

       For  example  a production kernel may have its map file stored in /boot/System.map.
       If an experimental or test kernel is compiled with the sources  in  the  ’standard’
       location  of  /usr/src/linux  the  system  map will be found in /usr/src/linux/Sys-
       tem.map.  When klogd starts under the experimental kernel  the  map  in  /boot/Sys-
       tem.map will be bypassed in favor of the map in /usr/src/linux/System.map.

       Modern kernels as of 1.3.43 properly format important kernel addresses so that they
       will be recognized and translated by klogd.  Earlier kernels require a source  code
       patch  be  applied to the kernel sources.  This patch is supplied with the sysklogd
       sources.

       The process of analyzing kernel protections faults works very well  with  a  static
       kernel.  Additional difficulties are encountered when attempting to diagnose errors
       which occur in loadable kernel modules.  Loadable kernel modules are used to imple-
       ment  kernel  functionality in a form which can be loaded or unloaded at will.  The
       use of loadable modules is useful from a debugging standpoint and can also be  use-
       ful in decreasing the amount of memory required by a kernel.

       The  difficulty  with  diagnosing  errors in loadable modules is due to the dynamic
       nature of the kernel modules.  When a module is loaded  the  kernel  will  allocate
       memory to hold the module, when the module is unloaded this memory will be returned
       back to the kernel.  This dynamic memory allocation makes it impossible to  produce
       a  map  file  which details the addresses of the variable and functions in a kernel
       loadable module.  Without this location map it is not possible for a kernel  devel-
       oper to determine what went wrong if a protection fault involves a kernel module.

       klogd  has  support for dealing with the problem of diagnosing protection faults in
       kernel loadable modules.  At program start time or in  response  to  a  signal  the
       daemon  will  interrogate  the  kernel  for a listing of all modules loaded and the
       addresses in memory they are loaded at.  Individual modules can also  register  the
       locations of important functions when the module is loaded.  The addresses of these
       exported symbols are also determined during this interrogation process.

       When a protection fault occurs an attempt will be made to resolve kernel  addresses
       from  the static symbol table.  If this fails the symbols from the currently loaded
       modules are examined in an attempt to resolve the addresses.  At the  very  minimum
       this  allows klogd to indicate which loadable module was responsible for generating
       the protection fault.  Additional information may be available if the module devel-
       oper chose to export symbol information from the module.

       Proper  and  accurate resolution of addresses in kernel modules requires that klogd
       be informed whenever the kernel module status changes.  The -i and -I switches  can
       be  used  to  signal  the  currently  executing  daemon  that symbol information be
       reloaded.  Of most importance to proper resolution of  module  symbols  is  the  -i
       switch.  Each time a kernel module is loaded or removed from the kernel the follow-
       ing command should be executed:

       klogd -i

       The -p switch can also be used to insure that module symbol information  is  up  to
       date.  This switch instructs klogd to reload the module symbol information whenever
       a protection fault is detected.  Caution should be used before invoking the program
       in  ´paranoid´  mode.  The stability of the kernel and the operating environment is
       always under question when a protection fault occurs.  Since the klogd daemon  must
       execute  system  calls  in order to read the module symbol information there is the
       possibility that the system may be too unstable to capture useful  information.   A
       much  better  policy is to insure that klogd is updated whenever a module is loaded
       or unloaded.  Having uptodate symbol information loaded increases  the  probability
       of properly resolving a protection fault if it should occur.

       Included  in the sysklogd source distribution is a patch to the modules-2.0.0 pack-
       age which allows the insmod, rmmod and modprobe utilities to  automatically  signal
       klogd  whenever  a module is inserted or removed from the kernel.  Using this patch
       will insure that the symbol information maintained in klogd  is  always  consistent
       with the current kernel state.


SIGNAL HANDLING
       The klogd will respond to eight signals: SIGHUP, SIGINT, SIGKILL, SIGTERM, SIGTSTP,
       SIGUSR1, SIGUSR2 and SIGCONT.  The SIGINT, SIGKILL, SIGTERM and SIGHUP signals will
       cause the daemon to close its kernel log sources and terminate gracefully.

       The  SIGTSTP  and  SIGCONT signals are used to start and stop kernel logging.  Upon
       receipt of a SIGTSTP signal the daemon will close its log sources and  spin  in  an
       idle  loop.   Subsequent  receipt  of  a SIGCONT signal will cause the daemon to go
       through its initialization sequence and re-choose an input source.   Using  SIGSTOP
       and  SIGCONT  in combination the kernel log input can be re-chosen without stopping
       and restarting the daemon.  For example if the /proc  file  system  is  to  be  un-
       mounted the following command sequence should be used:

            # kill -TSTP pid
            # umount /proc
            # kill -CONT pid

       Notations  will  be  made in the system logs with LOG_INFO priority documenting the
       start/stop of logging.

       The SIGUSR1 and SIGUSR2 signals are used to initiate  loading/reloading  of  kernel
       symbol  information.   Receipt  of  the SIGUSR1 signal will cause the kernel module
       symbols to be reloaded.  Signaling the daemon with  SIGUSR2  will  cause  both  the
       static kernel symbols and the kernel module symbols to be reloaded.

       Provided  that  the System.map file is placed in an appropriate location the signal
       of generally greatest usefulness is the SIGUSR1 signal.  This signal is designed to
       be used to signal the daemon when kernel modules are loaded/unloaded.  Sending this
       signal to the daemon after a kernel module state change  will  insure  that  proper
       resolution  of symbols will occur if a protection fault occurs in the address space
       occupied by a kernel module.


FILES
       /proc/kmsg
              One Source for kernel messages klogd
       /var/run/klogd.pid
              The file containing the process id of klogd
       /boot/System.map, /System.map, /usr/src/linux/System.map
              Default locations for kernel system maps.

BUGS
       Probably numerous.  Well formed context diffs appreciated.


AUTHOR
       The klogd was originally written by Steve Lord (lord AT cray.com), Greg Wettstein made
       major improvements.

       Dr. Greg Wettstein (greg AT wind.com)
       Enjellic Systems Development

       Oncology Research Divsion Computing Facility
       Roger Maris Cancer Center
       Fargo, ND 58122



Version 1.4                     21 August, 1999                       KLOGD(8)

Generated by $Id: phpMan.php,v 4.55 2007/09/05 04:42:51 chedong Exp $ Author: Che Dong
On Apache/1.3.41 (Unix) PHP/5.2.5 mod_perl/1.30 mod_gzip/1.3.26.1a
Under GNU General Public License
2008-12-02 06:11 @38.103.63.58 CrawledBy CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Valid XHTML 1.0!Valid CSS!