AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 691466
Accepted
iMil
iMil
Asked: 2022-02-21 09:17:45 +0800 CST2022-02-21 09:17:45 +0800 CST 2022-02-21 09:17:45 +0800 CST

CentOS 7 上的 NFS/RDMA,小文件损坏

  • 772

在 HPC 环境中,我们有 2 个节点系列,一个运行 7.1.1503(内核3.10.0-229.el7.x86_64),另一个运行较新的 7.7.1908(内核3.10.0-1062.12.1.el7.x86_64)。两者都使用以下供应商 (Mellanox) 记录的标志安装NFS/RDMA服务器:

10.0.0.1:/pool0/home on /mnt/rdma type nfs (rw,relatime,sync,vers=3,rsize=262144,wsize=262144,namlen=255,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,nocto,noac,proto=rdma,port=20049,timeo=600,retrans=2,sec=sys,mountaddr=10.0.0.1,mountvers=3,mountproto=tcp,local_lock=none,addr=10.0.0.1)

在 7.1 节点上,我可以执行以下操作:

7.1$ dd if=/dev/zero of=/mnt/rdma/test bs=1 count=701

在 7.7 节点上,我将收到完全预期的文件

7.2$ hexdump /mnt/rdma/test
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
00002b0 0000 0000 0000 0000 0000 0000 0000     
00002bd

现在,如果我用700 字节或更少的字节进行相同的测试,则文件已损坏:

7.1$ dd if=/dev/zero of=/mnt/rdma/test bs=1 count=700
7.2$ hexdump /mnt/rdma/test | head -10
0000000 9dfe a757 0000 0100 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0100
0000020 0000 0100 0000 a401 0000 0100 0000 0000
0000030 0000 0000 0000 0000 0000 bc02 0000 0000
0000040 0000 0002 0000 0000 0000 0000 168c 0083
0000050 4a0f c612 0000 0000 b000 5a5b 1262 1e75
0000060 9d04 bc90 1262 1a75 c233 50e9 1262 1a75
0000070 c233 50e9 0000 bc02 0000 0100 0000 bc02
0000080 0000 0000 000a 5b5a 00b0 0000 0f9d 030c
0000090 0000 2d00 0000 0000 0000 0000 0000 0000

使用 NFS over TCP 而不是 RDMA 尝试相同的命令时,文件不会损坏。

我们已经尝试了很多很多的mount选项,调优rsize等等wsize,并且已经没有想法了,很高兴有一些新的......
是的,升级到更新的内核显然已经摆在桌面上,但我还不确定这在短时间内是可行的。
请注意,旧节点不适用于 7.7,而较新的节点不适用于 7.1。

更新

就像建议的那样,我已经升级到最新的 CentOS 7 版本,而且,这个错误仍然存​​在。

node1# dd if=/dev/zero of=/mnt/rdma/1160 bs=1 count=700
node2# uname -mr
3.10.0-1160.53.1.el7.x86_64 x86_64
node2# lsb_release -d
Description:    CentOS Linux release 7.9.2009 (Core)
node2# hexdump /mnt/rdma/1160|head -5
0000000 376b 1728 0000 0100 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0100
0000020 0000 0100 0000 a401 0000 0100 0000 0000
0000030 0000 0000 0000 0000 0000 bc02 0000 0000
0000040 0000 0002 0000 0000 0000 0000 168c 0083

更新 2

我刚刚在同一个节点上做了一个测试,最近的一个,升级到CentOS 7.9,在同一个节点读写时实际上失败了。
此外,使用 调整/proc/sys/sunrpc/rdma_memreg_strategy会产生非常奇怪的结果,例如rdma_memreg_strategy == 6噪声看起来像这样:

0000120 8898 123d 4506 c0f8 b0d6 3940 44b9 c0f8
0000130 bc92 ba64 4491 c0f8 165c 0ae4 448e c0f8
0000140 c82e 19e7 44a9 c0f8 2ddc 11f2 44dc c0f8
0000150 ad84 79aa 4520 c0f8 b4af 68ca 4571 c0f8
0000160 b752 b3ef 45cb c0f8 b04a 97b8 462d c0f8
0000170 7543 d694 4695 c0f8 d5dd 2cdc 4702 c0f8
0000180 a9bb f717 476e c0f8 4a78 13d9 47d7 c0f8
0000190 2a26 a9e4 4834 c0f8 71c8 3d91 4882 c0f8
00001a0 fcae 8d55 48bb c0f8 2b04 bcf8 48dd c0f8
00001b0 b04c a4be 48e8 c0f8 79d3 db6c 48dc c0f8
00001c0 9f84 c912 48bb c0f8 096c b285 4886 c0f8
00001d0 f0ff ee8e 483e c0f8 d171 e773 47e4 c0f8
00001e0 8e7b f3d1 4779 c0f8 4bbd d26f 46ff c0f8

更新 3

我安装了 Mellanox 的官方驱动程序。现在损坏发生在文件 < 640 字节...

更新 4

嗯,实际上比我想象的还要糟糕。这些文件不仅仅是“损坏”,它们是实际的内存泄漏:

# cat 20220222-1
0000000: b449 1fc1 0000 0001 0000 0000 0000 0000  .I..............
0000010: 0000 0000 0000 0000 0000 0000 0000 0001  ................
0000020: 0000 0001 0000 01a4 0000 0001 0000 0000  ................
0000030: 0000 0000 0000 0000 0000 0258 0000 0000  ...........X....
0000040: 0000 0200 0000 0000 0000 0000 8c16 8300  ................
0000050: 0f4a 12c6 0000 0000 00b0 5fd3 6214 a09b  .J........_.b...
0000060: 0c5f 0ffa 6214 a088 0f67 27e3 6214 a088  ._..b....g'.b...
0000070: 0f67 27e3 0000 0258 0000 0001 0000 0258  .g'....X.......X
0000080: 0000 5c9a 0000 0000 0000 0000 0000 0020  ..\............ 
0000090: 0100 0601 c612 4a0f 0083 168c 0000 0000  ......J.........
00000a0: 0000 0000 0a00 fd56 b000 0000 6d9c 0903  .......V....m...
00000b0: 0000 0000 3d33 8000 0000 011a 0000 0002  ....=3..........
00000c0: 0000 011a 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d  ....------------
00000d0: 0a0a 0a0a 0a2d 2d2d 2d2d 2d2d 2d2d 2d2d  .....-----------
00000e0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d  ----------------
00000f0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2049  -------------- I
0000100: 7465 7261 7469 6f6e 2038 3438 3928 2020  teration 8489(  
0000110: 2035 2920 202d 2d2d 2d2d 2d2d 2d2d 2d2d   5)  -----------
0000120: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d  ----------------
0000130: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 0a0a 0a20  ------------... 
0000140: 2020 2050 4f54 4c4f 4b3a 2020 6370 7520     POTLOK:  cpu 
0000150: 7469 6d65 2020 2020 302e 3033 3532 3a20  time    0.0352: 
0000160: 7265 616c 2074 696d 6520 2020 2030 2e30  real time    0.0
0000170: 3334 390a 2020 2020 5345 5444 494a 3a20  349.    SETDIJ: 
0000180: 2063 7075 2074 696d 6520 2020 2030 2e30   cpu time    0.0
0000190: 3332 383a 2072 6561 6c20 7469 6d65 2020  328: real time  
00001a0: 2020 302e 3033 3239 0a20 2020 2045 4444    0.0329.    EDD
00001b0: 4941 473a 2020 6370 7520 7469 6d65 2020  IAG:  cpu time  
00001c0: 2020 332e 3139 3638 3a20 7265 616c 2074    3.1968: real t
00001d0: 696d 6520 2020 2033 2e31 3938 310a 0000  ime    3.1981...
00001e0: 3131 3238 2020 2020 0a48 4352 2020 2020  1128    .HCR    
00001f0: 2020 2020 2020 2020 2038 320a 2020 2020           82.    
0000200: 2031 322e 3934 3834 3732 3233 2020 2020   12.94847223    
0000210: 2020 2020 2d34 2e31 3938 3830 3635 3138      -4.198806518
0000220: 2020 2020 2020 2020 302e 3933 3536 3336          0.935636
0000230: 3039 3935 2020 2020 0a20 2020 3133 2e33  0995    .   13.3
0000240: 3837 3634 3434 3334 3120 2020 2020 2020  876444341       
0000250: 322e 3732 3939 3339                      2.729939
centos nfs
  • 2 2 个回答
  • 395 Views

2 个回答

  • Voted
  1. Best Answer
    iMil
    2022-02-28T02:27:37+08:002022-02-28T02:27:37+08:00

    因此,经过一周的寻找漏洞后,我提出了一个非常简单的补丁。
    内核模块中肯定存在一个错误rpcrdma,当数据小于或等于某个大小时,它不会将其分成块并内联处理。此处理有一个我找不到的错误,但一个简单的修复是将所有文件作为块处理,只需始终0从rpcrdma_results_inline()函数返回。我已经联系了驱动程序的作者,并在RedHat 的 Bugzilla上打开了一个安全漏洞。

    • 1
  2. Tru Huynh
    2022-02-21T23:52:00+08:002022-02-21T23:52:00+08:00

    运行 CentOS-7.9,我无法重现您的问题。

    [tru@gpulab00 ~]$ uname -r
    3.10.0-1160.45.1.el7.x86_64
    [tru@gpulab00 ~]$ mount|grep tru
    10.0.1.2:/master/home/tru on /master/home/tru type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=rdma,port=20049,timeo=600,retrans=2,sec=sys,local_lock=none,addr=10.0.1.2)
    [tru@gpulab00 ~]$ dd if=/dev/zero of=test bs=1 count=700
    700+0 records in
    700+0 records out
    700 bytes (700 B) copied, 0.00286438 s, 244 kB/s
    [tru@gpulab00 ~]$ hexdump test
    0000000 0000 0000 0000 0000 0000 0000 0000 0000
    *
    00002b0 0000 0000 0000 0000 0000 0000          
    00002bc
    

    在另一个客户端上读取相同的文件:

    [tru@gpulab03 ~]$ uname -r
    3.10.0-1160.45.1.el7.x86_64
    [tru@gpulab03 ~]$  hexdump test
    0000000 0000 0000 0000 0000 0000 0000 0000 0000
    *
    00002b0 0000 0000 0000 0000 0000 0000          
    00002bc
    [tru@gpulab03 ~]$ 
    
    • 0

相关问题

  • systemctl 命令在 RHEL 6 中不起作用

  • 为什么我的交换机没有从指定的池中获取地址

  • 在 CentOS7 GNOME 的 Applications-menu 选项卡中创建自定义菜单

  • 无法在 Alpine Linux LXC 上启动 NFS 服务器

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve