/syspart

System partitioning using cpusets, irq affinity and other Linux kernel CPU isolation features

Primary LanguageCBSD 2-Clause "Simplified" LicenseBSD-2-Clause

  1. Overview

syspart (system partitioning) is a set of scripts for partitioning Linux systems into domains (partitions) that can be used for different purposes. For example, one partition can be used for general purpose tasks and another for hard & soft realtime (RT) applications.

Currently only two partitions are supported:

  • GPP (general-purpose partition) is setup for running general purpose tasks, handling interrupts, etc.
  • ISP (isolatated partition) is setup for running RT tasks. CPUs in ISP are isolated from the rest of the system.

The main tool is usually installed as /usr/sbin/syspart.

As of version 2.0 syspart has been tested with Linux kernels 3.12.x and requires additional patches to achieve complete isolation. See more info below.

  1. Usage examples

Partition the system such that CPUs 2 and 3 are isolated

syspart --isp-cpus 2-3 --create

Partition the system such that CPU 1 is isolated, and constrain ISP partiton to NUMA node 1 and GPP to node 0

syspart --isp-cpus 2-3 --isp-mems 1 --gpp-mems 0 --create

Check and report current partitioning setup

syspart --check

Destory system partitions (if any) and return everything to default settings

syspart --destroy
  1. Integration with Fedora, RedHat and CentOS systems

Syspart package comes with the default sysconfig file, sysv init.d script and systemd service file:

  • /etc/init.d/syspart
  • /etc/sysconfig/syspart
  • /usr/lib/systemd/system/syspart.service

See sysconfig/syspart for more info on how to configure syspart service.

If needed you can enable syspart service to be started at boot

/sbin/chkconfig syspart on

or on the newer versions that use systemd

systemctl enable syspart
  1. Integration with Debian and Ubuntu

The main syspart tool by itself works fine under Ubuntu. Proper upstart integration is being worked on.

  1. Supported kernel versions and extra patches

As of syspart-2.0 the officialy supported kernel is 3.12. Newer kernels should work too. In order to achive complete CPU isolation the following patches on top of 3.12 are recommended:

kthread: Introduce kernel.default_kthread_cpumask sysctl
workqueue: Introduce workqueue.avoid_cpus kernel parameter
pagealloc: Introduce cpumask for restricting page drain to certain cpus
workqueue: Expose all system workqueues via sysfs
sysctl: Add generic cpumask parser for sysctls

A1. Versioning

Generation of Version and Release values is handled automatically via the generate-version script. It is based on what the current git tag is. The tag naming convention is "v" + X.Y + ["-" + Z] where "X.Y" is the Version and "Z" is the optional Release value prefaced with a hyphen.

For example:

  • "v2.0" -> Version = 2.0, Release = 0 (default)
  • "v2.0-1" -> Version = 2.0, Release = 1