R&D/DPDK

Virtio DPDK 설치

sunshout 2014. 5. 17. 21:43

DPDK 개요


Prerequisite

  • HPET (High Precision Event Timer)
    • Clock Event Device 가 hpet 면,
    • DPDK 빌드시 CONFIG_RTE_LIBEAL_USE_HPET=y 옵션을 사용할 수 있다.
root@ubuntu:~# grep hpet /proc/timer_list
Clock Event Device: hpet
 set_next_event: hpet_legacy_next_event
 set_mode:       hpet_legacy_set_mode


  • Huge Page 지원 여부
    • 4K 이상의 page를 지원하기 위해서는 CPU에서 지원을 하여야 한다
    • pse (Page Size Extention): 2M huge page
    • pse36 : 4M Huge page
    • pdpe1gb : 1G Huge page
    • 아래 예제는 pse, pse36만 지원함을 의미함
root@ubuntu:~/dpdk# grep pse /proc/cpuinfo | uniq
flags           : fpu vme de pse ...
root@ubuntu:~/dpdk# grep pse36 /proc/cpuinfo | uniq
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 ...
root@ubuntu:~/dpdk# grep pdpe1gb /proc/cpuinfo | uniq
root@ubuntu:~/dpdk#


DPDK Build

  • 빌드 옵션
    • 다양한 컴파일러 지원: icc 또는 gcc
    • 다양한 플랫폼 지원 : linux 또는 bsd
    • 위 빌드 옵션은 ${DPDK}/config/ 디렉토리 밑에 존재
  • 아래 예제는 linux에서 gcc를 사용하는 DPDK에 대한 빌드 방법
root@ubuntu:~# git clone git://dpdk.org/dpdk
root@ubuntu:~# cd dpdk

root@ubuntu:~# make config T=x86_64-default-linuxapp-gcc

root@ubuntu:~# make


Virtio DPDK Build

root@ubuntu:~# cd ~

root@ubuntu:~# wget http://dpdk.org/browse/virtio-net-pmd/snapshot/virtio-net-pmd-1.2.tar.gz

root@ubuntu:~# tar zxvf virtio-net-pmd-1.2.tar.gz
root@ubuntu:~# cd virtio-net-pmd-1.2

root@ubuntu:~# make RTE_INCLUDE=../dpdk/build/include

root@ubuntu:~# make install



Huge Page 설정

  • DPDK application을 동작 시키기 위해서는 사전에 hugepage 설정이 필요하다.

root@ubuntu:~/dpdk# vi /etc/default/grub


/etc/default/grub 설정 파일

GRUB_CMDLINE_LINUX_DEFAULT="hugepages=1024"


grub update

root@ubuntu:~/dpdk# update-grub


  • hugepage 설정을 마치고 나면, filesystem에 마운트를 하여야 한다

root@ubuntu:~/dpdk# mkdir /hugepage

root@ubuntu:~/dpdk# vi /etc/fstab

/etc/fstab  수정

nodev /hugepage hugetlbfs defaults 0 0



리부팅...


DPDK kernel module 로드

  • DPDK application를 사용하기 위해서는 두 개의 커널 모듈이 로드되어야 한다(uio, igb_uio)

root@ubuntu:~/dpdk# modprobe uio


igb_uio.ko 모듈 로드(위에서 DPDK 를 빌드하고 kmod 디렉토리에 igb_uio.ko 커널 모듈이 생성됨)

root@ubuntu:~/dpdk# insmod x86_64-default-linuxapp-gcc/kmod/igb_uio.ko


커널 모듈 로드가 끝나면, 어떤 장치(NIC)을 사용할 것인지를 지정하여야 한다.

실제 동작은 해당 PCI 장치의 device driver 를 igb_uio를 변경하는 것이다. (아래 예제는 p2p1 NIC을 DPDK로 사용한다는 것이다)

root@ubuntu:~/dpdk# ./tools/igb_uio_bind.py --bind=igb_uio p2p1