1a9643ea8Slogwang# F-Stack Quick Start Guide
2a9643ea8Slogwang
3a9643ea8Slogwang  F-Stack is an open source high performance network framework based on DPDK.
4a9643ea8Slogwang
5a9643ea8Slogwang
6a9643ea8Slogwang## System Requirements
7a9643ea8Slogwang
8a9643ea8SlogwangSee Intel DPDK [linux_gsg](http://dpdk.org/doc/guides/linux_gsg/index.html)
9a9643ea8Slogwang
102abe29f7Sunknown## clone F-Stack
11a9643ea8Slogwang
12a9643ea8Slogwang	mkdir /data/f-stack
13a9643ea8Slogwang	git clone https://github.com/F-Stack/f-stack.git /data/f-stack
14a9643ea8Slogwang
15a9643ea8Slogwang## Compile DPDK
16a9643ea8Slogwang
17a9643ea8SlogwangRead DPDK Quick Started Guide or run the command below
18a9643ea8Slogwang
198d76b62eSfengbojiang	cd /data/f-stack/dpdk
20*6b8a3e40Sjfb8856606	meson -Denable_kmods=true build
218d76b62eSfengbojiang	ninja -C build
228d76b62eSfengbojiang	ninja -C build install
23a9643ea8Slogwang
24a9643ea8Slogwang## Set hugepage
25a9643ea8Slogwang
26a9643ea8SlogwangFor a single-node system, the command to use is as follows (assuming that 1024 pages are required):
27a9643ea8Slogwang
28a9643ea8Slogwang	echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
29a9643ea8Slogwang
30a9643ea8SlogwangOn a NUMA machine, pages should be allocated explicitly on separate nodes:
31a9643ea8Slogwang
32a9643ea8Slogwang	echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
33a9643ea8Slogwang	echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
34a9643ea8Slogwang
35a9643ea8SlogwangOnce the hugepage memory is reserved, to make the memory available for DPDK use, perform the following steps:
36a9643ea8Slogwang
37a9643ea8Slogwang	mkdir /mnt/huge
38a9643ea8Slogwang	mount -t hugetlbfs nodev /mnt/huge
39a9643ea8Slogwang
40a9643ea8SlogwangThe mount point can be made permanent across reboots, by adding the following line to the `/etc/fstab` file:
41a9643ea8Slogwang
42a9643ea8Slogwang	nodev /mnt/huge hugetlbfs defaults 0 0
43a9643ea8Slogwang
44a9643ea8Slogwang## offload NIC
45a9643ea8Slogwang
46a9643ea8Slogwang    modprobe uio
47*6b8a3e40Sjfb8856606    insmod /data/f-stack/dpdk/build/kernel/linux/igb_uio/igb_uio.ko
48*6b8a3e40Sjfb8856606    insmod /data/f-stack/dpdk/build/kernel/linux/kni/rte_kni.ko carrier=on
49a9643ea8Slogwang    python dpdk-devbind.py --status
50a9643ea8Slogwang    ifconfig eth0 down
51a9643ea8Slogwang    python dpdk-devbind.py --bind=igb_uio eth0 # assuming that use 10GE NIC and eth0
52a9643ea8Slogwang
53a9643ea8Slogwang## Compile  lib
54a9643ea8Slogwang
558d76b62eSfengbojiang    # Upgrade pkg-config while version < 0.28
568d76b62eSfengbojiang    cd /data/
578d76b62eSfengbojiang    wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
588d76b62eSfengbojiang    tar xzvf pkg-config-0.29.2.tar.gz
598d76b62eSfengbojiang    cd pkg-config-0.29.2
608d76b62eSfengbojiang    ./configure --with-internal-glib
618d76b62eSfengbojiang    make
628d76b62eSfengbojiang    make install
638d76b62eSfengbojiang    mv /usr/bin/pkg-config /usr/bin/pkg-config.bak
648d76b62eSfengbojiang    ln -s /usr/local/bin/pkg-config /usr/bin/pkg-config
658d76b62eSfengbojiang
663377ed76Slogwang    export FF_PATH=/data/f-stack
678d76b62eSfengbojiang    export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig
688d76b62eSfengbojiang    cd /data/f-stack
69a9643ea8Slogwang    cd lib
70a9643ea8Slogwang    make
71a9643ea8Slogwang
72a9643ea8Slogwang### Compile Nginx
73a9643ea8Slogwang
74a9643ea8Slogwang	cd ../
7528e10b57Sfengbojiang(姜凤波)	cd app/nginx-1.16.1
76a9643ea8Slogwang	./configure --prefix=/usr/local/nginx_fstack --with-ff_module
77a9643ea8Slogwang	make
78a9643ea8Slogwang	make install
79a9643ea8Slogwang	cd ../../
8040600211Slogwang	/usr/local/nginx_fstack/sbin/nginx
81a9643ea8Slogwang
82a9643ea8Slogwang### Compile Redis
83a9643ea8Slogwang
8414cef497Sfengbojiang	cd app/redis-5.0.5/
85a9643ea8Slogwang	make
862abe29f7Sunknown	# run with start.sh
872abe29f7Sunknown	./start.sh -b ./redis-server -o /path/to/redis.conf
882abe29f7Sunknown	# or run like this:
8922a4ca44Sjohnjiang	#./redis-server --conf config.ini --proc-type=primary --proc-id=0 /path/to/redis.conf
90a9643ea8Slogwang
91