找回密码
 立即注册
搜索
查看: 4808|回复: 29

[网络] NVMe/TCP踩坑记录

[复制链接]
     
发表于 2023-2-1 20:21 | 显示全部楼层 |阅读模式
前情提要https://bbs.saraba1st.com/2b/thread-2059849-1-1.html

上次搞定iSCSI的问题之后,我很是消停了一阵,硬盘也相当稳定地运行了差不多一年,但是有一个问题一直没有离开我的大脑——“通过iSCSI挂载的nvme盘,单线程4K读写速度只有30M不到一点,而直连在主板上的nvme盘,单线程4K读写100M都是最少的,有没有什么办法让nvme盘超越这个限制?”

起先我以为是网卡速率的问题,觉得可能要上25G以上的网卡配合RDMA才能突破这个限制,但后来数码区有其他人发了自己的iSCSI盘性能表现,结果我发现相比我的配置并没有任何实质性的提升,也就断了从硬件上着手的想法,退而思考是不是iSCSI的协议层面限制了nvme盘的速率,能不能通过改配置等方式来进行性能调优。于是我比较闲的时候就去搜索iSCSI调优的相关内容,但一直都没有什么突破,一直到一周前,一个名词跳到了我的眼前:“NVMe to Fabric”。具体的技术细节我就不说了,总之这就是把以前的SAN Fabric针对NVMe重新实现了一遍,同时也针对NVMe的特性优化了读写机制,同时制订了iSCSI的高阶进化版NVMe/TCP规范。我一下就来劲了,换了这个就能突破极限了吗?

国内互联网上关于NVMe/TCP如何配置的内容堪称珍惜,我搜了很久只找到两篇差不多是你抄我我抄你的教程,油管上也没有什么UP做相关的内容,大约是这项技术还距离家庭用户太远了没有进入大家的视野。依靠仅有的一点教程,我把硬盘配置了出来,接下来就是激动人心的跑分测试环节:

CrystalDiskMark_20230201192341.png
(CrystalDiskMark默认模式)

结果是完全不激动人心,作为对比我把iSCSI盘的跑分放上来

CrystalDiskMark_20230201194944.png
(CrystalDiskMark默认模式)

显然可见,采用新协议后的硬盘除了高线程4K随机读取性能显着提升之外,其他方面的性能要么是没啥进步,要么是显着倒退。同时通过linux kernel配置的NVMe/TCP一重启之后就得重头配置,这下就把我整蒙了。这么鸡肋的技术,要他有何用?第二天我上班摸鱼的时候仔细思考了下,发现了一个盲点。NVMe/TCP技术最大的特点,就是针对nvme盘的高IO能力,强化了读写队列和线程数。如果我不从速度的角度而是以IOPS的角度去测试,会呈现什么效果呢?于是当天回家后我开始了第二轮测试,结果如下:

CrystalDiskMark_20230131193717.png
(CrystalDiskMark峰值性能模式)

局面一下子打开了,硬盘的4K高线程随机读取IOPS达到了恐怖的27W,而且结合读取速度看显然是撞到了万兆网口的速率极限,如果按理论值算的话读取IOPS上60W不是问题。然后测试了电脑上的系统盘和iSCSI盘之后我确认了这个想法,下面是另外两个盘的测试数据

CrystalDiskMark_20230131193242.png
(CrystalDiskMark峰值性能模式,iSCSi盘)

CrystalDiskMark_20230201200026.png
(CrystalDiskMark峰值性能模式,系统nvme盘)

显然,NVMe/TCP盘在读取上把iSCSI盘秒到不知道哪里去了,性能甚至干爆了直连主板的nvme盘,但这个写入是怎么回事,为什么全方位败给了iSCSI盘?我又在公司摸鱼了一天寻找解决方案,最后发现了一条未曾设想的道路——我要不要在linux上跑一下硬盘测试,看看问题是出在哪个环节。一跑吓一跳,我这块硬盘在linux下高线程4K随机写入能力就是只有100M,和之后的环节没有任何关系,就是第一步拉胯了。但我的盘可是intel的企业级盘,没理由性能差到这么离谱,所以我在家里所有装了nvme的linux设备上跑了同样的测试,结果是一样的,高线程4K随机写入能力就是只有100M,和硬盘无关就是linux的问题。

那这个问题就需要一个解释了,我看了一批linux硬盘读写相关的文档,得出了一个我的假说:linux在设计硬盘读写的时候,是针对机械硬盘的特性采用了很多优化方案,其中比较明显我能感受出来的是采用系统内存作为硬盘读写的缓存,因此即使是用机械盘做iSCSI,跑分结果和用SSD也是几乎一致的。但是某些优化方案在面对NVMe盘这种高并发读写设备的时候反而拖了后腿,造成了硬盘读取时延的大幅延长,具体表现就是NVMe/TCP盘在跑读取测试的时候任务管理器中显示的硬盘时延会达到恐怖的12Wms。要想进一步优化性能,就要从linux内核上开始动手了。目前我找到的方案,就是采用SPDK来代替linux内核管理硬盘,绕过kernel现有的硬盘读取机制获得明显的性能提升。但是一旦使用SPDK之后,按照现有材料的说法是我就没有办法通过linux直接管理nvme盘,必须用SPDK的管理机制才能操作硬盘了,这个显然风险太大,所以下一步得先搭建一个纯粹的测试平台之后才能进一步验证NVMe/TCP盘的性能表现了。请大家拭目以待




评分

参与人数 4战斗力 +7 收起 理由
citrus + 2
zouyun147 + 2 好评加鹅
ltycomputer + 1 好评加鹅
01046 + 2 思路广

查看全部评分

回复

使用道具 举报

     
发表于 2023-2-1 21:03 来自手机 | 显示全部楼层
LTT以前白嫖了一堆SSD的时候让胖子大佬搞性能调优搞了好久
估计是有坑

— from Xiaomi MIX 2S, Android 10 of S1 Next Goose v2.5.2-play
回复

使用道具 举报

     
发表于 2023-2-1 21:37 | 显示全部楼层


比看悬疑小说更有趣呢
回复

使用道具 举报

发表于 2023-2-1 21:42 | 显示全部楼层
挺自嗨的
回复

使用道具 举报

发表于 2023-2-1 22:27 来自手机 | 显示全部楼层
本帖最后由 oskneo 于 2023-2-1 22:29 编辑

佩服lz研究精神,偶现在是半放弃状态了。
偶的nuc明明上了25g卡,速度居然不如10g模式。虽然主力那台速度问题不大,rdma可4k单线程上30多m。不过iscsi反而不如smb了,搞不了iscsi升级版iser

—— 来自 HUAWEI LYA-AL00, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-2-1 22:31 | 显示全部楼层
通篇我只看到两个字,摸鱼
回复

使用道具 举报

     
发表于 2023-2-1 22:55 | 显示全部楼层
本帖最后由 blackeyed 于 2023-2-1 22:57 编辑

QQ图片20230201225415.png
分别是
40G SMB NVME盘
40G SMB  硬RAID6盘




QQ图片20230201225357.png
回复

使用道具 举报

     
 楼主| 发表于 2023-2-1 23:01 | 显示全部楼层
blackeyed 发表于 2023-2-1 22:55
分别是
40G SMB NVME盘
40G SMB  硬RAID6盘

nas系统是什么,win server吗
回复

使用道具 举报

     
发表于 2023-2-1 23:06 | 显示全部楼层
Processed 发表于 2023-2-1 23:01
nas系统是什么,win server吗

是啊, 要和windows之间跑rdma, 你唯一的选择就是win server
回复

使用道具 举报

发表于 2023-2-1 23:24 来自手机 | 显示全部楼层
blackeyed 发表于 2023-2-1 22:55
分别是
40G SMB NVME盘
40G SMB  硬RAID6盘

多少盘都raid6,偶现在8盘有时候速度不到100m,已经想转raid10了

—— 来自 Sony XQ-AT52, Android 10上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

     
发表于 2023-2-2 08:58 | 显示全部楼层
oskneo 发表于 2023-2-1 23:24
多少盘都raid6,偶现在8盘有时候速度不到100m,已经想转raid10了

—— 来自 Sony XQ-AT52, Android 10上 ...

你确定没少打个0?
或者你是软raid?
我8盘的时候就有这个速度了, 反而更多盘并不能提高速度, 应该是硬卡上限了
回复

使用道具 举报

     
发表于 2023-2-2 09:25 | 显示全部楼层
去TrueNAS的论坛也许可以得到更有价值的讨论,尤其是资深大佬和官方staff的回复
回复

使用道具 举报

     
发表于 2023-2-2 09:34 来自手机 | 显示全部楼层
本帖最后由 ltycomputer 于 2023-2-2 09:36 编辑

NVMeof嘛,配合有namespace的企业盘挺好用的。

iSCSI也是SCSI,四舍五入SATA/SAS的不足它也有,NVMe这套对于多队列IO的改善非常显着,载体是PCIe还是RDMA还是TCP还是光纤都可以
回复

使用道具 举报

     
发表于 2023-2-2 09:45 | 显示全部楼层
不明觉厉
回复

使用道具 举报

     
 楼主| 发表于 2023-2-2 12:05 | 显示全部楼层
本帖最后由 Processed 于 2023-2-2 12:16 编辑

更新一下

今天在摸鱼的时候,我找到了当时卖给我硬盘的人,把这块硬盘windows下原始的CrystalDiskMark测试图要到了
image_editor_1675310319581.jpg

结果非常无聊,这块盘就是这个水平,4K高线程随机写入能力不行。所以也就不用搞什么SPDK解开限制了

QQ截图20230202121455.png
(intel这鸡贼的,4K只讲读性能不讲写性能,就是知道不太行)

最终结论就是,在linux系统里面,NVMe/TCP协议相比于iSCSI协议能更接近设备底端,我看到的iSCSI性能,是linux优化后的读写性能,而NVMe/TCP性能则基本是这块盘原原本本的性能。而且实际运行的过程中,采用NVMe/TCP挂载的盘在大规模读写的时候的稳定性其实是要明显强于iSCSI盘的,目前来看转NVMe/TCP的时机其实已经成熟了——而且最重要的是,这周终于摸鱼摸完了


回复

使用道具 举报

     
发表于 2023-2-2 12:23 来自手机 | 显示全部楼层
iSER了解一下

—— 来自 vivo NEX S, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-2-2 12:30 | 显示全部楼层
所以只是这块盘本身的4k写性能只有这水平? 不需要处理linux内核的问题?

NVMe/TCP有啥靠谱的参考资料吗 想研究看看
回复

使用道具 举报

     
发表于 2023-2-2 12:36 来自手机 | 显示全部楼层
就4K性能来说,sata ssd是够了的,可惜跑不满万兆网络

—— 来自 Xiaomi M2102K1C, Android 11上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2023-2-2 12:43 | 显示全部楼层
P5316啊,读取密集型QLC,就是这性能,15mm U.2单盘30T还要啥自行车
回复

使用道具 举报

     
 楼主| 发表于 2023-2-2 13:08 | 显示全部楼层
本帖最后由 Processed 于 2023-2-2 13:11 编辑
紧那罗 发表于 2023-2-2 12:30
所以只是这块盘本身的4k写性能只有这水平? 不需要处理linux内核的问题?

NVMe/TCP有啥靠谱的参考资 ...

结果上来看是的,就是这块硬盘的问题。但我昨天之所以得出可能是内核的问题也是有原因的,首先加上这台我针对3台带nvme设备的linux设备跑了测试,4K高线程随机写入速度都是100+M,而且可以很明确地排除CPU性能,内核版本,发行版这三个因素,那么除非我运气不好其余两块盘都是同样性能的,剩下的原因就一定出在linux kernel上——另外我查找SPDK文档的时候,里面也提到linux kernel自带的I/O模式是针对HDD设计的,SPDK为了提高nvme读写性能专门给改成了pooling模式,综合这些信息我才得出了内核限制nvme读写的结论

配置NVMe/TCP的文档我主要参考的是这个:https://www.cnblogs.com/JamesLi/p/11399054.html

这个配置方法是基于kernel的,有个不好的地方就是一旦机器重启所有的配置都会消失,我的解决方案是写了一个开机启动服务,每次开机的时候再自动跑脚本配置一遍就完了。实际使用起来和iSCSI没有差别

如果你想更进一步搞SPDK的NVMe/TCP的话,我最推荐的是看SPDK的文档,当然我也找到一篇比较清晰的教程,里面还稍微提了一点如何配置windows下的连接:https://www.hyper-v.io/nvme-part-3-starwind-nvme-initiator-linux-spdk-nvme-target/

回复

使用道具 举报

     
 楼主| 发表于 2023-2-2 13:16 | 显示全部楼层
本帖最后由 Processed 于 2023-2-2 14:18 编辑
雪影 发表于 2023-2-2 12:36
就4K性能来说,sata ssd是够了的,可惜跑不满万兆网络

—— 来自 Xiaomi M2102K1C, Android 11上的 S1Next ...

我个人的观点是现阶段搞这种网络存储其实能面向2.5G和5G就足够了,万兆属于极少数玩家的需求。毕竟板载10G网卡的主板还很稀缺,最流行的其实是2.5G的网卡,这种场景下一块靠谱的sata ssd已经很不错了

而且我的使用结论是,千兆+iSCSI就能保证不错的游戏体验,绝大部分人到此为止就可以了。我继续折腾的目的主要是想看看在不搞RDMA的情况下纯靠软件能不能进一步的释放性能
回复

使用道具 举报

     
发表于 2023-2-2 13:43 | 显示全部楼层
你要是有25G网卡,甚至还能NVMe over RoCE
回复

使用道具 举报

     
发表于 2023-2-2 13:56 | 显示全部楼层
Processed 发表于 2023-2-2 13:08
结果上来看是的,就是这块硬盘的问题。但我昨天之所以得出可能是内核的问题也是有原因的,首先加上这台我 ...

https://cdrdv2-public.intel.com/ ... ig%20Guide_V1.1.pdf

Intel的这个文档,虽然主要是想卖自家的网卡,但是同时包含了不含有ADQ功能的设置,而且还有通用NVMe/TCP的Linux系统调优(5.1节),可以考虑试一下
回复

使用道具 举报

     
发表于 2023-2-2 14:09 | 显示全部楼层
楼主太折腾了
玩NVMe over FC不如直接NVMe over TCP了,另外现阶段操作系统对NVMe优化的还不是很好,理论上和直接跑iSCSI性能不会有太大差距
回复

使用道具 举报

发表于 2023-2-2 16:46 | 显示全部楼层
blackeyed 发表于 2023-2-2 08:58
你确定没少打个0?
或者你是软raid?
我8盘的时候就有这个速度了, 反而更多盘并不能提高速度, 应该是硬卡上 ...

QQ图片20230202172940.png
这是smb raid6 8x8t的,raid卡是FUJITSU PRAID EP400i,
QQ图片20230202174451.png
芯片是LSI SAS3108的,带宽应该是是12G的
QQ图片20230202172955.png
这是SMB NVME
QQ图片20230202173654.png
这是原生NVME。
看来真要换raid卡?现在推荐啥卡好?
回复

使用道具 举报

     
发表于 2023-2-2 16:51 | 显示全部楼层
oskneo 发表于 2023-2-2 16:46
这是smb raid6 8x8t的,raid卡是FUJITSU PRAID EP400i,

芯片是LSI SAS3108的,带宽应该是是12G的

这卡没问题啊, 我用的还是LSI 6G的卡呢
你这看着不像卡的问题, 8盘读取肯定要上1G了
写入慢我估计你是没有电池, 没有write back没法用raid5和6
回复

使用道具 举报

发表于 2023-2-2 17:15 | 显示全部楼层
blackeyed 发表于 2023-2-2 16:51
这卡没问题啊, 我用的还是LSI 6G的卡呢
你这看着不像卡的问题, 8盘读取肯定要上1G了
写入慢我估计你是没 ...

因为想着如果是缓存的话,我不如直接在win server用primecache,还可以用大量ram和ssd做缓存。
电池直接用ups代替。
不是卡的问题那就是硬盘的问题咯,可以看到偶上面很多型号的硬盘。
这速度是否可理解为速度最低的硬盘x6的速度呢?
不过现在要想单独测速单个硬盘也难。
顺便说说网卡是25g的买螺丝4421,iSER貌似用不了
回复

使用道具 举报

     
发表于 2023-2-2 17:20 | 显示全部楼层
oskneo 发表于 2023-2-2 17:15
因为想着如果是缓存的话,我不如直接在win server用primecache,还可以用大量ram和ssd做缓存。
电池直接用 ...

UPS怎么可能代替卡上的电池…… 卡上没电池卡是不会write back的, 只会write thru, 那速度令人发指
而且电池又不贵, 我的卡的电池反正闲鱼20块……
我三张卡raid5都能有你这个速度
回复

使用道具 举报

发表于 2023-2-2 21:13 来自手机 | 显示全部楼层
看到一个linux用nvme命令和udev规则来关闭write cache的方法:https://askubuntu.com/questions/1309893/how-to-disable-disk-cache-of-nvme-ssd 可能不需要绕过kernel
回复

使用道具 举报

发表于 2023-2-3 10:35 | 显示全部楼层
本帖最后由 oskneo 于 2023-2-3 10:38 编辑

QQ图片20230203113102.png
因为用文件服务器本体开缓存能开大嘛。
这是SMB RAID6下开了缓存的表现。
当然这个读取肯定是假的,读老文件的话,
本来是多少就多少,缓存没什么用。

不过由于偶近期发的另外一帖的问题,就是分区有几t的没用空间不知道哪去了,
现在才发现raid扩展容量无效还有救吗? - PC数码 - Stage1st - stage1/s1 游戏动漫论坛 (saraba1st.com)
近期可能要重新整理这raid,希望能整理到两个16t盘的容量下完成倒腾。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-21 20:36 , Processed in 0.213384 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表