本文为作者原创,转载请注明出处(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. LTS
#lspci | # hardinfo
Intel(R) Core(TM) i7-6800K CPU @ .40GHz
:19.0 Ethernet controller: Intel Corporation Ethernet Connection () I218-V (rev )
:00.0 Network controller: Intel Corporation WiFi Link
: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: 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::5d:
inet 地址:192.168.2.100 广播:192.168.2.255 掩码:255.255.255.0
inet6 地址: fe80::::a1ed:cb9e/ Scope:Link
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::/ Scope:Host
wlp7s0 Link encap:以太网 硬件地址 :1e:7e:c3:7a:
inet 地址:192.168.3.200 广播:192.168.3.255 掩码:255.255.255.0
inet6 地址: fe80::5f5c:c814:4b64:35fd/ 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
## echo | nc -vv 192.168..xxx
## 默认端口号为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,他还是体系结构的量化分析、云计算等概念的创始人之一。。。震惊。。。原来老外的水都这么深。。。

IX-Protected Dataplane Operating System解读的更多相关文章

  1. [Chapter 3 Process]Practice 3.3 Discuss three major complications that concurrent processing adds to an operating system.

    3.3  Original version of Apple's mobile iOS operating system provied no means of concurrent processi ...

  2. How to Make a Computer Operating System

    How to Make a Computer Operating System 如何制作一个操作系统(翻译版) 原文地址:Github:How to Make a Computer Operating ...

  3. General-Purpose Operating System Protection Profile

    1 Protection Profile Introduction   This document defines the security functionality expected to be ...

  4. 《modern operating system》 chapter 5 Input and output 注意事项

    Input / Output It should also provide an interface between the devices and the rest of the system th ...

  5. DBCC CHECKDB 遭遇Operating system error 112(failed to retrieve text for this error. Reason: 15105) encountered

    我们一个SQL Server服务器在执行YourSQLDBa的作业YourSQLDba_FullBackups_And_Maintenance时遇到了错误: Exec YourSQLDba.Maint ...

  6. The World's Only Advanced Operating System

    The World's Only Advanced Operating System

  7. Unable to open the physical file xxxx. Operating system error 2

    在新UAT服务器上,需要将tempdb放置在SSD(固态硬盘)上.由于SSD(固态硬盘)特性,所以tempdb的文件只能放置在D盘下面,而不能是D盘下的某一个目录下面. ALTER  DATABASE ...

  8. CREATE FILE encountered operating system error 5(Access is denied.)

    这篇博文主要演示"CREATE FILE encountered operating system error 5(Access is denied.)"错误如出现的原因(当然只是 ...

  9. Linux启动报错missing operating system

    用UltraISO制作了一个Red Hat Enterprise Linux Server release 5.7系统的U盘启动盘,然后在一台PC上安装,由于安装过程中在干别的事情,有些选项没有细看. ...

随机推荐

  1. Ubuntu安装pyenv实现多版本控制

    Ubuntu安装pyenv实现多版本控制 git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT=&quo ...

  2. centos7下部署Django(nginx+uwsgi+python3+django)

    系统版本 centos7 python版本 使用官方python3.6.3正式版 django版本 使用本文发布时最新的1.11.7 uwsgi版本 使用本文发布时最新的2.0.15 nginx版本 ...

  3. JavaEE中的MVC(四)AOP代理

    咱们来吹牛,JDK的动态代理在AOP(Aspect Oriented Programming,面向切面编程)中被称为AOP代理,而AOP是Spring框架中的重要组成部分. 代理模式 但是什么是代理模 ...

  4. ThinkPHP中ajax绑定select下拉框无法显示

    html代码: 控制器代码: 其中的<option value="{$vo.gradeId}">{$one.gradeName}</option> 在操作过 ...

  5. 在centOS上搭建wordpress博客系统

    一.主要内容 1.安装LAMP服务器系统(Linux.Apache.MySQL.PHP ); 2.安装wordpress: 二.具体步骤 一.LAMP环境设置 1.安装LAMP系统,在centOS上可 ...

  6. codeforces 883M. Quadcopter Competition 思路

    M. Quadcopter Competition time limit per test 3 seconds memory limit per test 256 megabytes input st ...

  7. MYSQL 主从复制---简单易学

    本帖最后由 传说中的草包 于 2017-4-12 09:12 编辑为什么要用mysql主从复制? 这个问题不需要回答吧,,,,,想想,一个人干活快呢,还是一万个能性格功力一样的人干活快呢. 不用解释大 ...

  8. PHP实现的进度条效果详解

      <?php //防止执行超时 set_time_limit(0); //清空并关闭输出缓存 ob_end_clean(); //需要循环的数据 for($i = 0; $i < 188 ...

  9. scapy安装及SCTP包分析

    关于Scapy scapy是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等.它可以很容易地处理一些典型操作,比如端口 ...

  10. 《跟我学IDEA》二、配置maven、git、tomcat

    上一篇博文我们讲解了如何去下载并安装一个idea,在这里我们推荐的是zip的解压版,另外我们配置的一些编码和默认的jdk等.今天我们来学习配置maven.git.tomcat等.还是那句话,工欲善其事 ...