1.用户态NVMe运维利器 -- SPDK NVMe 字符设备
2.关于InfiniBand架构和知识点漫谈
3.一文掌握InfiniBand技术和架构
4.NASçåºå±åè®®
5.openfiler连接iSCSI
用户态NVMe运维利器 -- SPDK NVMe 字符设备
刘孝冬 Intel 高级软件工程师 专注于开源存储SPDK及ISA-L软件的开发。
随着数据中心规模的不断扩大与延展,硬件设备的运行维护已成为信息技术企业与部门普遍重视的一环。随之而来,是庞大的IT运维工作量。实现硬件设备的erlang源码剖析可维护,需要灵活高效的监控与管理工具。
在Linux中,有诸多监控与管理工具助力设备运维,如hdparm、ethtool、SmartCTL等;也有很多简单易用的系统工具,如lspci、lsblk、iostat。对于目前部署量越来越大的NVMe设备,最通用有效的工具莫过于Nvme-cli。
通过Nvme-cli,使用者可以获取NVMe设备记录的各种LOG;查询当前设备状态;获取设备本身以及内部Namespace的配置信息;设置设备的各项功能;以及对设备做重启与格式化。
Nvme-cli在监控管理NVMe设备的主要过程,即是组织相关命令信息,通过对NVMe设备文件(/dev/nvmeX,/dev/nvmeXnY)发起IOCTL系统调用,将命令传入内核继而发送请求到NVMe设备上;待NVMe设备响应命令请求,发回响应后,再提取有效响应信息出来。因此,Nvme-cli众多命令的普遍格式是:
SPDK是一组用于编写高性能、可扩展的用户模式存储应用程序的工具和库。其基础是处在用户空间,轮询模式、异步、无锁的NVMe驱动程序。这为从用户空间应用程序直接访问NvmeSSD提供了零拷贝、高度并行的访问。在此基础上,SPDK还提供了完整的块堆栈作为用户空间库,该库能够执行与操作系统中块存储软件栈相同的许多操作,以及最上层的NVMe-oF、iSCSI和Vhost-user应用服务。
伴随着SPDK日益广泛的应用,NVMe设备的监控管理成为一个必要的需求。即处在用户空间应用程序的NVMe设备,如何能被用户监控管理。尤其是unity slg游戏源码要便捷、容易通用,那就要求Linux下常用的工具也能被SPDK所支持,尤其是Nvme-cli。
之前,SPDK社区在Nvme-cli源码基础上,加入对特定于SPDK下NVMe设备的修改(github.com/spdk/nvme-cli...),使得Nvme-cli用在该类设备上。但该实现方式如同在Nvme-cli进程内启动了一个SPDK实例(如图1所示),难以被合并到Nvme-cli的主分支上。
用户自己编译与使用的过程略显繁琐(spdk.io/doc/nvme-cli.html...):
由于类似SPDK版的Nvme-cli使用上的诸多不便,社区在寻找更佳的实现方式,来支持Linux上相关工具。
在SPDK v. Release (spdk.io/release//...)中增加的一个新功能叫做NVMe字符设备 (NVMe character device)。它基于CUSE实现,可以在Linux内核中为NvmeController和Nvme Namespace创建对应字符设备节点(即 /dev/spdk/nvmeX,/dev/spdk/nvmeXnY)。Nvme-cli等工具可以无修改,直接使用这些模拟出的字符设备来监控管理SPDK下的NVMe设备。
由于此功能目前被认为是实验性的功能,所以需要在configure的时候,显式指定使能nvme-cuse,即在编译SPDK NVMe 驱动时,加入基于CUSE字符设备的支持。
SPDK为NVMe字符设备功能加入了两个RPC命令bdev_nvme_cuse_register与bdev_nvme_cuse_unregister。它们分别用于指定为某NVMe设备创建CUSE字符设备,和注销CUSE字符设备。当使用bdev_nvme_cuse_register RPC命令后,SPDK会通过CUSE在路径/dev/spdk下,为NVMe controller创建 /dev/spdk/nvmeX,并为其下Namespace创建 /dev/spdk/nvmeXnY,如图2。
之后,可见路径/dev/spdk下出现SPDK创建的NVMe字符设备:
nvme-cli使用指定的SPDK NVMe字符设备。目前,大多数的nvme-cli命令可以通过这种方式执行。
nvme /dev/spdk/nvme0 []
SPDK社区期望能够无缝地将当前流行的监控管理工具应用在SPDK下的NVMe设备上。当前实现的SPDK NVMe字符设备朝着这个目标迈进了一大步——诸多采用对NVMe字符设备路径文件发起IOCTL调用的工具和命令可以直接运行操作。
但它的依旧存在诸多局限性:
通过CUSE创建的NVMeNamespace路径文件属性是字符设备。但从常理上,其文件属性应该为块设备,例如Linux内核驱动创建的NVMeNamespace路径文件属性是块设备。虽然与IO命令不同,监控与管理操作不需要区分设备类型,但在Nvme-cli中如果操作设备指定的钓鱼人App源码是NVMeNamespace文件,代码是存在多处诸如S_ISBLK这样的设备类型检查。
以下两图分别是SPDK通过CUSE创建的NVMe设备文件,和内核驱动创建的NVMe设备文件,对比可见NVMeNamespace路径文件属性的不同。
/proc/diskstats信息的缺失。诸多性能监控工具采用定期查看/proc/diskstats文件来获取存储设备的IO流量和负载情况。SPDK目前还未实现一个通用的信息注入方法,来将SPDK块设备或NVMe设备的相关信息实时写入/proc/diskstats。
SPDK当前的获取设备IO流量和负载信息的方法,是通过SPDK RPC 方法bdev_get_iostat。
/sys/block/目录下相关文件的缺失。部分工具,如lsblk,是需要通过筛选读取/sys/block/目录下设备文件,来获取相关信息;对/sys/block/目录下设备相关的某些文件,写入内容,来操作设备。SPDK目前也没有实现简洁有效的方法,模拟导出自己的/sys/block/文件。
关于InfiniBand架构和知识点漫谈
OpenFabrics Enterprise Distribution (OFED)是一组开源软件驱动、核心内核代码、中间件和支持InfiniBand Fabric的用户级接口程序,由OpenFabrics Alliance (OFA)于年发布第一个版本。Mellanox OFED适用于Linux、Windows (WinOF),包含诊断和性能工具,用于监视InfiniBand网络性能。OpenFabrics Alliance (OFA)是一个基于开源的组织,致力于开发、测试、支持OpenFabrics企业发行版,旨在通过将高效消息、低延迟和最大带宽技术架构直接应用到最小CPU开销的应用程序中,实现最大应用效率。成立于年的该联盟最初专注于开发独立于供应商、基于Linux的InfiniBand软件栈,并在年扩展支持Windows,使其软件栈真正跨平台。年,该组织进一步扩展其章程,支持iWARP,并于年增加了对RoCE (RDMA over Converged)的支持,通过以太网交付高性能RDMA和内核旁路解决方案。资讯源码加采集年,随着OpenFabrics Interfaces工作组的建立,联盟再次扩大,实现对其他高性能网络的支持。
Mellanox OFED是一个包含驱动、中间件、用户接口,以及一系列标准协议IPoIB、SDP、SRP、iSER、RDS、DAPL,支持MPI、Lustre/NFS over RDMA等协议的单一软件堆栈。Mellanox OFED由开源OpenFabrics组织维护,作为ISO映像提供,包含每个Linux发行版的源代码、二进制RPM包、固件、实用程序、安装脚本和文档。InfiniBand串行链路可以在不同的信令速率下运行,通过捆绑实现更高吞吐量。原始信令速率与编码方案耦合,产生有效的传输速率,编码通过铜线或光纤发送的数据,将错误率降至最低,同时增加了一些开销。
InfiniBand软件架构设计旨在简化应用部署,使得IP和TCP套接字应用程序可以利用InfiniBand性能,无需对以太网上的现有应用程序进行任何更改。适用于SCSI、iSCSI和文件系统应用程序。位于低层InfiniBand适配器设备驱动程序和设备独立API (verbs)之上的上层协议提供了行业标准接口,可以无缝部署现成的应用程序。LinuxInfiniBand软件架构由一组内核模块和协议组成,还有一些关联的用户模式共享库。用户级操作的应用程序对底层互连技术保持透明,本文主要关注应用程序开发人员需要了解的信息,以便使IP、SCSI、iSCSI、网上展会网站源码套接字或基于文件系统的应用程序在InfiniBand上运行。
InfiniBand堆栈的最低层由HCA驱动程序组成,每个HCA设备都需要一个特定于HCA的驱动程序,该驱动程序注册在中间层,并提供InfiniBand Verbs。高级协议,如IPoIB、SRP、SDP、iSER等,采用标准数据网络、存储和文件系统应用在InfiniBand上操作。除了IPoIB提供了在InfiniBand硬件上的TCP/IP数据流的简单封装,其他更高级别的协议透明地支持更高的带宽、更低的延迟、更低的CPU利用率和端到端服务,使用经过现场验证的RDMA(远程DMA)和InfiniBand硬件的传输技术。
在InfiniBand上评估基于IP的应用程序最简单的方法是使用上层协议IP over IB (IPoIB)。在高带宽的InfiniBand适配器上运行的IPoIB可以为任何基于IP的应用程序提供即时的性能提升。IPoIB支持在InfiniBand硬件上的(IP)隧道数据包。在Linux中,协议作为标准的Linux网络驱动程序实现,允许任何使用标准Linux网络服务的应用程序或内核驱动程序在不修改的情况下使用InfiniBand传输。Linux内核2.6.及以上版本支持IPoIB协议,并对InfiniBand核心层和基于Mellanox技术公司HCA的HCA驱动程序的支持。这种方法对于带宽和延迟不重要的管理、配置、设置或控制平面相关数据是有效的。然而,为了获得充分的性能并利用InfiniBand体系结构的一些高级特性,应用程序开发人员也可以使用套接字直接协议(SDP)和相关的基于套接字的API。
InfiniBand不仅对基于IP的应用提供了支持,同时对基于Socket、SCSI和iSCSI,以及对NFS的应用程序提供了支持。例如,在iSER协议中,采用SCSI中间层的方法插入到Linux,iSER在额外的抽象层(CMA,Connection Manager Abstraction layer)上工作,实现对基于InfiniBand和iWARP的RDMA技术的透明操作。这样使得采用LibC接口的用户应用程序和内核级采用Linux文件系统接口的应用程序的透明化,不会感知底层使用的是什么互连技术。具体技术细节,请参考梳理成文的“在InfiniBand架构和技术实战总结”电子书,目录如下所示,点击原文链接获取详情。
目前,InfiniBand软件和协议堆栈在主流的Linux、Windows版本和虚拟机监控程序(Hypervisor)平台上都得到了支持和支持。这包括Red Hat Enterprise Linux、SUSE Linux Enterprise Server、Microsoft Windows Server和Windows CCS (计算集群服务器)以及VMware虚拟基础设施平台。
一文掌握InfiniBand技术和架构
InfiniBand技术通过简化服务器之间的连接,同时支持服务器与远程存储和网络设备的连接,极大提升了数据传输效率。OpenFabrics Enterprise Distribution (OFED) 是一组开源软件驱动,为InfiniBand Fabric提供用户级接口程序。
OpenFabrics Alliance (OFA) 发布了OFED的第一个版本,Mellanox OFED支持Linux和Windows操作系统,并提供诊断和性能工具,用于监控InfiniBand网络运行状态。
文章福利推荐Linux内核源码交流群,共享学习书籍、视频资料,前名可进群领取价值的内核资料包。
OpenFabrics Alliance致力于开发并推广软件,通过将高效消息、低延迟和最大带宽技术架构应用到最小CPU开销的应用程序中,实现最大应用效率。
年,OFA成立,最初是OpenIB联盟,致力于开发基于Linux的InfiniBand软件栈。年,OFA支持Windows操作系统,使软件栈跨平台。年,OFA扩展其章程,包括对iWARP的支持。年,OFA增加了对RoCE (RDMA over Converged)的支持,通过以太网提供高性能RDMA和内核旁路解决方案。年,随着OpenFabrics Interfaces工作组的建立,OFA再次扩大,实现对其他高性能网络的支持。
年开始起草InfiniBand规格及标准规范,年正式发表。InfiniBand Architecture (IBA) 在集群式超级计算机上广泛应用,全球HPC高算系统TOP大效能的超级计算机中有相当多套系统都使用上IBA。
除了InfiniBand Trade Association (IBTA) 9个主要董事成员CRAY、Emulex、HP、IBM、intel、Mellanox、Microsoft、Oracle、Qlogic外,其他厂商如Cisco、Sun、NEC、LSI等也在加入或重返InfiniBand阵营。为了满足HPC、企业数据中心和云计算环境中的高I/O吞吐需求,新一代高速率Gbps的FDR (Fourteen Data Rate) 和Gpb EDR InfiniBand技术已广泛应用。
InfiniBand大量用于FC/IP SAN、NAS和服务器之间的连接,作为iSCSI RDMA的存储协议iSER已被IETF标准化。相比FC,InfiniBand在性能、延迟和兼容性方面具有优势。
InfiniBand采用PCI串行高速带宽链接,从SDR、DDR、QDR、FDR到EDR HCA连接,可做到极低时延,基于链路层的流控机制实现先进的拥塞控制。InfiniBand采用虚通道(VL)方式来实现QoS,虚通道是共享物理链接的相互分立的逻辑通信链路,每条物理链接可支持多达条的标准虚通道和一条管理通道(VL)。
RDMA技术实现内核旁路,提供远程节点间RDMA读写访问,完全卸载CPU工作负载,基于硬件传出协议实现可靠传输和更高性能。相比TCP/IP网络协议,InfiniBand使用基于信任的、流控制的机制来确保连接的完整性,数据包极少丢失,接受方在数据传输完毕后返回信号来标示缓存空间的可用性,从而提升了效率和整体性能。
InfiniBand网络基于“以应用程序为中心”的新观点,提供易于使用的消息服务。InfiniBand消息服务摒弃了传统网络和应用程序之间消息传递的复杂结构,直接使用InfiniBand服务意味着应用程序不再依赖操作系统来传递消息,这大大提高了通信效率。
InfiniBand与其他网络的核心区别在于其基于信用的流量控制系统和远程直接内存访问(RDMA)。InfiniBand支持远程节点间RDMA读写访问,具备在完全卸载CPU和操作系统的方式下,在两个远程系统的存储区域移动数据的能力。
InfiniBand物理信号技术一直超前于其他网络技术,使其具备比其他任何网络协议都大的带宽。InfiniBand架构的核心是把I/O子系统从服务器主机中剥离出去,通过光纤介质,采用基于交换的端到端的传输模式连接它们。
在InfiniBand架构中,数据通过Hub Link方式连接,目前的标准是Hub Interface 2.0。Hub Link是一种串行总线,具有良好的可扩展性,主板设计师可以根据需要的总线带宽在内存控制器和HCA之间选择多条Hub Link总线。
InfiniBand规范定义了三个基本组件:HCA、TCA和交换机。HCA提供从系统内存到InfiniBand网络的通路;TCA提供I/O设备或I/O网络与InfiniBand网络的连接;交换机使多个InfiniBand叶节点互连进一个单一网络,同时支持多个连接。
InfiniBand采用分层协议,每层负责不同的功能。物理层定义了电气特性和机械特性;链路层描述了数据包的格式和数据包操作的协议;网络层是子网间转发数据包的协议;传输层负责报文的分发、通道多路复用和基本传输服务;上层协议包括SDP、SRP、iSER、RDS、IPoIB和uDAPL等。
InfiniBand灵活支持直连及交换机多种组网方式,主要用于HPC高性能计算场景,大型数据中心高性能存储等场景,满足低时延的需求。
高性能计算(HPC)是一个涵盖面很广的领域,它覆盖了从最大的“TOP ”高性能集群到微型桌面集群。在HPC系统中,InfiniBand的低延迟、高带宽和原生的通道架构对于此类系统来说是非常重要的。
NASçåºå±åè®®
æ人认为ï¼NASä¸SANçæ¬è´¨åºå«å¨äºä»¥å¤ªç½ä¸FCï¼ä¸¤è çå½è¿ç³»äºTCP/IPåè®®ãSANéç¨çæ¯FCä¸çSCSIä¼ è¾ãiSCSIä½ä¸ºæ²éäºIPä¸SCSIï¼å·²ç»æçç¨äºFCä¸ï¼çæ°åè®®ï¼è¢«çä½å½±åSANå½è¿çä¸ä»¶å¤§äºãè¿äºæ¬è´¨åºå«æ¯ä»ç½ç»æ¶ææ¥è¯´çï¼å¯¹äºè®¸å¤å ³æ³¨NASä¸SANæ§è½å·®å«çç¨æ·æ¥è¯´ï¼ä¸¤è çæ¬è´¨å·®å«è¿åå¨äºæ件读åå®ç°ä¸ãNASéç¨äºNFSï¼Sunï¼æ²éUnixéµè¥åCIFSæ²éNTä¸Unixï¼è¿ä¹åæ äºNASæ¯åºäºæä½ç³»ç»çâæ件级â读åæä½ï¼è®¿é®è¯·æ±æ¯æ ¹æ®âæ件å¥æ+å移éâå¾åºãå¥ææ¯æ¯è¿ç¨è¿è¦å°çåå ï¼é常ç¨ä½è¿ç¨ä¹é´éä¿¡ãèµæºå®ä½çãSANä¸è®¡ç®æºååå¨é´çæ¥å£æ¯åºå±çååè®®ï¼å®æç §å议头çâåå°å+å移å°åâæ¥å®ä½ãä»è¿ç¹è¯´ï¼SAN天çå ·æåå¨å¼ææ´åçåå¨èæååè½ãä¸é¢æ们ä»ç»ä¸ä¸NASæä»¶å ±äº«ççµéââNFSåCIFSã
NFSï¼ç½ç»æ件系ç»ï¼æ¯Unixç³»ç»é´å®ç°ç£çæä»¶å ±äº«çä¸ç§æ¹æ³ï¼æ¯æåºç¨ç¨åºå¨å®¢æ·ç«¯éè¿ç½ç»ååä½äºæå¡å¨ç£çä¸æ°æ®çä¸ç§æ件系ç»åè®®ãå ¶å®å®å æ¬è®¸å¤ç§åè®®ï¼æç®åçç½ç»æ件系ç»æ¯ç½ç»é»è¾ç£çï¼å³å®¢æ·ç«¯çæ件系ç»éè¿ç½ç»æä½ä½äºè¿ç«¯çé»è¾ç£çï¼å¦IBM SVDï¼å ±äº«èæçï¼ãç°ä¸è¬å¨Unix主æºä¹é´éç¨Sunå¼åçNFSï¼Sunï¼ï¼å®è½å¤å¨ææUnixç³»ç»ä¹é´å®ç°æ件æ°æ®çäºè®¿ï¼éæ¸æ为主æºé´å ±äº«èµæºçä¸ä¸ªæ åãç¸æ¯ä¹ä¸ï¼SANéç¨çç½ç»æ件系ç»ï¼ä½ä¸ºé«å±åè®®ï¼éè¦ç¹å«çæ件æå¡å¨æ¥ç®¡çç£çæ°æ®ï¼å®¢æ·ç«¯ä»¥é»è¾æ件åçæ¹å¼ååæ°æ®ï¼æ件æå¡å¨ä½¿ç¨åæ å°ååçæ£çç£çåï¼å¹¶å®æç£çæ ¼å¼åå æ°æ®ç®¡çã
CIFSæ¯ç±å¾®è½¯å¼åçï¼ç¨äºè¿æ¥Windows客æ·æºåæå¡å¨ãç»è¿Unixæå¡å¨ååçéæ°å¼ååï¼å®å¯ä»¥ç¨äºè¿æ¥Windows客æ·æºåUnixæå¡å¨ï¼æ§è¡æä»¶å ±äº«åæå°çä»»å¡ãå®ææ©çç±æ¥æ¯NetBIOSï¼è¿æ¯å¾®è½¯å¼åçå¨å±åç½å å®ç°åºäºWindowså称èµæºå ±äº«çAPIãä¹åï¼äº§çäºåºäºNetBIOSçNetBEUIåè®®åNBT(NetBIOS OVER TCP/IP)åè®®ãNBTåè®®è¿ä¸æ¥åå±ä¸ºSMBï¼Server Message Block Potocolï¼åCIFSï¼Common Internet File Systemï¼éç¨äºèç½æ件系ç»ï¼åè®®ãå ¶ä¸ï¼CIFSç¨äºWindowsç³»ç»ï¼èSMB广æ³ç¨äºUnixåLinuxï¼ä¸¤è å¯ä»¥äºéãSMBåè®®è¿è¢«ç§°ä½LanManageråè®®ãCIFSå¯ç±ç±ä¸æ¯æSMBçæå¡å¨éä¿¡èå®ç°å ±äº«ã微软æä½ç³»ç»å®¶æåå ä¹ææUnixæå¡å¨é½æ¯æSMBåè®®/SMBBA软件å ã
ä½æè¿çæ¶æ¯æç¹ä¸å¦â微软已ç»å¨Exchangeçå ³å¥åºç¨ä¸æ¤æ¶äºå¯¹CIFSåè®®çæ¯æã微软å¨å ¶ç½ç«ä¸ç§°ï¼CIFSåè®®è¦æ±æ°æ®éè¿å®¢æ·çç½ç»è®¾å¤ï¼å®¹æé ææ§è½ç¶é¢ãæ¤ä¸¾éå°ä¸å 人士æ¨å»ã
SAMBAå¼æ¾æºä»£ç 软件çå¼åè ä¹ä¸æ°é米称ï¼å¯¹Linuxçææ§æåè¯å¾å©ç¨å ¶å¨æ¡é¢æä½ç³»ç»æ¹é¢çä¼å¿ä¿æ¤Windowsæå¡å¨æä½ç³»ç»çéå®æ¯å¾®è½¯æç»CIFSåè®®ççæ£åå ãNetwork Applianceå ¬å¸ï¼NAS设å¤ä¸»è¦ç产åä¹ä¸ï¼ä¹æ¾è¡¨ç¤ºï¼å¾®è½¯çè¿ä¸æªæ½æ¯âä¸çæºå贪婪çâã
openfiler连接iSCSI
在连接iSCSI设备时,首先在ESX Server的VI客户端中,选中服务器,进入“配置”选项卡,点击“存储适配器”链接,然后选择“iSCSI软件适配器”,点击“属性”进行设置。 关于iSCSI的实现方式,有软件Initiator驱动程序、TOE HBA卡和iSCSI HBA卡。性能上,软件Initiator最弱,TOE居中,iSCSI HBA最佳。然而,iSCSI HBA仅支持iSCSI协议,不支持NFS或CIFS。成本方面,iSCSI HBA最高,TOE居中,软件Initiator基本无成本。在实际应用中,除非数据块大,否则软件Initiator通常足够,特别是在万兆级iSCSI环境中,iSCSI HBA的优势可能更明显,但成本接近光纤通道。 启用iSCSI软件适配器后,点击“常规”选项卡的“配置”按钮,选中“已启用”并确认。接下来,可以看到启用界面,然后选择“动态发现”,添加Openfiler的IP地址,完成iSCSI服务器添加。早期ESX Server版本可能需要手动开启防火墙端口,ESX Server 3.5 Update 3之后会自动处理。 添加iSCSI服务器后,系统提示需要重新扫描主机。扫描可能耗时,对于大量设备或卷,可以选择只扫描iSCSI软件适配器。在Web管理界面中,选择“Status”选项卡,点击“iSCSITargets”查看连接信息。 配置存储器时,选择“磁盘/LUN”类型,输入数据存储名称,完成VMFS分区创建。对于NAS存储,选择“网络文件系统”,输入服务器地址、装载点和存储名称,配置完成后确认并完成添加。 虚拟机迁移时,右键虚拟机选择“迁移”,指定目标ESX Server,进行兼容性验证,然后选择迁移虚拟机配置文件和磁盘。在默认资源池“Resources”中确认迁移,启动迁移过程后,等待迁移完成,最后将虚拟机迁移到NAS2ESX。扩展资料
Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN)。整个软件包与开放源代码应用程序(例如 Apache、Samba、LVM2、ext3、Linux NFS 和 iSCSI Enterprise Target)连接。Openfiler 将这些随处可见的技术组合到一个易于使用的小型管理解决方案中,该解决方案通过一个基于 Web 且功能强大的管理界面实现。