SPDK是最近比较热门的存储软件平台,用户态和轮询机制可以最大限度的保证驱动的性能。

前面的文章已经介绍了如何利用SPDK 构建FCP的target,本文介绍一下,利用SPDK 来构建FC-NVMe的target系统。

软件准备

1. 安装准备

首先解压qfc 压缩包,解开后有3个目录,分别为qfc-spdk, qfc 和 umq 。暂时不动它们,稍后进行操作。

解压SPDK的压缩包,进入其中的spdk-20.01.1/app目录。将刚才的解出的 qfc-spdk 目录拷贝至此。 进入spdk-20.01.1/lib目录,将刚才解出的qfc,ump目录拷贝至此。

1
2
3
4
5
6
7
8
9
cd spdk-20.01.1/
cd app/
cp -R /home/qfc-spdk-4.5.4d/qfc-spdk/ .

cd spdk-20.01.1/lib
cp -R /home/qfc-spdk-4.5.4d/qfc .
cp -R /home/qfc-spdk-4.5.4d/umq/ .


然后回到spdk-20.01.1目录,将DPDK压缩包解压。

1
2
tar zxvf /home/dpdk-19.11.tar.gz

2. 编译DPDK代码

打补丁

1
2
#cd spdk-20.01.1
#patch -p1 < app/qfc-spdk/spdk-20.01.1.patch

这段代码补丁的主要作用是:

  • 把qfc-spdk 驱动加入spdk 平台
  • 把QLogic HBA卡的PCI IDs 加入到uio_pci_generic 驱动

然后修改 spdk-20.01.1/CONFIG 文件

1
Set CONFIG_NVMEFC=y

编译DPDK,假设是使用x86_64平台:

1
2
3
# cd dpdk-19.11
# make install T=x86_64-native-linuxapp-gcc DESTDIR=. EXTRA_CFLAGS=-fPIC

3. 编译SPDK代码

先设定qfc-spdk的工作模式,编辑 app/qfc-spdk/Makefile,将模式改为qfc_tgt:

 APP = qfc_tgt
#APP = qfc_app

然后编译代码

1
2
3
# cd spdk-20.01.1
# ./configure --with-dpdk=./dpdk-19.11/x86_64-native-linuxapp-gcc
# make CONFIG_QFC=y

这个步骤里面,如果Linux OS系统是最小化安装的,会提示缺少一些库文件,比如uuid, numactl 之类的。通过yum 或者apt-get 补上就好了。不过在CentOS 系统当中,有CUnit-devel 这个库是官方yum源没有提供,可以从 pkgs.org 上面直接下载。

4.设置QFC SPDK 参数

上面编译工作都完成之后,就可以启动SPDK了。启动SPDK之前,首先编辑修改一下 qfc.conf.in 这个配置文件,文件位于 app/qfc-spdk 目录。

里面的注释已经比较清楚了,如果是简单测试,其实修改下面几个部分即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
[QFC]

# Backend application
#BackendAppFcp spdkscsi:-1
BackendAppNvme spdknvme:-1

# default transport for physical port(s)
# FCP or NVME
Transport NVME

#这里确定采用FC还是FC-NVMe

# Unload the kernel driver
UnbindFromKernel Yes

#Load fc card firmware from file /lib/firmware/ql2700_fw.bin
LoadFWfromFile Yes
#这里确认把fw文件放到系统的/lib文件夹当中。

# Multi Atio
# To Enable multi atio Set MultiAtioEnable as Yes.
# Default Multiatio will be disabled.
# 1. NumberOfATIO (Total number of ATIO FCP + NVMe)
# 2. NvmeConnectionID_ATIO (Number of atio queues for NVMe, ConnID based)
# 3. FCP Queues = NumberOfATIO - NvmeConnectionID_ATIO (Round-Robin)
# Note:- NumberofATIO should be less than ReactorMask
MultiAtioEnable No
#这里设置Multi ATIO 的支持,默认情况是关闭。

#NumberOfATIO 10
#NvmeConnectionID_ATIO 5

NumberOfATIOQ 8
NumberOfNvmeATIO 4
FCPQRouting roundrobin
NVMeQRouting connid

#这些采用默认设置即可。



[Malloc]
NumberOfLuns 2
LunSizeInMB 4096
#这里设置malloc内存盘,这里设置为2个卷,每个大小4096MB, 也可以使用真实磁盘或者NVMe盘。分别在[aio],[nvme] 部分设置。


[Null]
# Dev <name> <size_in_MiB> <block_size>
# Create an 1 terabyte null bdev with 4k block size called Null0
# For example add to a nvme Subsystem with:
# Namespace Null0
Dev Null0 1048576 4096
Dev Null1 5120 512
#如果为了测试网络延迟,也可以使用Null 来作为测试卷,这样IO落下之后,也无需处理,相比malloc 更快。



[Subsystem2]
NQN nqn.2016-06.io.spdk:cnode2
Listen FC nn-0x20000024ff7799ab:pn-0x21000024ff7799ab

# Listen FC nn-0x20000124ff5ba06b:pn-0x21000124ff5ba06b
AllowAnyHost Yes
#Host nqn.2016-06.io.spdk:init
SN SPDK00000000000002
Namespace Malloc0
# Namespace Null1

[Subsystem3]
NQN nqn.2016-06.io.spdk:cnode3
# Listen FC nn-0x20000124ff5ba06b:pn-0x21000124ff5ba06b
Listen FC nn-0x20000024ff7799a9:pn-0x21000024ff7799a9
AllowAnyHost Yes
# #Host nqn.2016-06.io.spdk:init
SN SPDK00000000000003
Namespace Null1


#创建2个Subsystem,一个采用Malloc 内存盘,另一个采用Null 卷。上面的Listen FC 参数非常重要,必须对应你要使用的FC端口的WWN。如果现在不知道端口的WWN参数,没有关系,执行一次QFC 就能够从系统打印知道结果,然后再回来修改conf文件即可。

其他不需要的部分可以直接注释掉。

5. 启动SPDK

首先运行脚本,注册HBA卡:

1
2
# cd spdk-20.01.1	
# sudo scripts/setup.sh

这个动作每次设备重启之后,都需要重新注册一下。

然后设置系统Huge page,可以通过DPDK 当中 usertools 目录里面的 dpdp-setup.sh 脚本来进行,需要预留至少6GB的内存huge page.

最后通过命令行启动SPDK,这里注意一下,qfc4.5.4 之后采用了一个新的 -g参数:

1
2
./app/qfc-spdk/qfc_tgt -c ./app/qfc-spdk/qfc.conf.in -g

如果在运行中看到如下报错:

1
2
3
umq: 0: umq_load_file_fw:6260: filestat error /lib/firmware/ql2700_fw.bin
umq: 0: umq_init_hba:3020: Initialization failed.
umq: 0: umq_ctrlr_init:1386: Unable to initialize HBA.

则说明在系统的 /lib/firmware 目录当中缺少firmware 文件,请把ql2700_fw.bin 文件拷贝到这个目录中。

我在第一次运行SPDK 之后,会看到这行信息:

1
2
umq: 3: umq_handle_aen:149: Target port Link Up: nn-0x20000024ff7799ab:pn-0x21000024ff7799ab

因此就知道我目前的HBA卡使用的端口,它的WWPN和WWNN号码,把WWPN 替换刚才 qfc.conf.in 文件当中 [Subsystem] 模块的内容,把信息改为:

1
2
3
4
5
6
7
[Subsystem2]
NQN nqn.2016-06.io.spdk:cnode2
Listen FC nn-0x20000024ff7799ab:pn-0x21000024ff7799ab

# Listen FC nn-0x20000124ff5ba06b:pn-0x21000124ff5ba06b


然后重启spdk,即可正常启动FCP Target。 如果想测试FC-NVME,还是修改qfc.conf.in 对应模块即可。

6. 服务器host端设置

从10.02.xx qla2xxx驱动开始,我们在编译驱动的时候,可以增加一个参数来进行FC NVMe discovery 服务。但是前提条件是,必须安装nvme-cli 工具。

所以首先yum 安装nvme-cli:

1
2
# yum install nvme-cli

然后从QLogic驱动下载网站,下载最新的10.x 的Linux驱动。目前官网最新Linux 版本是10.02.06.xx

下载源码之后,首先进行编译安装。编译安装需要系统首先安装kernel源码:

1
2
# yum install kernel-devel

然后解压驱动包:

1
2
3
4
# tar -xzvf qla2xxx-src-10.02.xx.yy.zz-k.tar.gz

# cd qla2xxx-src-10.02.xx.yy.zz-k

编译安装新驱动

1
2
./extras/build.sh initrd

这里需要介绍一下,编译安装的时候,有多种参数,可以直接使用 -h参数查看

1
./extras/build.sh -h

其中 install 参数是单纯编译,但是并不集成到启动镜像initrd image里面,这样你重启服务器之后,系统自动加载的qla2xxx 驱动版本,仍然是初始的inbox驱动版本; 而initrd 参数则是编译安装之后,把新驱动合并到initrd image当中,这样你重启服务器之后,系统加载的也是新的qla2xxx驱动版本了。

在安装完驱动之后,仍然使用脚本工具,执行命令参数 install_fcnvme_scripts:

1
2
3
4
5
6

# ./extras/build.sh install_fcnvme_scripts

Install udev rule for FC-NVME disovery and
boot time auto-connection service/scripts.

这个参数的作用就是配合nvme-cli 工具,自动发现FC-NVMe target目标。

如果是采用FC-NVMe,则是看到2个nvme设备,可以通过nvme list 命令或者lsblk,或者/dev目录查看。

RDMA 的全称是 Remote Direct Memory Access (远程内存直接访问),它是一种性能加速技术,通过网卡来直接访问另一台服务器上的内存,而不需要 CPU 的介入。而虚拟化环境当中,虚机使用 HCA 提供的 RDMA 有两种方式,一种就是直通方式,虚机独占使用 HCA,这就是我们第2种测试场景中的网络配置;另一种是虚拟化方式 PVRDMA (Paravirtual RDMA),是 VMware 对于 RDMA 技术的半虚拟化实现,vSphere 会在虚机中提供 PVRDMA 虚拟网卡,再通过 VMkernel 中的 PVRDMA 堆栈来访问 HCA,这种方式可以让多个虚机共享 HCA 设备,并且虚机之间可以利用HCA 来提高网络性能。

pvrdma_intro

我们今天介绍一下,在ESXi 7.0 环境当中,使用Marvell Fastlinq QL41000 系列网卡,实现 PVRDMA 通讯。两台ESXi 主机上,分别创建1个VM 虚机,然后这两个VM 之间可以通过PVRDMA 进行数据交互。

环境准备

  • 2台服务器
  • 2片QL41262 网卡
  • VMware ESXi 7.0
  • vCenter

pvrdma_topo

拓扑比较简单,两台服务器,每台服务器上,一张千兆网卡,一张QL41262 双口25G网卡。连接1G 千兆端口到管理网络,连接1个25G 端口到25G交换机,作为PVRDMA的测试网络。vCenter 服务器也连接在管理网络当中。

Marvell Fastlinq 网卡驱动版本

请访问下面 VMware 的官方网站, 然后点击展开 “Driver CD”,会根据时间最新的顺序,列出各个硬件厂商的VMware 驱动。
https://my.vmware.com/en/web/vmware/downloads/info/slug/datacenter_cloud_infrastructure/vmware_vsphere/7_0#drivers_tools

我们这里选择 “VMware ESXi7.0 NIC/iSCSI/FCoE Drivers for Marvell FastLinQ Ethernet 45000 & 41000 Series Controller” 的相关驱动即可。发布这篇文章的时候,最新的Fastlinq 驱动是 2021-02-23 发布的,点击“转至下载”会列出详细驱动版本信息。其中驱动模块版本信息如下:

qedentv-3.40.30.0

qedrntv-3.40.28.0

更新驱动

首先下载 MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip 驱动包,然后上传到ESXi 主机的 /tmp 目录。解压zip包,得到驱动文件(也是一个.zip文件)和驱动的介绍文档目录,然后使用esxcli software 命令来安装驱动文件即可。这里注意一下,在使用esxcli 命令安装指定驱动文件时,必须使用完整地址路径,如果省略了完整路径,系统会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

[root@localhost:~] cd /tmp
[root@localhost:/tmp] ls
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
[root@localhost:/tmp] unzip MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
Archive: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip
inflating: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
inflating: doc/README.txt
inflating: doc/release_note_qedrntv_3.40.28.0-1OEM.700.1.0.15843807.txt
inflating: doc/release_note_qedentv_3.40.30.0-1OEM.700.1.0.15843807.txt
inflating: doc/release_note_qedi_2.19.51.0-1OEM.700.1.0.15843807.txt
[root@localhost:/tmp]
[root@localhost:/tmp] ls
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680-package.zip doc
MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
[root@localhost:/tmp]
[root@localhost:/tmp] esxcli software component apply -d /tmp/MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807_17595680.zip
Installation Result
Components Installed: MRVL-E4-CNA-Driver-Bundle_5.0.248.1-1OEM.700.1.0.15843807
Components Removed: MRVL-E4-CNA-Driver-Bundle_5.0.219.0-1OEM.700.1.0.15843807
Components Skipped:
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true
[root@localhost:/tmp]


安装完驱动,先不要着急重启生效,我们要先修改一下驱动参数配置,来开启网卡驱动的RDMA 功能。否则在ESXi 主机配置当中,你会只能看到普通的物理网卡,在RDMA网卡项目当中,系统会看不到对应项目。这里使用esxcfg-module 命令,将QL41000/QL45000 系列网卡的RoCE 功能打开:

1
2
3
[root@localhost:/tmp] esxcfg-module -s 'enable_roce=1' qedentv


好了,到了这里,直接重启 ESXi 服务器即可。服务器重启之后,可以看到RDMA网卡这里,已经可以看到25G 端口是active 的状态。

nic_status

ESXi 主机设置

以下设置均采用vCenter 的GUI 界面配置。

基本网络设置

因为每台服务器是双网卡,1张千兆网卡作为管理网口,25G网卡作为业务网卡。所有先为25G网卡创建新的vswitch:

add_networking_pic1

依次选择 VMKernel Network Adapter -> New standards switch -> Assigned adapters:

add_networking_pic2

在第3步,选择25G网卡的端口,点击“绿色加号”图标,然后在下面列表当中选择25G端口。

add_networking_pic3

在第4步,填写VMkernel 名称:

add_networking_pic4

然后在第5步的时候,设置一个IP:

add_networking_pic5

一路确认完毕之后,在设置当中可以看到生效了,设备名称是vmk1:

add_networking_pic6

创建 vDS 交换机

在datacenter 图标上面右键,选择“distributed switch” 下面的”New Distributed Switch”

creat_vds_pic1

起个名字: DSwitch_PVRDMA

creat_vds_pic2

第2步选择版本,我这里是7.0;

第3步选择端口数量,默认是4,然后给Port Group起名:

creat_vds_pic3

然后一路Next结束,此时在datacenter当中的networking选项当中已经可以看到它了。

creat_vds_pic4

添加主机到 vDS

直接在vDS的图标上右键,选择 “Add and Manager Host”:

add_host_vds_pic1

第1步选择添加:

add_host_vds_pic2

第2步选择host 主机;

第3步选择主机上的网卡端口,本次测试选择25G网卡端口,如果网卡端口较多,可以通过上面的“View Settings” 来看一下网卡端口详细信息,避免错选。

add_host_vds_pic3

确认网卡之后,点击“Assign Uplink”,把刚才选择的25G端口设为Uplink1 .

然后界面会更新,你刚刚选择的端口后面会出现(Assigned)标识。

add_host_vds_pic4

第4步,将刚才在2.4步骤当中的vmk1, 加入到vDS的port group

add_host_vds_pic5

完成后可看到会在vmk1 后面显示(Reassigned),这是因为把它从一个port group 指定到了新的group。

add_host_vds_pic6

然后一路Next,结束配置。

ESXi 主机的高级系统配置

刚才设置完成了vDS,我们需要在ESXi 主机配置当中继续完成相关设定。

在Configure 菜单中,左侧选择System 下面的Advanced System Settings . 这里列出了ESXi 系统的详细设置。

esxi_host_pvrdma_pic1

我们直接点击右面蓝色的Edit 按钮,然后在文本过滤框中输入net.pv ,它会筛选出唯一的设置项目: Net.PVRDMAVmknic

esxi_host_pvrdma_pic2

在Value 框中,直接输入刚才的25G 网卡 vmk1,然后OK保存。

ESXi 主机的防火墙配置

还是在Configure->System 栏目下,选择Firewall. 和上面一样,选择Edit,然后在过滤搜索当中输入pv,会看到pvrdma的端口值,勾选前面的框,然后OK 保存。

esxi_host_firewall_pic1

创建VM虚拟机,并分配网卡

此时在ESXi 主机当中创建新的VM,一路按照默认,我这里的Guest OS 是CentOS 7.7.

创建完成之后,先进行配置。在VM上面右键,选择“Edit Settings”

vm_config_pic1

首先将内存设置展开,然后勾选“Reserve all guest memory” 。

vm_config_pic2

然后添加一块网卡,并展开新网卡的设置。点开网卡类型“VM Network”,选择Browse

vm_config_pic3

选择之前创建的vDS 网络

vm_config_pic4

然后再把类型选为PVRDMA

vm_config_pic5

完成设置,OK 保存。

虚机安装Linux CentOS 7.7

给虚机安装Linux 系统,过程略。

虚机 CentOS 设置

加载PVRDMA驱动模块

首先通过yum安装相关的依赖包

1
2
3
4
yum install rdma-core
yum install perftest
yum install libibverbs-utils
yum install infiniband-diags

此时可以通过ibv_devinfo 命令查看RDMA端口状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# ibv_devinfo
hca_id: vmw_pvrdma0
transport: InfiniBand (0)
fw_ver: 3.0.000
node_guid: 0050:5600:0090:1fcf
sys_image_guid: 0000:0000:0000:0000
vendor_id: 0x15ad
vendor_part_id: 2080
hw_ver: 0x1
board_id: 1
phys_port_cnt: 1
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 1024 (3)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet

[root@localhost ~]#

如果状态不是上面的情况,端口状态不是PORT_ACTIVE,则运行下面命令,重新加载相关模块。

1
2
3
modprobe -r vmw_pvrdma         //卸载pvrdma 驱动模块
modprobe -v vmw_pvrdma //加载pvrdma 驱动模块

关闭防火墙

在开始PVRDMA测试前,设置CentOS 的防火墙等系统服务:

首先关闭防火墙和网络配置服务

1
2
service firewalld stop
service NetworkManager stop

然后配置网卡IP。可以看到VM当中有两个网卡,一个是千兆网卡,我这里的IP端是10.x.x.x,另外为25G网卡设置IP 地址为 192.168.0.20/24 (VM20) 192.168.0.30/24 (VM30)

pvrdma 测试

在192.168.0.20 和192.168.0.30 可以互相ping 通,且ibv_devinfo 状态也都是正常后,我们可以开始PVRDMA 测试了:

在VM20 虚机上:

启动ib_write_bw 命令进行带宽测试

1
ib_write_bw -x 1 -d vmw_pvrdma0 --report_gbits

在VM30 虚机上:
前面设置与VM20 相同,25G网卡设置IP 为 192.168.0.30/24

启动ib_write_bw 测试命令:

1
ib_send_bw -x 1 -d vmw_pvrdma0 --report_gbits  192.168.0.20

可以看到结果

pvrdma_test_pic1

同理可以进行延迟测试:

在VM20 虚机上:

启动ib_write_lat 命令

1
ib_write_lat -x 1 -d vmw_pvrdma0 -a -F

在VM30 虚机上:

1
ib_write_lat -x 1 -d vmw_pvrdma0 -a -F 192.168.0.20 

pvrdma_test_pic2

NVME 现在正在慢慢替代传统的SCSI 成为主流的存储协议。在网络传输层面,也有了NVME over Fabric 协议规范。NVMe over Fabric支持把NVMe映射到多个Fabrics传输选项,主要包括FC、InfiniBand、RoCE v2、iWARP和TCP。

但在这众多的传输协议选择当中,谁是最适合的呢?非常有意思的是,在NVME组织的白皮书当中,直接有这样的一段话:

For instance, inorder to transmit NVMe protocol over a distance, the ideal underlying network or fabric technology will have the following characteristics:

·Reliable, credit-based flow control and delivery mechanisms.This type of flow control allows the network or fabric to be self-throttling, providing a reliable connectionthat can guarantee delivery at the hardware level without the need to drop frames or packets due to congestion. Credit-based flow control is native to Fibre Channel, InfiniBand and PCI Express®transports.

也就是并没有把支持RDMA 技术的以太网放在NVME over Fabric的理想网络协议当中,虽然以太网这边也是借用了InfiniBand 网络的RDMA, 技术但是对于以太网来讲,流控真的是一个难点,需要交换机和网卡双方面的配合以及大量的复杂的配置过程。虽然在大规模的部署当中,还是存在一些问题,但是简单的小规模的验证测试,则是非常方便。

网卡硬件

Marvell 的以太网网卡目前有E3 和E4 两个系列。 E3主要源自当年QLogic 收购的Broadcom的10G 网卡芯片,即57810, 57840系列。 E4则是QLogic后面发布的基于45000(100G能力)和41000(50G能力)两个系列。 QLogic后面被Marvell最终收购,成为Marvell产品线的一员。目前常见的有QL41132 (2x10G),QL41212(2x25G),QL45611(1x100G) 等网卡。 这里所有的E4 系列都可以使用下面的方法进行nvmet的设置。

软件准备

CentOS 7.7 (Kernel 3.10.0-1062)

Kernel Inbox OFED module

Kernel Inbox Fastlinq driver (8.37.0.20)

Target 端配置

1. 安装准备

首先确认本地的块设备:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 279.4G 0 disk
├─sda1 8:1 0 200M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 278.2G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 7.7G 0 lvm [SWAP]
└─centos-home 253:2 0 220.5G 0 lvm /home
sr0 11:0 1 1024M 0 rom
[root@localhost ~]#

然后看一下,目前加载了哪些模块与qedr(网卡RDMA 处理模块)相关。

1
2
3
4
5
6
7
[root@localhost ~]# lsmod |grep qedr
qedr 105558 0
ib_core 255469 13 qedr,rdma_cm,ib_cm,iw_cm,rpcrdma,ib_srp,ib_iser,ib_srpt,ib_umad,ib_uverbs,rdma_ucm,ib_ipoib,ib_isert
qede 134828 1 qedr
qed 645293 2 qede,qedr
[root@localhost ~]#
[root@localhost ~]#

然后加载nvmet 和nvmet-rdma 模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# modprobe nvmet
[root@localhost ~]# modprobe nvmet-rdma
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# lsmod |grep nvme
nvmet_rdma 27231 0
nvmet 51395 1 nvmet_rdma
rdma_cm 59991 7 rpcrdma,ib_srp,nvmet_rdma,ib_iser,ib_srpt,rdma_ucm,ib_isert
ib_core 255469 14 qedr,rdma_cm,ib_cm,iw_cm,rpcrdma,ib_srp,nvmet_rdma,ib_iser,ib_srpt,ib_umad,ib_uverbs,rdma_ucm,ib_ipoib,ib_isert
nvme_fc 33640 1 qla2xxx
nvme_fabrics 20212 1 nvme_fc
nvme_core 63717 2 nvme_fabrics,nvme_fc
[root@localhost ~]#


阅读全文 »

SPDK是最近比较热门的存储软件平台,用户态和轮询机制可以最大限度的保证驱动的性能。QLogic的HBA卡是目前市场上主流的FC控制器,服务器端的市场份额多年超过50%,而它在存储侧的市场份额则压倒性的领先。

对于最新的SPDK平台,QLogic也在2018年放出了它的代码,而且最大的特点是同时支持传统的FCP和最新的FC-NVMe协议。 本文介绍了使用SPDK 配合QLE26xx 16G HBA 和QLE27xx 32G HBA, 搭建存储系统的方法。

软件准备

1. 安装准备

首先解压qfc 压缩包,解开后有3个目录,分别为qfc-spdk, qfc 和 umq 。暂时不动它们,稍后进行操作。

解压SPDK的压缩包,进入其中的spdk-20.01.1/app目录。将刚才的解出的 qfc-spdk 目录拷贝至此。 进入spdk-20.01.1/lib目录,将刚才解出的qfc,umq目录拷贝至此。

1
2
3
4
5
6
7
8
9
cd spdk-20.01.1/
cd app/
cp -R /home/qfc-spdk-4.5.3a/qfc-spdk/ .

cd spdk-20.01.1/lib
cp -R /home/qfc-spdk-4.5.3a/qfc .
cp -R /home/qfc-spdk-4.5.3a/umq/ .


然后回到spdk-20.01.1目录,将DPDK压缩包解压。

1
2
tar zxvf /home/dpdk-19.11.tar.gz

阅读全文 »

ASA5505 上应用Let’s encrypt 的证书


公司有一台Cisco的ASA5505,一直被自己用来进行lab网络的VPN Gateway 接入。但是以前一直是使用ASA自身的自签名证书,并没有申请正式的域名证书。看到Let’s encrypt的免费证书真的很好用,就打算把这个ASA的自签名证书变成正式的域名证书。

说起来容易,但是做起来发现不是那么容易。首先ASA5505 是比较老款的机器,并不支持Cisco REST API, 也就没有办法使用 Cisco ASA plugin for Let’s Encrypt client, 这个非常好用而且简单的插件。

既然没法使用certbot,那就只能采用手动方式来安装证书。搜索了一下,只有这个哥们儿的应用场景和我一样Implementación de Certificados Gratuitos Let’s Encrypt en Cisco ASA para Accesos VPN,可他的blog是用西班牙文写的。本想找google翻译一下,忽然发现他引用的命令都是可以直接理解的,于是拿出当年玩日文版游戏瞎猜语句的懒劲儿,开始了我的安装步骤。

1.申请域名证书

假设你打算应用在VPN网关上的域名是:asa.yourdomain.com 。那么首先使用一台服务器,安装nginx和letsencrypt certbot。因为国内的IPv4网络环境往往都封闭80和443端口,除非你去做了备案,才能保证可用,所以我选择了IPv6。首先设置web服务器网络接口ip是一个全球可路由的IPv6地址,然后在he.net 上面的FreeDNS 把这个IPv6地址指向 asa.yourdomain.com 。

接着配置安装nginx,默认安装即可,我们只是使用它获取https在目标服务器的80/443端口自动验证。

我的服务器是FreeBSD 11.2,所以命令是:

1
2
pkg install nginx
pkg install py27-certbot

如何获取证书,这里就不在赘述,网上有很多的教程,在FreeBSD里面的命令是,然后按照提示操作即可:

1
certbot certonly --standalone
阅读全文 »
0%