论文原文PDF: sRoute: treating the Storage Stack Like a Network 出处:USENIX FAST 16 1. 概述 数据中心中,数据从一个应用最终到达存储服务器不仅要经过网络,还要经过很多的存储层次,这些层次可以称为存储栈(Storage stack)。对于数据中心中一个较为复杂的应用,一个IO请求甚至要经过应用缓存层、虚拟机操作系统(Guest OS)文件系统页高速缓存、Guest OS文件系统、Guest OS IO调度层、Guest OS块缓存、Guest OS块设备驱动、虚拟机管理器、宿主机操作系统(Host OS)网络驱动、缓存服务器、远程存储服务器缓存、远程存储服务器文件系统、远程存储服务器物理磁盘等多达十几层的存储阶段(Stage)。 而一般IO经过这些stage最终到达终点的路径是预先制定好的,这条路缺乏灵活性(hard-coded),即使仅想改变其中的某个stage,实际更改的时候也可能会涉及到这个stage之上和之下的多个stage。 本文仿照软件定义网络(SDN)的思想,提出了一种软件定义存储的架构sRoute,从原始的数据中心存储中心抽象出数据平面和控制平面,控制平面上的中心化controller随时可以对数据平面上的存储交换机sSwitchs安装“转发规则”,来实时控制IO路径。这样,就实现了包括改变终点、改变中间路径和将点对点路径散布为一点对多点在内的三种基本IO路径更改方法。 2. 整体设计 2.1. 数据平面和sSwitch 数据平面包括原有IO栈的各个stage和本文新加入的特殊stage sSwitch。sSwitch可以插入到IO路径的中任意的stage中,其根据当前的”IO转发规则”对IO进行转发。具体的,sSwitch会检测每个IO请求的header,根据header中包含的IO源点和目的点信息来和当前sSwtich所存的”IO转发规则”进行匹配,然后根据对应规则进行转发。 例1 把所有从VM~1~中到服务器S~1~文件X的读请求都路由到S~2~文件Y,那么VM~1~和S~2~之间的任意一个sSwitch的转发规则可以这样表示: