V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
mrsupns
V2EX  ›  Linux

nfs 服务器海量小文件传输效率慢的问题

  •  
  •   mrsupns · 6 天前 · 1518 次点击

    现在有一台 nfs 服务器,挂载到一台业务服务器,有海量的小文件需要拷贝到 nfs 服务器上,经过测试发现:单个大文件传输速度很快,但是海量的小文件传输就很慢了。添加挂载参数 rsize=8192,wsize=8192,发现效率还是很慢;这个问题如何优化?

    24 条回复    2021-01-15 14:41:29 +08:00
    Osk
        1
    Osk   6 天前 via Android
    小文件估计无解,nfs smb 9p 等似乎都快不起来
    matrix67
        2
    matrix67   6 天前
    小文件,tcp 的慢启动,再加上创建文件啥的都需要网路 io 。

    tar 打包压缩,传了再解压。
    reus
        3
    reus   6 天前
    开多线程并发传
    mrsupns
        4
    mrsupns   6 天前
    @matrix67 不能 tar
    Jirajine
        5
    Jirajine   6 天前 via Android   ❤️ 3
    tar 打包,输出到 stdout,走管道。
    另一端 tar 从 stdin 解包,释放到文件系统。
    中间可以通过 ssh 、netcat 等方式连接。
    d0m2o08
        6
    d0m2o08   6 天前
    换对象存储🤣
    Songxwn
        7
    Songxwn   6 天前
    全闪存
    MasterMonkey
        8
    MasterMonkey   6 天前 via iPhone
    @Jirajine 赞同
    nightwitch
        9
    nightwitch   6 天前
    tar 呗,不能 tar 总得有个原因吧。
    GGGG430
        10
    GGGG430   6 天前 via iPhone
    @Jirajine 老哥详细说说怎么实现呢
    CallMeReznov
        11
    CallMeReznov   6 天前
    对象存储
    zent00
        12
    zent00   6 天前 via iPhone
    tar cvf - src_path | tar xvf - -C nfs_path
    zent00
        13
    zent00   6 天前   ❤️ 1
    抱歉,刚才路上手机匆忙回复,没有细想,上一条给出的方法还是走 NFS 进行写入操作,没有意义。

    如果你走 SSH 的话,这样操作:
    tar cvf - src_path | ssh [email protected]_host "tar xvf - -C dst_path"
    mrsupns
        14
    mrsupns   6 天前
    @zent00 我们这边是要通过 nfs 共享文件,有没有啥参数可以优化一下的?
    dorothyREN
        15
    dorothyREN   5 天前
    基本上 无解
    willis
        16
    willis   5 天前
    如果只是一次性传输,用 rsync 传吧,支持断点续传
    zk8802
        17
    zk8802   5 天前
    有两个点可以注意一下:

    - 存储服务器不要用 ZFS 。NFS on ZFS 存储小文件时很慢。
    - 用 nfsstat 和 nfsiostat 看看有没有性能上的问题。有时候瓶颈是网络 IO,有时候瓶颈是存储服务器的性能。
    - 试试 pNFS 。

    但是归根结底,在 NFS 上存储小文件性能低的根源是 NFS 的设计本身。如果 NFS RPC 可以全部并行的话,存储小文件的性能会提高很多。
    mrsupns
        18
    mrsupns   5 天前
    不只是传输的问题,我们程序有依赖,需要 find 某目录下的文件并循环文件名,然后做处理。因为是在 nfs 服务器上,所以循环的时候特别慢
    zlowly
        19
    zlowly   5 天前
    如果你的 nfs 可以用 v3 协议的话可以打开 async,不过看你 size 只设到 8k,是不是只能用 v2 协议?
    另外对本身存放海量文件的服务器还可以调整一下文件系统参数例如 ext4 里设置 noatime 等。
    mrsupns
        20
    mrsupns   5 天前
    @zlowly 如果是 v3 的应该要给多少 K
    felixcode
        21
    felixcode   5 天前
    zlowly
        22
    zlowly   5 天前
    @mrsupns 对于 v3 和 v4 一般缺省就是 32k,网络稳定且 tcp 传输的话你可以测试下调高到 64k 。
    snip
        23
    snip   4 天前
    用 rsync 试试呢?
    mrsupns
        24
    mrsupns   3 天前
    @snip 不行呢
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   5088 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 06:33 · PVG 14:33 · LAX 22:33 · JFK 01:33
    ♥ Do have faith in what you're doing.