本文为作者原创,转载请注明出处(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. 前端框架对于未来web移动端的影响

    现在前端框架市场比较乱,各种各样的框架参差不齐,这给我带来了很多困惑,同样是很多朋友的困惑吧!因为前端框架有很多种,对于程序员来说选择学习是非常困难的,不可能有几十上百种都要学习吧,不过最好的办法就是 ...

  2. 如何管理Session(防止恶意共享账号)——理论篇

    目录 知识要求 背景 技术原理 如何管理Session remember me的问题 附录 知识要求 有一定的WEB后端开发基础,熟悉Session的用法,以及与Redis.Database的配合 本 ...

  3. LSA和pLSA的比较

    Comparison   LSA pLSA 1. Theoretical background Linear Algebra Probabilities and Statistics 2. Objec ...

  4. JAVAFX-3 开发应用

    理解布局 布局容器(Layoutcontainer)或面板(Pane)允许对JavaFX应用程序场景图中的UI控件进行灵活.动态的排布.JavaFX Layout API包括下列容器类: ● Bord ...

  5. Less合并

    合并是LESS的一个特性,它允许通过指定的语法来为某个属性添加使用逗号或空格分隔的值的列表.对于文本阴影.盒阴影.背景.变换等允许使用值的列表的属性,合并非常有用. 合并的语法,就是在属性名称和冒号之 ...

  6. 从a标签传值中文乱码解决

    <% out.print(new String(request.getParameter("a标签的参数").getBytes("iso8859-1"), ...

  7. KVM 虚拟机 安装配置

    原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...

  8. 验证 Swarm 数据持久性 - 每天5分钟玩转 Docker 容器技术(104)

    上一节我们成功将 Rex-Ray Volume 挂载到了 Service.本节验证 Failover 时,数据不会丢失. Scale Up 增加一个副本: docker service update ...

  9. 将项目打包成jar,如何又将jar还原成项目

    一.将项目打包成jar 第一步: 选择项目,鼠标右键,选择export ,出现如下 接下来就是点击Next,Next,最后点击Finish 后 会生成jar 二.将jar还原成项目 第一步 用反编译工 ...

  10. Web前端学习——HTML

    HTML其实还是蛮容易学习的,无非就是一些标签.格式的填写,大学的时候也做过网站设计,所以这里主要记录一些常用的HTML标签.属性以及书写方法等. 一.常见HTML格式 主要包含文件type,html ...