IX-Protected Dataplane Operating System解讀


本文為作者原創,轉載請注明出處(http://www.cnblogs.com/mar-q/)by 負贔屓

  一、概述

  商業操作系統在應用程序每秒鍾需要數百萬次操作時才能保持高吞吐量和低(尾)延遲,對於最慢的請求只需幾百微秒。通常認為對於高性能網絡(小信息的高包率、低延遲)的構建,最好都是在內核之外構建用戶態協議,IX提出了dataplane operating system,提供高IO性能同時保持內核的安全性。IX通過硬件虛擬化技術分離內核網絡處理的調度和管理。

  如果閱讀本文有些困惑,可以先閱讀我的上一篇文章《NFV、DPDK以及部分用戶態協議研究》。

  二、IX在HOME服務器的配置運行

  1. 基本需求

  未發現IX的requirement page(估計關閉了),在GitHub上說需要DPDK以及Intel網卡82599、X520、X540,aws ec2測試失敗,家里一台realtek網卡機器測試失敗,現在另一台Intel網卡服務器測試,具體配置信息為:

Ubuntu 16.04.3 LTS
#lspci | # hardinfo
Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz 12
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection (2) I218-V (rev 05)
07:00.0 Network controller: Intel Corporation WiFi Link 5100
03:00.0 VGA compatible controller: NVIDIA Corporation Device 1b80 (rev a1)
# lscpu
虛擬化:VT-x
L1d cache:32K
L1i cache:32K
L2  cache:256K
L3  cache:15360K
# /proc/meminfo
MemTotal:16329504 kB
  1. 下載ix項目及相關子模塊

git clone https://github.com/ix-project/ix.git
git submodule update --init
## 子模塊下載速度比較慢,尤其是dpdk(我在aws上下載好了)
[submodule "deps/dpdk"]
    url = http://dpdk.org/git/dpdk
[submodule "deps/dune"]
    url = https://github.com/ix-project/dune.git
[submodule "deps/pcidma"]
    url = https://github.com/ix-project/pcidma.git
  1. 編譯子模塊

## 逐步編譯,dpdk可能報錯,建議先把所有依賴環境安裝完畢,參照DPDK的安裝使用及測試。
chmod +r /boot/System.map-`uname -r`
make -sj64 -C deps/dune
make -sj64 -C deps/pcidma
make -sj64 -C deps/dpdk config T=x86_64-native-linuxapp-gcc
make -sj64 -C deps/dpdk

  pcima模塊用於PCI設備驅動,目的在於進行DMA/總線控制,后面的ix配置文件中如果網卡成功綁定了PCI設備號,就可以獲取DMA/總線控制權,同時,使用完畢,pcima模塊負責釋放控制

  dune模塊是他們提到的安全控制模塊,通過硬件虛擬化技術,讓應用跑在ring0層(Intel的CPU分層訪問機制),像OS一樣擁有訪問CPU特權並且能改變page table和注冊中斷等等,同時還能執行正常的系統調用。http://dune.scs.stanford.edu/dune有兩大模塊:kern和libdune,就是虛擬化內核和使用庫函數,它只會影響調用dune_init的app,其他系統中的app不受影響。這個項目比較早,大概2010年就開工了。

  1. 編譯IX:

## 注意centos和Ubuntu安裝包不同,編譯出現過dev報錯,make clean后重新編譯了一次才成功。
apt-get install libconfig-dev libnuma-dev
make -sj64
  1. 環境配置

## 目錄下ix.conf為主配置文件。
cp ix.conf.sample ix.conf
# modify at least host_addr, gateway_addr, devices, and cpu
## 修改了大頁配置,設置大頁內存為4096(這里只是一次性修改,注意node*,分配給了每個NUMA節點)
sh -c 'for i in /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages; do echo 4096 > $i; done'
## 將編譯好的dune和pcima加載到內核中
insmod deps/dune/kern/dune.ko
insmod deps/pcidma/pcidma.ko
## 加載dpdk的用戶態uio驅動
modprobe uio
insmod deps/dpdk/build/kmod/igb_uio.ko
## 特別注意,這里需要關閉網卡,因為要進行dpdk綁定,ssh鏈接確保有兩塊網卡,否則需要在服務器上調試
ifconfig
eno1   Link encap:以太網  硬件地址 4c:cc:6a:43:5d:91
          inet 地址:192.168.2.100  廣播:192.168.2.255  掩碼:255.255.255.0
          inet6 地址: fe80::9193:9580:a1ed:cb9e/64 Scope:Link
lo        Link encap:本地環回
          inet 地址:127.0.0.1  掩碼:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
wlp7s0    Link encap:以太網  硬件地址 00:1e:7e:c3:7a:06
          inet 地址:192.168.3.200  廣播:192.168.3.255  掩碼:255.255.255.0
          inet6 地址: fe80::5f5c:c814:4b64:35fd/64 Scope:Link
ifdown eno1
## 無法執行,新的Linux更改了網卡的命名方式,ifdown無法識別,改用命令:
ifconfig eno1 down
## 斷開鏈接,使用另一個ssh連接電腦——
## 綁定dpdk的uio模塊到eno1網卡,address為前面檢測到的PCI地址,或者lspci | grep -i eth
deps/dpdk/tools/dpdk_nic_bind.py -b igb_uio PCI_ADDRESS
## 運行IX的TCP echo服務器,這里出了一點錯誤:配置文件中也需要修改pci地址和同一個網段的ip地址
./dp/ix -- ./apps/echoserver 4
## echo 123 | nc -vv 192.168.2.xxx 1234 
## 默認端口號為1234,不在同一網段,連接失敗,但是服務運行成功。

  關於網卡支持的問題:

  他們說最新支持的型號看doc,反正我沒找到doc。。。大概翻了一下的他們的代碼,關於設備驅動的就這里進行了特殊加載:

  ixgbe和i40e驅動都是Intel支持虛擬化功能的驅動,它們的主要作用有兩點:一是SR-IOV mode,直接將端口資源分配給不同訪客操作系統,以開啟本地模式;二是VMDq mode,通過IO虛擬機或虛擬監視器進行網絡資源集中管理,可以進行軟件切換加速模式。上面也看到了,在加載vfio模塊的時候報錯了,但是這里ix跳過去了,應該也是支持普通模式的,我還沒研究這個普通模式的具體區別是啥樣的。http://dpdk.readthedocs.io/en/latest/nics/intel_vf.html

  三、最后再介紹一下IX-project這波人

  這個項目是DARPA(美國國防預先研究計划局)的crash計划資助的,有一定的軍方背景,論文主要是14年在USENIX的OSDI發表的這篇:

  同年和15年產生了很多類似的項目,更出名一點的是韓國人在USENIX的NSDI發表的mtcp。16年IX這波人在ACM的TOCS上又投了一篇類似的文章。

  人沒咋換,我就順手看了一下,主要是斯坦福的幾個人,瑞士的沒仔細看。一作Adam Belay是16年畢業的博士,這里頭的三作者Christos Kozyrakis是他的導師,Christos是希臘人,到UC Berkeley讀的研究生,他研究的東西挺雜,硬件架構、系統環境、系統軟件、編程模型等等,從他的詞雲里沒看到ix,只看到了前面的dune,這個項目也是Adam Belay和他搞的。

  我就又查了查Christos的導師,他02年從伯克利畢業,導師是UC Berkeley的David Patterson,這個老頭很出名,他是精簡指令集RSIC的創始人,他還提出了冗余廉價磁盤陣列RAID,他還是體系結構的量化分析、雲計算等概念的創始人之一。。。震驚。。。原來老外的水都這么深。。。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com