Clone
51
OpenAirKernelMainSetup
Raphael Defosseux edited this page 2019-04-16 14:23:11 +02:00
OpenAirInterface: Operating System and Kernel Requirements

Kernel Requirements for RAN

We recommend that you use Ubuntu Linux for OpenAirInterface. OAI should run also on other distributions, but the build scripts might need to be adopted.

  • 2019/04 Update: Part of the Continuous Integration is now also building and testing on the Red Hat entreprise 7.6 version
  • For "old tags" of the master branch (older than v0.6.1_tdd), we recommend Ubuntu 14.04 LTS with low-latency kernel 3.19. See this section
  • For "newer tags" on the master branch (starting v1.0.0) and for the develop branch, we recommend Ubuntu 16.04 with low-latency kernel 4.4.0 or higher. See this section
  • Experimental CentOS requirements: see this section

Below are precise instructions for the primary installations that we use at EURECOM.

Note: Please do not try any other Linux distributions not recommended by us as OAI needs lot of packages and is very sensitive to version numbers, linux kernel, etc without knowing what you are doing. We test only very few Linux distros and do not support anything other than what is mentioned in wiki

Ubuntu 14.04.3 LTS/Linux Kernel version 3.19 <- Use Ubuntu 14.04 for master branch old tags

Install a standard 64-bit 14.04.3 system. Note: the latest version from Feb. 2016, 14.04.04 comes with kernel 4.2 by default which will not work with OAI (master branch).

Low-latency kernel installation

To install the low-latency kernel 3.19 on top of Ubuntu 14.04, 64-bit architecture type

Example kernel tested on our side for openairinterface5g installation is linux-image-3.19.0-61-lowlatency

sudo apt-get install linux-image-3.19.0-61-lowlatency linux-headers-3.19.0-61-lowlatency

IF you wish to install from linux mainline (not recommended as some versions are unstable)

version=3.19
wget -r -e robots=off --accept-regex "(.*lowlatency.*amd64)|(all).deb" http://kernel.ubuntu.com/~kernel-ppa/mainline/v${version}-vivid/
dpkg -i kernel.ubuntu.com/*/*/*/*deb

After a reboot, uname -a should give the following output:

Linux [NAME] 3.19-lowlatency #201408132253 SMP PREEMPT Thu Aug 14 03:01:44 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Note: To use legacy OpenAirInterface Makefiles and to compile Kernel modules, (the current procedure doesn't require this), you need to add a link in Kernel source files as per this example:

export version=<your_kernel_version>
ln -s /usr/src/linux-headers-${version}*lowlatency/include/generated/autoconf.h /lib/modules/${version}*lowlatency/build/include/linux

Ubuntu 16.04 LTS/Linux Kernel version 4.8 or higher

The support is only valid for latest master branch tags (>= v1.0.0) or latest develop branch tags (>= 2018.w02).

To install the low-latency kernel on this system,

sudo apt-get install linux-image-lowlatency linux-headers-lowlatency

Power management

Remove all power management features in the BIOS (sleep states, in particular C-states) and CPU frequency scaling (Intel SpeedStep). In some cases, you can also do this with cpufreqtool. Also, disable hyperthreading in BIOS and make sure its turned off in Linux

  • check this using this command: watch grep \"cpu MHz\" /proc/cpuinfo
  • have a look at this link for further information.
  • you must disable p-state and c-state in linux so you need to add intel_pstate=disable to the Linux boot options, i.e GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=disable" in /etc/default/grub, then perform update-grub. You may optionally add the following as well "processor.max_cstate=1 intel_idle.max_cstate=0 idle=poll"
  • Append "blacklist intel_powerclamp" to the end of /etc/modprobe.d/blacklist.conf, to blacklist the intel_powerclamp" module. If the file does not exist, create one, and add the line into it.
  • You also need to disable hyperthreading, CPU frequency control, C-States, P-States and any other power management from BIOS as well.
  • Install i7z utility to check the cpu
sudo apt-get install i7z
sudo i7z

Here is the sample output of i7z. The CPU should not change its frequency by more than 1-2 hertz and should not be any C-state other than C0 i7z_log

Note: If your CPU Frequency is changing or CPU is in C-states, then You need to fix the CPU issue above before proceeding further. You will have real-time issues with eNB/UE/RRH if you do not fix them now!!!

Disable CPU Frequency scaling

Install cpufrequtils:

sudo apt-get install cpufrequtils

Then edit the following file (if it doesn't exist, create it):

sudo vi /etc/default/cpufrequtils

And add the following line to it:

GOVERNOR="performance"

Save and exit.

Now you need to disable ondemand daemon, otherwise after you reboot the settings will be overwriten.

sudo update-rc.d ondemand disable
sudo /etc/init.d/cpufrequtils restart

You can check your settings with:

cpufreq-info

It will show a block of information for every core your processor has. Just check if all of then are in perfomance mode, and at the maximum speed of your processor.

Wi-Fi/Bluetooth

We have sometimes noticed real time issues while running lte-softmodem with USRP even after following above procedure. If you happen to face similar problems you should turn off Wi-Fi/Bluetooth (or remove respective drivers, if possible). This fixed the issue on some of our machines.

Virtual Machine (VMWare, Virtual Box, etc)

We do not recommend the usage of virtual machine usage for OAI due to the fact that some VMs do no export the CPU flags correctly, and CPU flags needs to be passed manually which might/might not work due to VM configuration. The resolution of this issue and possible solution is discussed here (https://lists.eurecom.fr/sympa/arc/openair5g-user/2015-10/msg00041.html, https://gitlab.eurecom.fr/oai/openairinterface5g/issues/32).

Kernel Requirements for Cent OS 7 EXPERIMENTAL

  1. TBD: Instructions for compiling or installing rpm package for 3.10.RT kernel and associated packages for Real-time Cent OS deployments

  2. Start from the DVD ISO with a minimal install, add a non-root user. As you want to run real-time later, I suppose you want to avoid to configure swap space.

  3. Give your non-root user sudo access (as root): usermod -G wheel <user>

  4. Optionally, make sudo access passwordless (because some of the builds+tests take so long): sudo visudo

    • comment out the line: %wheel ALL=(ALL) ALL
    • uncomment the line: %wheel ALL=(ALL) NOPASSWD: ALL
  5. As long as we're building some drivers from source (which, by recommended practice, land in /usr/local/*), we need two extra steps (this will go away, once drivers are available as RPMs and the build-script is adapted):

  • Allow sudo to run executables in /usr/local/bin: sudo visudo

    • append ":/usr/local/bin" to line: Defaults secure_path=/sbin:/bin:/usr/sbin:/usr/bin
  • Configure ldconfig to index /usr/local/lib and /usr/local/lib64: echo -e "/usr/local/lib\n/usr/local/lib64" | sudo tee /etc/ld.so.conf.d/enable_usr_local_lib.conf > /dev/null

  1. For the real-time kernel bits, you'll want to enable the real-time repo:
#CentOS-rt.repo
[rt]
name=CentOS-7 - rt
baseurl=http://mirror.centos.org/centos/\$releasever/rt/\$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
  1. Finally,
 sudo yum install -y git kernel-rt rt-tests tuned-profiles-realtime
 reboot

Kernel Requirements for Core Network <- Use Ubuntu 16.04 for a first time user

We currently support UBUNTU 16.04 LTS with kernel 4.7, but kernel 4.8 should work as well. Please also see https://gitlab.eurecom.fr/oai/openair-cn/wikis/home for more up-to-date information.

Note: As a first time user, please do not run OAI eNB and OAI EPC on same machine due to different kernel/package conflicting requirements.

Example kernel for openair-cn for latest develop branch(tag v0.4.0) is 4.7.x. You will need GTP kernel module from Osmocom which is loaded as module inside kernel

Example kernel tested on our side for openair-cn older installation tags is linux-image-3.19.0-59-generic for older versions of openair-cn (NOT RECOMMENDED)

Notes for installing 4.8.x kernel from debian package (NOT TESTED)

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
sudo dpkg -i linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
sudo dpkg -i linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
  • After reboot, you can do the following to check gtp kernel module and version name
uname -a
sudo modprobe gtp
dmesg |tail # You should see something that says about GTP kernel module

Notes for install 4.7.x kernel from pre-compiled debian package (TESTED)

git clone https://gitlab.eurecom.fr/oai/linux-4.7.x.git
cd linux-4.7.x
sudo dpkg -i linux-headers-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb linux-image-4.7.7-oaiepc_4.7.7-oaiepc-10.00.Custom_amd64.deb

Notes for installing 4.7.x kernel from source with GTP module (TESTED)

sudo apt-get install xz-utils build-essential wget libncurses5-dev libssl-dev
sudo apt-get build-dep linux-image-$(uname -r) ncurses-bin 
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.7.1.tar.xz
unxz linux-4.7.1.tar.xz
tar -xovf linux-4.7.1.tar
cd linux-4.7.1
# See Documentation/Changes for list of required minimum software to compile the kernel
make menuconfig #search for GTP option and enable it as a kernel module and save the kernel config file
# look for CONFIG_GTP in .config and make sure it is enabled as a kernel module CONFIG_GTP=m
make -j`nproc`
sudo make modules_install
sudo make install

Kernel Requirements for using CentOS 7 <- EXPERIMENTAL DO NOT TRY AS FIRST TIME USER

We have tested only CentOS 7 and the compiles and runs, but not tested extensively with Phone, traffic, etc

Kernel requirements for branch (feature-53-support-enterprise-linux-7-v0.3.2)

Kernel requirements for branch (feature-53-support-enterprise-linux-7-v0.4.0)

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel