Skip to content

OpenFastPath/nginx_ofp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ba00c87 · Jun 11, 2019
Jun 11, 2019
Mar 7, 2017
Oct 22, 2014
Dec 8, 2015
Dec 7, 2015
Jun 11, 2019
Dec 8, 2015
Jun 11, 2019
Jul 18, 2016
Apr 3, 2017
Apr 3, 2017

Repository files navigation

				README
			      ==========
		

0. Prerequisites
1. Preparing build
2. Configuring NGINX 
3. Running NGINX
4. Limitations or Known Issues
5. Changelog


0. Prerequisites
================

0.1. Build Prerequisites:

- Get OFP (tested with version 3.0.0) to your $PATH_OFP_ROOT.

- Add the following options to the ./configure command in
  scripts/devbuild_ofp_odp_dpdk.sh:
	--enable-sp=no --with-config-flv=webserver

- Run scripts/devbuild_ofp_odp_dpdk.sh.

This builds and installs DPDK, ODP-DPDK and OFP.

0.2. Configure DPDK:

ls /sys/devices/system/node/
sudo sh -c 'echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages'
sudo sh -c 'echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages'

sudo mkdir /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge

sudo /sbin/modprobe uio
ulimit -Sn 2048

insmod scripts/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko

	Configure interfaces:

./tools/dpdk_nic_bind.py --status

Network devices using DPDK-compatible driver ============================================
<none>

Network devices using kernel driver
===================================
0000:02:00.0 'I350 Gigabit Network Connection' if=p1p1 drv=igb unused=igb_uio *Active*
0000:02:00.1 'I350 Gigabit Network Connection' if=p1p2 drv=igb unused=igb_uio
0000:81:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth0 drv=ixgbe unused=igb_uio *Active*
0000:81:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=eth1 drv=ixgbe unused=igb_uio *Active*

Other network devices
=====================
<none>


$ sudo ifconfig eth0 down
sudo ./tools/dpdk_nic_bind.py -u 0000:01:00.0
sudo ./tools/dpdk_nic_bind.py --bind=igb_uio 0000:01:00.0

$ ./tools/dpdk_nic_bind.py --status
Network devices using DPDK-compatible driver ============================================
0000:81:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=
0000:81:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' drv=igb_uio unused=

Network devices using kernel driver
===================================
0000:02:00.0 'I350 Gigabit Network Connection' if=p1p1 drv=igb unused=igb_uio *Active*
0000:02:00.1 'I350 Gigabit Network Connection' if=p1p2 drv=igb unused=igb_uio

Other network devices
=====================
<none>

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PATH_OFP_ROOT/scripts/check-odp/new-build/lib/

export ODP_PLATFORM_PARAMS="-n 4 -- -p 4"

1. Preparing build
==================

set build variables with respective OFP and ODP build path (see 0.1.)
export OFP_PATH=$PATH_OFP_ROOT/scripts/check-odp/new-build/
export OFP_ODP=$PATH_OFP_ROOT/scripts/check-odp/new-build/

export RTE_SDK=$PATH_OFP_ROOT/scripts/dpdk/
export RTE_TARGET=x86_64-native-linuxapp-gcc

./configure --sbin-path=/usr/local/nginx_dpdk/nginx --conf-path=/usr/local/nginx_dpdk/nginx.conf --pid-path=/usr/local/nginx_dpdk/nginx.pid --with-http_ssl_module --with-select_module
[--without-http_rewrite_module]

make install

Note: make clean will remove main Makefile and obj dir. So configure shall be run again. 
It would be useful to save the above build steps in a script and run the script.

2. Configuring NGINX 
====================

After build and install, NGINX configuration file will be at /usr/local/nginx_dpdk/nginx.conf.

To get NGINX debug logs uncomment the debug line
 error_log  logs/error.log  debug

To run more on more cores increase the number of worker processes:
 worker_processes  number;

Debug logs will be in /usr/local/nginx_dpdk/logs/error.log

3. Running NGINX
================

Be sure you have configured DPDK and interfaces as explained at 0.2.

In conf/ofp.conf file, configure the ip address for fp0 interface.

To start webserver:
 sh start_nginx.sh 0

To stop webserver:
 sh stop_nginx.sh 0

From some other machine try to ping the IP we have set for fp0 interface.
If ping works, then open a web browser and try to access the same ip address.
If web page loads successfully, webserver with OFP is working.


4. Limitations or Known Issues
==============================

a) Current NGINX/OFP implementation assumes interface as 0.
It will not work for other interfaces.

b) NGINX option tcp_nodelay has no effect. To avoid low request rates,
sendfile and tcp_nopush should be enabled, as in the provided
nginx.conf file.


5. Changelog
============

Made changes to utilise the OFP event signaling support for handling
socket operation like accept and recieve calls on a fd. 
In ngx_select_module.c file, macro OFP_NOTIFY is enabled to use this 
implementation. 
If macro is set to zero, can use older select() implementation.