About Publications Downloads Related Projects Team L4hq.org  
 
Projects
Pistachio
Kickstart
Download
Virtualization
Pre-virtualization
Device Drivers
Multiprocessor
Marzipan
BurnNT
Download
IDL4
Release Notes
Documentation
Download
Persistence
Hazelnut
Download
Getting started
 
Miscellaneous
Mailing lists
Tools
VMwareGateway
Workshops
Google L4Ka.org:
 
 

L4Ka::Pistachio/amd64

L4Ka::Pistachio/amd64 supports AMD's 64bit extension to the IA32 instructions set (AKA AMD64 and IA32e).

We've implemented an optimized IPC fast path. Multiprocessor support is still missing. Both, kernel and user applications run in 64bit long mode. Note that 32bit compatibility mode is not supported yet; thus binaries compiled for L4Ka::Pistachio/ia32 cannot be used.

Supported Hardware

L4Ka::Pistachio/amd64 was tested with the following configurations:
  • AMD Opteron 242 system
  • Intel Pentium Systems with EM64T extensions
  • Simics x86-64 simulator
We conducted some performance measurements on a 1.6GHz AMD Opteron 242 system.

Building and Booting

Due to the similarities between the AMD64 and IA32 versions we've been able to reuse most of the already existing infrastructure. Particularly, configuring and booting is almost identical to Pistachio/ia32. If user-level applications are correctly built for the AMD64 architecture (see below), Kickstart will detect the 64bit version of the kernel and perform the respective configuration.

Kernel

The kernel can be built using GCC 3.3 and higher. The kernel debugger can direct its I/O via the serial line or the keyboard/screen. Be sure to configure your kernel for the appropriate I/O device. The binary distribution includes the kernel configurations for the respective kernel binaries.

User-Level

The user-level binaries for AMD64 are built by using the --host=amd64 switch. The user-level applications are configured to use the serial port for I/O by default. To use screen I/O, run the configure script with the --without-comport command line option. If you want to use the serial port, you can choose a particular port by either specifying an index (0, 1, 2, or 3), or its physical device address (e.g. 0x3f8), with the --with-comport= command line option.

Booting

The kernel can be booted using GRUB and L4Ka::KickStart; latter is part of the kernel distribution. GRUB requires a configuration file which contains all modules to be loaded. Besides the kernel image itself further modules can be loaded. The kernel requires at least sigma0 and the root task. Following an example menu.lst file:
title=L4Ka::Pistachio
kernel=/kickstart
module=/amd64-kernel
module=/sigma0
module=/roottask
GRUB supports network booting using the TFTP protocol. For more details refer to the corresponding documentations. A ready-to-run GRUB floppy image can be generated and downloaded from here.

After booting, GRUB starts L4Ka::KickStart which then configures the kernel configuration page using the boot-loader provided configuration information. Afterwards, L4Ka::Kickstart hands over control to the kernel which bootstraps sigma0, sigma1 (if available), and the root task.

Runtime Output

The kernel prints diagnostic information to the screen (if the kernel debugger is enabled). The information appears as "spinning" characters in the upper right corner, one row per processor. The character will change upon kernel events. The events, in reverse display order (right to left), are:
  • idler invocation
  • timer interrupt
  • hardware interrupts
  • end-of-timeslice
  • cross-processor

If the kernel prints the error message "CPU does not support all features (XYZ) -- halting" then the processor does not support required features to operate the kernel. XYZ represents a feature mask, which is validated against the CPUID instruction. When the kernel is configured for verbose init, it will print cryptic strings representing the missing features (the cryptic strings correlate to features enumerated in the ia32 manuals). To solve the problem, configure the kernel to use an older generation processor.

Features

  • Multiprocessor Support
  • Compatibility Mode Support (32-bit user applications)

Missing Features / Known Bugs

  • Lipc() not implemented (mapped to IPC)
  • IPC() does not return local thread IDs on intra-address space IPC
   
 
 
 
  Mail to webmaster   © 2000-2010 University of Karlsruhe