您的位置:首页 > 运维架构

Arrakis: The Operating System is the Control Plane(OSDI 2014)论文学习

2018-01-15 10:10 441 查看
论文地址:https://www.usenix.org/node/186141

问题(OS):
在传统的操作系统中,需要内核协调server应用对硬件设备的访问,从而实现在网络和磁盘安全方面的进程隔离,这使得操作系统中进程的负载相对较大,此问题在现代客户端-服务器计算中尤为突出。
高速以太网和低延迟持久存储器的结合大大提高了I/O密集型软件的效率,因而许多服务器在执行操作系统代码上花费大量时间,特别是网络和文件系统栈的延迟和吞吐量。虽然服务器应用程序通常执行非常简单的操作,但是每个客户机请求需要多次经过OS内核。因此需要对内核代码路径研究并优化。

解决方法:

本文设计并实现了一个新的操作系统Arrakis,将内核的作用划分为两个。应用程序可以直接访问虚拟I/O设备,从而允许I/O操作跳过内核;同时重构内核来提供网络和磁盘保护等传统功能,内核不用协调每个操作。从而将内核从大多数数据流路径中分离。

本文贡献:
分析操作系统和应用程序在网络和存储操作中的开销,并给出了应对直接的网络和磁盘I/O操作的硬件设备、内核、运行时的分工架构。
修改开源Barrelfish操作系统,实现此模型的原型。
在此原型基础上在多个广泛使用的网络服务(Redis、IP层的middlebox、HTTP负载平衡)上进行评估。实验表明在延迟和可伸缩性方面均获得显著的效果,且不需要修改应用程序的编程接口;通过修改POSIX API也可以获取改进效果。

操作系统和应用程序在网络和存储操作中的开销:
网络栈开销:以UDP echo server为例,主要有网络堆栈、调度器、内核交叉、复制数据包等开销。
存储栈开销:虽然以往认为CPU开销与磁盘访问时间相比是微不足道的,但最近的硬件大大降低了存储延迟,OS存储堆栈开销成为一个影响延迟的主要因素。
应用开销:以Redis为例,read中平均76%的延迟是由于socket操作;write中90%的延迟是由于I/O操作。
硬件I/O虚拟化:SR-IOV旨在支持共享单个物理机的多个虚拟机的高速I/O,可以通过IOMMU保护访问。Arrakis中使用SR-IOV,IOMMU和支持适配器来提供对I / O设备的直接应用级访问。

设计与实现——设计目标:

最小化kernel对数据层操作的参与;对应用程序编程的透明化;适当的OS/硬件抽象(便于支持广泛的I/O模式、在多核系统上的扩展、应用对位置和负载平衡的要求)。



设计与实现——架构:
Arrakis的目标是实现I/O硬件虚拟化的支持,关注可以向操作系统和节点上运行的应用程序呈现多个自身实例的硬件。对于每个虚拟化设备实例,底层物理设备提供唯一的内存映射寄存器文件,描述符队列和中断,因此允许控制层将每个设备实例映射到单独的保护域。
设备导出可从控制平面访问的管理界面,以创建或销毁虚拟设备实例,将各个实例与网络流或存储区关联,并将共享资源分配给不同的实例。
应用程序通过其受保护的虚拟设备实例执行I / O,而无需内核干预。为了执行这些操作,应用程序依赖于作为库提供的用户级I / O堆栈。用户级别的I / O堆栈可以为应用程序量身定制,因为它可以假设对虚拟化设备实例的独占访问,允许我们删除应用程序不需要的任何功能。
这个专用环境中不需要复用操作和安全检查,并可以被删除。



Ps:虚拟网络适配器(VNIC)、网络适配器(NIC)、虚拟存储接口控制器(VSIC)、虚拟存储区域(VSA)

设计与实现——硬件模型:
这里的硬件模型用于支持安全的用户层网络和存储。
这里网络设备通过将自身呈现为多个虚拟网络接口卡(VNIC)来提供对虚拟化的支持;同样,每个存储控制器都会暴露多个虚拟存储接口控制器(VSIC)。
每个虚拟接口卡(VIC)与队列和速率限制器连接,VNIC还提供过滤器的功能,从而消除安全检查中需要的内核调解。 
存储控制器需要通过其物理功能提供接口,将虚拟存储区域(VSA)映射到物理驱动器区域,并将其与VSIC关联。 
设计与实现——控制层接口:
应用程序与Arrakis控制平面之间的接口用于向系统请求资源,并将I / O流程引导至用户程序和从用户程序引导。 这个接口提供的关键抽象是VIC、doorbell(处理异步事件通知)、过滤器、VSA和速率指定器。

设计与实现——File Name Lookup:
将文件命名与实现分开,提供便于应用程序直接控制存储分配的VSA。文件或目录的操作在本地处理,无需内核干预。
应用程序可以通过三种方式访问文件:1)管理VSA的A应用程序库会导出的文件服务器接口;2)VSA可以映射到多个进程中,此时对整个VSA进行访问控制,而不是对每个文件或目录进行访问控制;3)在应用程序将数据导出为标准格式,作为普通文件存储在内核提供的文件系统中。
设计与实现——网络数据层接口:
在Arrakis中,应用程序通过直接与硬件通信来发送和接收网络数据包,数据平面接口在一个应用程序库中实现。
Arrakis库提供了两个应用程序接口:本地Arrakis接口支持零拷贝I / O; Arrakis还提供了不需要修改应用程序的POSIX兼容层。
Arrakis在数据平面接口之上提供了一个用户空间网络栈。 这个堆栈旨在最大化吞吐量。 

设计与实现——存储数据层接口:
低级存储API提供了一组命令,通过关联的VSIC中的命令队列,以异步方式读取,写入和刷新VSA中的任意偏移量和任意大小的硬件高速缓存。 
本文设计了持久数据结构库Caladan来利用低延迟存储设备。持久的数据结构可以获得比文件系统提供的简单的读/写接口更高的效率。
本文还设计了持久的日志和队列数据结构,对于日志和队列,唯一需要保留的元数据是它们开始和结束的地方。
持久化是异步的,追加操作立即返回,从而屏蔽多余写延迟。
Caladan在打开后怠惰地整理中断或过时的header,从结构的目的端寻找额外的完整条目。

评估:
主要比较了:Linux kernel version 3.8 (Ubuntu version 13.04), Arrakis using the POSIX interface (Arrakis/P),and Arrakis using its native interface (Arrakis/N)。
Server-side Packet Processing Performance(UDP echo server):Arrakis/P达到Linux的2.3倍吞吐量;Arrakis/N达到了Linux的3.9倍吞吐量。
Memcached Key-Value Store:Arrakis/P在单核中的吞吐量是Linux的1.7倍。
Redis NoSQL Store:使用快速I/O堆栈,Redis的读取性能与Memcached相当,写入延迟提升63%,写入吞吐量提高9倍。
HTTP Load Balancer(ApacheBench 2.3,haproxy 1.4.24):单核中Arrakis比Linux和Linux(SEPOLL)好2.2倍和2倍。
IP-layer Middlebox:Arrakis的吞吐量是Linux的2.6倍。

总结:
本文描述并评估了Arrakis操作系统,它被设计用于将内核从I/O数据路径中分离出来,同时不需要影响进程的隔离。和传统操作系统不同的是,传统操作系统中需要内核协调I/O操作来实现进程隔离和资源控制,Arrakis中使用硬件设备来直接在用户层库中处理I/O请求。Arrakis中的内核在控制层设置硬件实现对应用的限制。
通过对Arrakis操作系统的实现和评估,表明保护和高性能是不冲突的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐