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
10*2abe29f7Sunknown## 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
19a9643ea8Slogwang	cd /data/f-stack/dpdk/tools
20a9643ea8Slogwang	./dpdk-setup.sh
21a9643ea8Slogwang
22a9643ea8SlogwangCompile with x86_64-native-linuxapp-gcc
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
477330b870Stenfy    insmod /data/f-stack/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
487330b870Stenfy    insmod /data/f-stack/dpdk/x86_64-native-linuxapp-gcc/kmod/rte_kni.ko
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
553377ed76Slogwang    export FF_PATH=/data/f-stack
563377ed76Slogwang    export FF_DPDK=/data/f-stack/dpdk/x86_64-native-linuxapp-gcc
57a9643ea8Slogwang    cd ../../
58a9643ea8Slogwang    cd lib
59a9643ea8Slogwang    make
60a9643ea8Slogwang
61a9643ea8Slogwang### Compile Nginx
62a9643ea8Slogwang
63a9643ea8Slogwang	cd ../
64a9643ea8Slogwang	cd app/nginx-1.11.10
65a9643ea8Slogwang	./configure --prefix=/usr/local/nginx_fstack --with-ff_module
66a9643ea8Slogwang	make
67a9643ea8Slogwang	make install
68a9643ea8Slogwang	cd ../../
6940600211Slogwang	/usr/local/nginx_fstack/sbin/nginx
70a9643ea8Slogwang
71a9643ea8Slogwang### Compile Redis
72a9643ea8Slogwang
73a9643ea8Slogwang	cd app/redis-3.2.8/
74a9643ea8Slogwang	make
75*2abe29f7Sunknown	# run with start.sh
76*2abe29f7Sunknown	./start.sh -b ./redis-server -o /path/to/redis.conf
77*2abe29f7Sunknown	# or run like this:
78*2abe29f7Sunknown	#./redis-server --conf=config.ini --proc-type=primary --proc-id=0 /path/to/redis.conf
79a9643ea8Slogwang
80