找回密码
 加入我们
搜索
      
楼主: hawie

[存储] 联芸MAP1602主控的可以入了,掉坑里刚爬出来,P7000Z晚班车拿了四块,附内核

  [复制链接]
发表于 2023-7-13 22:50 | 显示全部楼层
NexusHE 发表于 2023-7-13 16:22
感谢提供思路,我的硬盘是梵想S790 4TB,主控也是MAP1602,同样报 kernel: nvme nvme0: Device not ready ...

可惜我已经退货了。
现在再买要 1278 ,比 618 足足贵了 179 元。
发表于 2023-7-13 23:10 | 显示全部楼层
NexusHE 发表于 2023-7-13 20:52
我是作为主盘用的,完全靠运气进入...差不多启动七八次有一次能进去,然后换内核解决 ...

同求,换的什么内核?
发表于 2023-7-13 23:29 | 显示全部楼层
marswjf 发表于 2023-7-13 21:26
请教下  换的哪个内核呢?什么版本   求链接

我是用的arch系统,然后朋友帮我编译的6.4的内核,只是硬盘问题故障表现及原因和这个帖子里出现的一样,您要是pve系统的话,可以参考楼主1楼的帖子,他给编译好了pve的内核,如果需要arch的内核,我再发出来
发表于 2023-7-14 02:58 | 显示全部楼层
通过pcie转接后 也会报磁盘错误。
发表于 2023-7-14 09:06 | 显示全部楼层
NexusHE 发表于 2023-7-13 16:22
感谢提供思路,我的硬盘是梵想S790 4TB,主控也是MAP1602,同样报 kernel: nvme nvme0: Device not ready ...

意思是只调整楼主的pci.c文件,你这个timeout不改是吗?
发表于 2023-7-14 11:05 来自手机 | 显示全部楼层
确实没问题了,没再出现找不到盘的情况
发表于 2023-7-15 10:00 | 显示全部楼层
wangmice 发表于 2023-7-14 09:06
意思是只调整楼主的pci.c文件,你这个timeout不改是吗?

是的,我一开始的修改是为了看哪里存在问题,改pci.c更符合规范
发表于 2023-7-29 18:04 | 显示全部楼层
hawie 发表于 2023-7-13 18:08
属性调整为:"NVME_QUIRK_DELAY_BEFORE_CHK_RDY | NVME_QUIRK_BOGUS_NID",放在1楼,有4TB盘可试试。 ...

我最近又买了个 Lexar NM790,也是 MAP1602 的 4T 盘。我实测发现,只加这个属性并不足以让它认盘,必须把 114 楼的那个 timeout 也加上它才认。

与此同时楼上好多买 P7000Z 的人都说只加这个就够了。

也就是说,同样 MAP1602 ,不同的 OEM 出品的盘还不完全一样。

评分

参与人数 1邪恶指数 +5 收起 理由
hawie + 5 支持一下

查看全部评分

发表于 2023-8-1 13:21 | 显示全部楼层
又发现一个现象:
- 我的 Lexar NM790 4T,在 archlinux 下,如果使用源里的 lts-6.1.39 内核,则不用打任何 patch,直接就能认盘。(反复重启了 5 次,每次都认)
- lts-6.1.39 的代码里,并没有加 NVME_QUIRK_DELAY_BEFORE_CHK_RDY 这个参数。

我是看到 lkml 上面有邮件提到这事,最新的一个回复里有人说,用最新的 manjaro 内核可以认盘。manjaro 默认 lts 内核,然后我就在我的 arch 上下载了 manjaro 的 linux61(6.1.42)内核,安装上去之后,它果然认盘了。
一开始我还以为是 manjaro 那边打了什么 patch,然后我就想,如果是这样的话,那么 manjaro 的 6.4 内核应该也能认吧,于是我又下载了 manjaro 的 linux64(6.4.7)内核,结果安装上去之后,它不认盘,症状和我用 arch 自己的内核完全一样,不是 100% 不认,但大概率不认。
此时我就怀疑,会不会是 lts 内核能认盘,而更新的内核不认,于是我装上 arch 源里的 lts-6.1.39 内核,结果它也能认盘。

因此,我猜,最新的内核是否认盘,应该和是否加 NVME_QUIRK_DELAY_BEFORE_CHK_RDY 这个参数关系不大。因为我看到在 drivers/nvme/host/core.c 这个文件里,NVME_QUIRK_DELAY_BEFORE_CHK_RDY 这个参数只在 nvme_disable_ctrl 这个函数里有引用,nvme_enable_ctrl 这个函数里没引用。但是当内核不认盘的时候,它的报错 Device not ready; aborting initialisation 是由 nvme_enable_ctrl 这个函数发起的。
发表于 2023-8-1 21:19 | 显示全部楼层
由于我并不懂 linux 内核的开发及调试,我采取了最简单粗暴的方式来大概定位一下问题:

我在 nvme_wait_ready 函数里加上几个日志输出项:
Screenshot_20230801_210545.png
然后分别编译 6.4.7 内核和 6.1.39 内核,其中 6.1.39 内核能正常认盘,6.4.7 内核概率性认盘。

6.1.39 内核的日志输出如下:
我的另一块盘是 PM9A1,日志显示,系统启动时,nvme_wait_ready 这个函数会调用两次,两次均成功之后硬盘正常识别:
Screenshot_20230801_210707.png
从日志里可以看出,对于 PM9A1,两次初始化时的超时值均为 6150。

对于 MAP1602 的 4T 盘的两次初始化时的超时值则分别为 38400 和 150,差异非常大:
Screenshot_20230801_210932.png
不过,虽然 150 的超时值很小,但实际盘的初始化也很快,150 也是够用的。


6.4.7 内核的日志输出如下:
PM9A1 的两次初始化时的超时值仍然一样,均为 6000:
Screenshot_20230801_211150.png

此时 MAP1602 的 4T 盘出现问题了,两次初始化时的超时值分别为 38400 和 0,超时值为 0 了,自然非常容易触发:
Screenshot_20230801_211333.png
但是,由于盘的初始化也很快,因此即使是 0 的超时值,盘也是有概率初始化成功的,因此就会表现为概率性认盘:
Screenshot_20230801_211748.png

所以现在问题应该比较明确了,相比起 6.1.39 内核,6.4.7 的内核中,nvme_wait_ready 得到的超时值低了 150(除了 38400 的那个),低这 150 导致 MAP1602 的 4T 盘的其中一项超时值变为 0 了,于是盘就不认了。

接下来要做的就是,判断这个超时值是怎么来的,为啥会变成 0,是盘的原因还是内核的原因。
发表于 2023-8-1 23:22 | 显示全部楼层
我又去 nvme_enable_ctrl 函数里打了些日志,整个函数里就这三个地方涉及到了 timeout 值:
Screenshot_20230801_231308.png

对于 MAP1602 的 4T 盘,日志输出如下:
Screenshot_20230801_231440.png

这个盘是第二个 timeout 值生效,并且它的 NVME_REG_CRTO 属性值是 0,随后根据这个属性值计算得到的 timeout 值也是 0。timeout 值的计算逻辑在 6.1.39 和 6.4.7 内核中是完全一致的。

那么,为什么 6.1.39 内核最终能产生 150 的 timeout,而 6.4.7 则不能,是因为:
- 6.1.39 内核中 nvme_enable_ctrl 把计算到的 timeout 值直接传给了 nvme_wait_ready 函数,然后由后者计算 timeout_jiffies = ((timeout + 1) * HZ / 2) + jiffies,因此即使传了个 0 过去,也能计算也 150。
- 6.4.7 内核中 nvme_enable_ctrl 把计算到的 (timeout + 1) / 2 值传给 nvme_wait_ready 函数,然后后者直接计算 timeout_jiffies = jiffies + timeout * HZ,由于传的 timeout 参数是 u32 类型,所以 (0+1)/2 会得到 0。


我的分析到此为止,至于这个 NVME_REG_CRTO 属性是哪来的(硬盘固件还是别的),为什么是 0,是 0 是否正常,已经超出我的 debug 水平了。
 楼主| 发表于 2023-8-2 12:41 | 显示全部楼层
huyz 发表于 2023-7-29 18:04
我最近又买了个 Lexar NM790,也是 MAP1602 的 4T 盘。我实测发现,只加这个属性并不足以让它认盘,必须 ...

不同内核,是会有差异,可能需要根据自己的使用场景适配。

以PVE为例,发现PVE 8.0又出了最新内核,官方已经针对这个问题加了补丁,但是修改位置不一样。它修改的是所有主控这个重复ID问题的默认处理。是否对这个主控有效,没仔细看,还没实际去验证。

历史上,PVE7的默认版本,是支持重复ID问题的默认处理的,也就是它可以支持多块这个nvme盘,但后来内核升级,这个处理又搞没了,导致后来的内核版本,必须自己打补丁才能认多个盘。

折腾无止境,能用起来就好了。至于做成尽善尽美,咱们还是留给厂家吧。
发表于 2023-8-3 09:10 | 显示全部楼层
感谢楼主,我用了楼主给出的内核补丁,爱国者p7000z 4t现在终于可以在 pve 8下被识别了(作为从盘,系统盘还是得用其他硬盘)

但遇到另外一个问题,我想把这个ssd直通给到某个虚拟机,启动时报错,目前卡在这里。
 楼主| 发表于 2023-8-3 10:10 | 显示全部楼层
happysun110 发表于 2023-8-3 09:10
感谢楼主,我用了楼主给出的内核补丁,爱国者p7000z 4t现在终于可以在 pve 8下被识别了(作为从盘,系统盘 ...

ssd直通之后,是由直通的虚拟机驱动这个盘,虚拟机也要支持这个盘才行。
如果虚拟机支持不了,可以改为RDM方式直通,RDM方式是由pve驱动这个盘,再整盘映射给虚拟机,映射时接口协议可选sata、scsi之类。
发表于 2023-8-3 10:19 | 显示全部楼层
只要国产进来了,他就别想涨价,大到汽车,小到一个晶体管,我们人口体量太大了,劳动力又便宜.,只要正向利润,在便宜也能赚很多.
 楼主| 发表于 2023-8-3 10:36 | 显示全部楼层
hawie 发表于 2023-8-2 12:41
不同内核,是会有差异,可能需要根据自己的使用场景适配。

以PVE为例,发现PVE 8.0又出了最新内核,官方 ...

pve8的当前最新官方内核版本, pve-kernel-6.2.16-5-pve/stable,now 6.2.16-6 amd64,今验证已解决P7000Z 2TB重复ID问题。有没有解决4TB版本待大家验证。直接使用以下命令即可安装:
  1. apt update && apt dist-upgrade -y
复制代码


所以,本帖不提供后续的自编译内核了。pve8的源码库目前提供了6.2.16-7的版本,有需要的可以自行编译。
发表于 2023-8-3 11:56 | 显示全部楼层
hawie 发表于 2023-8-3 10:10
ssd直通之后,是由直通的虚拟机驱动这个盘,虚拟机也要支持这个盘才行。
如果虚拟机支持不了,可以改为RD ...

现在是虚拟机启动时就报错,或者说虚拟机都没有启动起来,bios界面都没出来,就报错退出了。

看来只能rdm,但这个性能要打折扣吧?
 楼主| 发表于 2023-8-3 16:38 | 显示全部楼层
happysun110 发表于 2023-8-3 11:56
现在是虚拟机启动时就报错,或者说虚拟机都没有启动起来,bios界面都没出来,就报错退出了。

看来只能rd ...

RDM的I/O延迟相差比较大,与物理直通相比,大约相差十倍。前者R/W,1.x ms / 1x ms;后者,0.1x ms / 1.x ms。
发表于 2023-8-5 07:29 | 显示全部楼层
hawie 发表于 2023-8-3 16:38
RDM的I/O延迟相差比较大,与物理直通相比,大约相差十倍。前者R/W,1.x ms / 1x ms;后者,0.1x ms / 1.x ...

谢谢指点!

折腾了一下,终于可以直通p7000z到虚拟机了,也可以直通 hp544+ 这块40g(实际跑56g)网卡进入,但是如果两个卡同时直通,则会报错说 IRQ 冲突。试了很多次了,都只能直通一个设备。

我在犹豫是直通网卡进入,还是直通ssd进去。网卡直通和走 vmbr 方式,性能会降低一大半,大概只有40%的性能(56g eth模式,直通能跑48G,vmbr只能跑20G)。
 楼主| 发表于 2023-8-5 09:51 | 显示全部楼层
happysun110 发表于 2023-8-5 07:29
谢谢指点!

折腾了一下,终于可以直通p7000z到虚拟机了,也可以直通 hp544+ 这块40g(实际跑56g)网卡进 ...

有的BIOS可以配置PCI槽位, 或许能指定不同的IRQ。

544+用起来怎么样?用的哪种模块/线跑56g?
发表于 2023-8-6 07:59 | 显示全部楼层
hawie 发表于 2023-8-5 09:51
有的BIOS可以配置PCI槽位, 或许能指定不同的IRQ。

544+用起来怎么样?用的哪种模块/线跑56g? ...

咸鱼一堆呀,最好买Mellanox原装线呀,官方有列表的。

评分

参与人数 1邪恶指数 +10 收起 理由
hawie + 10 谢谢!

查看全部评分

发表于 2023-8-6 20:24 | 显示全部楼层
早班车8块再用
发表于 2023-8-28 09:39 | 显示全部楼层
经测试,1、PVE8.0 6.2.16-7,P7000z 4T版本还是存在冲突兼容性,随机识别0-3条。2、unraid6.12.3倒是正常,妥妥的。3,某网N100这个机型,不论开不开turbo,开不开PL1、PL2。都必须要上个风扇或者有空调风能吹到,否则几个小时内必定死机!虽然手摸着没到烫的程度,但的的确确死机了。
 楼主| 发表于 2023-8-28 12:13 | 显示全部楼层
本帖最后由 hawie 于 2023-8-28 12:15 编辑
7155071 发表于 2023-8-28 09:39
经测试,1、PVE8.0 6.2.16-7,P7000z 4T版本还是存在冲突兼容性,随机识别0-3条。2、unraid6.12.3倒是正常 ...


当时只向pve反馈了重复id的问题,可能官方没有追加针对4T版本需要的延迟参数。这样默认内核对2T管用,而对4T仍需自行编译。
N100除了散热,主要是其他原因导致随机死机,已反馈厂家正在修改。
发表于 2023-9-3 10:31 | 显示全部楼层
本帖最后由 shiift 于 2023-9-5 00:27 编辑

刚买的 惠普 FX900Plus 4TB 固态,想着主盘装 PVE 呢,开机提示:nvme0:Device not ready: aborting initialisation, CSTS=0x0,打了1楼最新的6.2.16-4修改的4TB未验证测试版,不掉盘了,做PVE系统盘可以随便重启了。
发表于 2023-9-3 15:58 | 显示全部楼层
shiift 发表于 2023-9-3 10:31
刚买的 惠普 FX900Plus 4TB 固态,想着主盘装 PVE 呢,开机提示:nvme0:Device not ready: aborting init ...

安装楼主给的补丁试试,我的爱国者p7000z 4t用了补丁就而可以正常识别和使用了。
发表于 2023-9-3 20:44 | 显示全部楼层
happysun110 发表于 2023-9-3 15:58
安装楼主给的补丁试试,我的爱国者p7000z 4t用了补丁就而可以正常识别和使用了。 ...

系统安装时,可以识别,重启就不行了,有什么办法 安装时打补丁吗?,你们是怎么打补丁的?
发表于 2023-9-4 20:34 | 显示全部楼层
本帖最后由 shiift 于 2023-9-4 22:57 编辑

雷克沙.png

雷克沙 ARES 4TB , 江波龙封装 联芸 MAP1602 主控,打了补丁,还是重启掉盘,重启 4~5次运气好就进,基本都是 重启 7次朝上,有概率进入一次系统,楼主还有什么办法嘛。这个盘是不是没救了,大家注意避坑
 楼主| 发表于 2023-9-7 14:31 | 显示全部楼层
shiift 发表于 2023-9-4 20:34
雷克沙 ARES 4TB , 江波龙封装 联芸 MAP1602 主控,打了补丁,还是重启掉盘,重启 4~5次运气好就进,基本 ...

同样的主控,不应该。有没有可能,并没有打上补丁。
发表于 2023-9-7 18:29 | 显示全部楼层
hawie 发表于 2023-9-7 14:31
同样的主控,不应该。有没有可能,并没有打上补丁。

打上了, 我是装的 PVE_8.0-2,安装后内核版本是6.2.16-3,升级你提供的6.2.16-4后,开机就是6.2.16-4,也可以在高级选项,手动选择6.2.16-4或6.2.16-3,重启就是会无法引导。我比较菜,不会收集错误日志啥的,就只能留言说下情况了。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-11-15 16:01 , Processed in 0.015121 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

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