Kernel

From ZeptoOS
Revision as of 16:40, 23 April 2009 by Kazutomo (talk | contribs)
Jump to navigationJump to search

We currently provide two Linux kernels because of GPFS support on ION.

  • 2.6.19 based kernel : Zepto CN kernel
    • IBM V1R3 patch and zepto patch applied
    • 64KB pagesize and bigmemory region available
    • Device drivers for compute node devices such as DMA, lockbox, etc
    • Allow to run MPICH/DCMF code through Zepto Compute Binary(ZCB)
    • Can be used as enhanced ION kernel (no GPFS modules available)
  • 2.6.16 based kernel : Zepto ION kernel
    • IBM V1R3 patch applied
    • Essentially same as IBM ION kernel. Support GPFS

Kernel directory structure

Kernel directory basically consists of three main directories ; prebuilt, config and tarball.

kernel
|-- prebuilt
|   |-- 2.6.16
|   |   `-- ION
|   `-- 2.6.19
|       |-- CN
|       `-- objs
|-- tarball
`-- config

The prebuilt directory contains prebuilt kernel images and kernel modules. While prebuilt ION kernel ELF file is found, no CN kernel ELF file is found here. This is because CN kernel ramdisk is embedded in kernel and we wanted to provide a way to replace the CNK ramdisk without invoking CN build process which requires untar'ing source code. Instead CN kernel objects are found in prebuilt directory and a CN kernel ELF is created from the objects and ramdisk every time when you invoke certain make target.

The tarball directory contains kernel tarballs separately for ION and CN Linux kernel. Technically, those tarball are a snopshot of the Zepto kernel git repository. The directory might contain a .patch file that contains difference between the last snapshot and the current git HEAD since we wanted to avoid creating a snapshot from git even for small modification. Associated git log file can be found in this directory. A .SNAPSHOT_HEAD file indicates the git revision at the time when a snapshot is created, so this information is used to create a patch file.

linux-2.6.19.2-BGP-V1R3.git.log
linux-2.6.19.2-BGP-V1R3.patch
linux-2.6.19.2-BGP-V1R3.SNAPSHOT_HEAD
linux-2.6.19.2-BGP-V1R3.tar.bz2

The config directory contains Linux kernel config. A config file is basically associated to a tarball by kernel version. i.e, bgp-cn-2.6.19.2-dot-config for linux-2.6.19.2-BGP-V1R3.tar.bz2 See also Makefile.

Build kernel

Makefile in the kernel directory has many options. Just type 'make' it will show you help message. If you need to build (or rebuild) kernel from source code, use bgp-ion-linux-build or bgp-cn-linux-build target. By default it extracts ION or CN kernel tarball in a directory named work, apply a patch if any and start kernel build. Once kernel has successfully been built, kernel images (in both Zepto top directory and tmp directory) will be replaced with newly built images. ION kernel source code is extracted in work/linux-2.6.16.46-297-BGP-V1R3 and CN kernel source is in work/linux-2.6.19.2-BGP-V1R3. Here is an example of build, rebuilding kernel.

$ cd kernel
$ make bgp-cn-linux-build
....
$ ls -al ../BGP-CN-zImage-with-initrd.elf
$ vi work/linux-2.6.19.2-BGP-V1R3/kernel/sched.c
$ make bgp-cn-linux-build
....
$ ls -al ../BGP-CN-zImage-with-initrd.elf

As mentioned above the kernel tarball is used as source code. If you specify GIT=1 to the make command, you can directly build from our Zepto kernel git tree. This is very useful for kernel development since you can keep track your modifications.

$ cd kernel
$ make GIT=1 bgp-cn-linux-build
....
$ vi repo/linux-2.6.19.2-BGP-V1R3/kernel/sched.c
$ make GIT=1 bgp-cn-linux-build
....

Note that repo/linux-2.6.19.2-BGP-V1R3 is a cloned git repository. See also BG-Linux page

Kernel Parameters

2.6.19 based kernel has kernel parameter feature, which is part of Zepto modifications. You can add kernel parameters (or reset) to a kernel ELF file. zkparam.py in the kernel directory is a tool to operate kernel parameters. Here is the synopsis of the tool.

zkparam.py  KERNEL_ELF  [options]

If you omit options, the tool shows you the current kernel parameters.

$ ./kernel/zkparam.py  BGP-CN-zImage-with-initrd.elf  zepto_console_output=2
$ ./kernel/zkparam.py  BGP-CN-zImage-with-initrd.elf 
Current Kernel Parameters:
 zepto_console_output=2

Zepto kernel specific kernel parameters

zepto_debug=INTEGER    
 Specify the zepto kernel debug level
 0 turns off all zepto debug msgs. higher number more detail
 default=1

flatmemsizeMB=INTEGER
 Specify the size of flatmemory in MB.
 Currently the granularity of memory size is limited to 256 MB
 default=256  min=256  max=1792

zepto_console_output=INTEGER	
 Specify the console output behavior. 
 0 disables all console output from kernel. 
 1 enables console output from one of nodes(personality rank=1) 
 2 enables console output from all nodes

Log files,etc

Compute Node log

Debug messages from compute node (i.e, via printk) will appear in one of system log files. The system log file is recreated every time at system reset. You can find the location of the system log file by typing the following command.

$ ls -1 /bgsys/logs/BGP/sn*-mmcs_db_server*.log|tail -1
/bgsys/logs/BGP/sn1-mmcs_db_server-2009-0209-11:58:20.log

Please also take a look at a convenient script BGP/packages/tools/cn-log.sh

ION Node log

Debug message from ION node will appear in ION node log files in /bgsys/logs/BGP/, /bgsys/logs/BGP/R00-M0-N00-J00.log for example. Each ION has own log file. ION to CN ratio is 1:64 in ANL system. If your job is a 64 (physical) nodes job, you have one ION log file.

Please also take a look at a convenient script BGP/packages/tools/ion-log.sh

RAS events

RAS messages won't appear in the log files. A command line tool named bg-listevents shows you a record of RAS events. Type 'bg-listevents -h' for command line parameters.