半路出家的 IT 请教一下服务器读取性能该怎么优化 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovejunjie1
V2EX    服务器

半路出家的 IT 请教一下服务器读取性能该怎么优化

  •  
  •   lovejunjie1 2021-12-03 12:11:49 +08:00 2840 次点击
    这是一个创建于 1406 天前的主题,其中的信息可能已经有所发展或是发生改变。
    佬们好,我是一个影视行业的从业工作者。喜欢在家饬一些 linux 的东西。
    最近公司有钱买了一台华为 2288H ,64G 内存,10 核 CPU ,一张 SR430 阵列卡。装了 unbuntu 18.04
    我因为是最熟悉这方面的人,就被临危受命拉过去调试阵列储存什么的事情。

    公司内部是万兆网的架构
    网络拓扑图大概是这个样子

    光猫
    |
    华硕 AX86U
    |
    1.一台 24 口千兆 RJ45 ,2SFP+交换机 - 用多模光模块多模线连接到服务器 SFP+1 号光口
    2.一台 8 口万兆 RJ45 交换机 - 用 cat7 ,转接成光口连接服务器 SFP+ 2 号光口

    硬盘选用的是 16TB 的西数黑盘,做了一个 R0 缓存盘给剪辑用。

    客户端是 windows10 ,网卡是 TL-NT521 单口万兆 RJ45 ,M2 硬盘

    经过实测,客户端向 M2 传输数据可以跑满 600MB/s 的速度。
    但是从 R0 的机械盘读取数据的时候只有 160MB/s 的速度。

    我一度以为这是机械盘在 R0 的时候,随机读取性能过差造成的。

    但是似乎也太慢了。

    所以特地来这里请教一下各位大神,这个情况正常么?
    如果可能的话,这个体系还有没有可能优化?
    R0 的阵列是缓存盘。里面的数据都无所谓。所以把这个 R0 格掉也是可以的。
    我的目标速度是大文件 400MB/s 的读取速度。希望能给同事在服务器上 4K 剪辑的可能性。

    再次感谢能进来看帖子的你,十分感谢
    22 条回复    2022-03-25 00:04:16 +08:00
    dapang1221
        1
    dapang1221  
       2021-12-03 12:22:26 +08:00
    16T 单盘做的 raid0 吗,这还不如不做
    dapang1221
        2
    dapang1221  
       2021-12-03 12:24:05 +08:00
    raid0 是多块盘来分摊读写速度,建议改直通模式试试速度
    ccde8259
        3
    ccde8259  
       2021-12-03 12:33:02 +08:00 via iPhone   1
    先 dd 确认一下速率
    有可能是网络协议开销
    整存储前考虑过其他方案吗?
    硬阵列方案优缺点?
    阵列级别带来的容灾能力差异?
    软阵列方案优缺点?
    阵列校验开销能不能 cover ?
    ZFS/GlusterFS/Ceph 方案优缺点?
    发生阵列降级以后怎么处理?
    磁盘真的是越大越好吗?
    lovejunjie1
        4
    lovejunjie1  
    OP
       2021-12-03 12:36:22 +08:00
    @dapang1221 是双盘做的 R0 。单盘写上限只有 300MB/S 。目前这个速度可以满足我们向服务器的这个 R0 缓存盘同步写入数据用了。直通模式的事情我咨询一下华为售后看看如何操作。
    lovejunjie1
        5
    lovejunjie1  
    OP
       2021-12-03 12:47:03 +08:00
    @ccde8259 感谢回复
    1.网络协议的开销方向我尝试做一下调查,感谢指导方向
    2.考虑过 SSD 直通,因为费用开销的问题可能要延后才能实施了。并且因为钱的问题,没能上支持 SSD 阵列的卡。
    3.硬阵列可以节省一些服务器性能的开销。因为服务器上我还跑着几个虚拟机。这是我选择硬阵列的理由之一。
    4.这组 R0 阵列的内容是缓存内容。我会监控硬盘健康状态。在发生无法挽回的事情之前会转移数据。即使因为突发情况数据丢失,也可以通过另一组 R1 恢复数据。或者重新生产数据。耽误两三天的时间,是我们可以容忍的。
    5.软阵列因为没有接触过。所以对他的了解并不充分。
    6.感谢提供了几个方案的研究方向,我会一一搜索的。
    7.我这边数据有 4 个备份。工作盘>成果盘>冷备份>个人硬盘备份。充分考虑了容灾措施。
    8.是的。影视行业是重数据,一个文件 1G 还是很常见的。10 分钟的解算缓存,按照每 0.5 帧一个缓存文件的共极端情况计算。需要 28,800 帧,每帧平均 800MB ,需要约 20T 左右容量。
    lovejunjie1
        6
    lovejunjie1  
    OP
       2021-12-03 12:54:44 +08:00
    @ccde8259 测试了一下读取速度,512MB 。这个速度很理想
    root@nas:~$ sudo time dd if=/dev/sdb of=/dev/null bs=4k
    ^C 记录了 2213858+0 的读入
    记录了 2213857+0 的写出
    9067958272 bytes (9.1 GB, 8.4 GiB) copied, 17.7102 s, 512 MB/s
    Command terminated by signal 2
    0.42user 5.75system 0:17.71elapsed 34%CPU (0avgtext+0avgdata 2452maxresident)k
    17711520inputs+0outputs (1major+88minor)pagefaults 0swaps
    ccde8259
        7
    ccde8259  
       2021-12-03 13:01:08 +08:00 via iPhone
    @lovejunjie1
    大致就是不考虑容灾,只考虑性能对吧。
    双 16T 和 4 块 8T 甚至 8 块 4T 构筑 R0 阵列,对于吞吐量问题上会带来什么差异?
    读写场景是读多还是写多?
    读写场景是顺序读写还是随机读写多?
    不妨看下硬阵列卡是否有缓存?是否有缓存配置优化空间?
    软硬阵列在缓存层面的差异能带来什么样不同的优劣势?
    choury
        8
    choury  
       2021-12-03 13:03:02 +08:00 via Android
    @lovejunjie1 加 iflag=direct 重测
    ccde8259
        9
    ccde8259  
       2021-12-03 13:06:22 +08:00 via iPhone
    @lovejunjie1
    那现阶段问题基本就是网络协议开销问题,至少本地 dd 性能没出问题。
    一方面 iperf3 打一下带宽,是否需要修改 MTU ?
    一方面猜你用的 SMB 协议,是否有其他协议可以使用? NFS FTP WebDAV ?
    lovejunjie1
        10
    lovejunjie1  
    OP
       2021-12-03 13:16:02 +08:00
    @ccde8259 感谢,不愧是神佬。经验丰富。我也是疏忽了忘记告知是 SMB 协议。
    我尝试一下 iperf3 。等会吃完午餐把数据发上来。
    SMB 协议是我用的比较熟悉的。趁着午饭我也把这三个稍微摸一下。
    回 7 楼的疑问:
    是的,只考虑性能就可以。
    1.目前服务器上 3.5 寸口的 slot 已经基本上告罄,没有硬盘也没有 slot 来测试这个问题了。
    2.读写都比较多,我把这块视作一个公共的网络缓存。
    3.大概是随机读写会比较多。目前已有的序列帧,单文件 15MB 到 50MB 居多,一次缓存任务,读取 200 到 600 个左右。
    4.好的,我去咨询一下。这里或许是有优化的空间的。
    5.这个点我还需要继续做一些调查。以我目前的知识储备还需要一些时间才能作答……
    lovejunjie1
        11
    lovejunjie1  
    OP
       2021-12-03 13:19:51 +08:00
    @choury 额。伪装成 IO 的话,似乎就重现了我之前的问题

    me@nas:~$ sudo time dd if=/dev/sdb of=/dev/null bs=4k iflag=direct
    [sudo] huawei 的密码:
    ^C 记录了 1353482+0 的读入
    记录了 1353481+0 的写出
    5543858176 bytes (5.5 GB, 5.2 GiB) copied, 37.218 s, 149 MB/s
    Command terminated by signal 2
    0.34user 4.82system 0:37.23elapsed 13%CPU (0avgtext+0avgdata 2344maxresident)k
    10827880inputs+0outputs (1major+86minor)pagefaults 0swaps
    gam2046
        12
    gam2046  
       2021-12-03 13:29:29 +08:00
    我也使用了 RH2288 V2 ,LSI 2288 的 RAID 卡,如果是单盘的话,RAID 配置时,可以选择读写操作都通过缓存,也许有所提升。

    至于协议层看应用场景,如果需要经常读取某个大文件中的一部分,而不是全部,建议通过 iSCSI 共享。
    如果是大量小文件的读取,iSCSI 和 NFS 都可以考虑。
    如果是读写体积完整文件,则各种共享方式差距不明显(都在可接受范围内)。
    CallMeReznov
        13
    CallMeReznov  
       2021-12-03 13:30:14 +08:00
    阵列卡的缓存策略是什么?
    snuglove
        14
    snuglove  
       2021-12-03 15:40:18 +08:00
    可以尝试关 swap.只用内存.
    内网主要还是看磁盘性能和网络传输情况.
    lovejunjie1
        15
    lovejunjie1  
    OP
       2021-12-03 15:56:50 +08:00
    @gam2046 中午调查服务器 bios 和设备管理器的时候。看到了我这边有 iSCSI 的字样。这个似乎是一个硬件的 iSCSI 设备?看来可以尝试一下这个了。
    @CallMeReznov 目前 read cache policy 是 read ahead, dirver cache 是 unchanged.中午把 IO 项从直连 direct 改成缓存 cached 了。目前还在试
    lovejunjie1
        16
    lovejunjie1  
    OP
       2021-12-03 15:59:39 +08:00
    喜报。打开缓存之后,并把 MTU 设置为 9000 后,有了 10%的性能提升
    ^C 记录了 301749+0 的读入
    记录了 301748+0 的写出
    1235959808 bytes (1.2 GB, 1.2 GiB) copied, 7.61762 s, 162 MB/s
    Command terminated by signal 2
    0.05user 1.06system 0:07.61elapsed 14%CPU (0avgtext+0avgdata 2384maxresident)k
    2414144inputs+0outputs (1major+87minor)pagefaults 0swaps
    lovejunjie1
        17
    lovejunjie1  
    OP
       2021-12-03 16:04:28 +08:00
    @ccde8259 我现在十分怀疑是我的网络配置出现了问题,dd 模拟 IO 的情况下和我实际使用中的情况是一直的。

    iperf3 相关的数据目前没有条件做,我这边可以让我拿来测试的只有一台 linux 服务器,另一台万兆 win10 机器时不时会有人使用。

    其他协议我中午也摸过了一圈。NFS 或者 iSCSI 可能会纳入选择。但是因为用户的习惯,现在 SMB 依然是首选。
    gam2046
        18
    gam2046  
       2021-12-03 16:10:20 +08:00
    @lovejunjie1 #15 iSCSI 并不需要硬件支持,纯软件方案,而且 iSCSI 挂载后访问与本地磁盘一致,由于是挂载的块设备,因此兼容性上远比其他文件挂载( NFS/SMB/WebDAV/etc...)的好,如果文件比较打,可以适当调高 MTU 。

    同时 Linux 、Windows 作为访问的客户端都支持的比较完备。如果 macos 的话...我猜应该也还不错吧,主要是自己没有 macos 设备
    neilyoone
        19
    neilyoone  
       2021-12-03 18:04:38 +08:00
    R0 没理解错 应该是 Raid0

    弄块 SSD 给 两块西数黑盘 Raid0 做 SSD cache 加速吧,

    Ubuntu 下的软件有 bcache, 对随机 IO 读写提升会很有帮助.
    kokutou
        20
    kokutou  
       2021-12-03 19:29:28 +08:00 via Android
    如果没看错的话,现在问题就是

    单盘读速有 300m/s
    双盘组了 r0
    但是本机上 dd 读取 r0 只有 160m/s

    那不就是查阵列卡吗。。。
    找售后呗啊。
    sorsens
        21
    sorsens  
       2021-12-04 10:27:46 +08:00
    额,看着好像是:
    设置里一个缓存写入盘,想要读出速度也快,直接再来一个 ssd 组成 r1 就好了。
    r1 做成缓存盘
    其实不一定要上服务器,群晖这些设置好了也很方便
    lovejunjie1
        22
    lovejunjie1  
    OP
       2022-03-25 00:04:16 +08:00
    @kokutou
    @gam2046
    @ccde8259
    @choury
    感谢各位佬三个月前的帮助。最近我解决了这个问题了。现在上传和下载的速度都能跑满机械硬盘的极限了。
    实际上硬件和软件在 SMB 或者传输协议或者 MTU 或者阵列策略缓存什么的方面,都没有问题。

    真正的问题出在了硬盘挂载上。说起来可能有点扯淡。因为断电之后再启动,硬盘的 /dev/sd*对应的硬盘 UID 产生了变化。而我之前的硬盘自动挂载写的是逻辑挂载点。所以造成了目录映射的错误。
    这个错误其中的一个表现就是,若要访问我认为在其中某一个盘的中的数据时,所有的硬盘读取灯都在亮。所以我猜测着大概率是在全盘寻址,因为逻辑问题造成的读取效率低下。
    直到上个月我才发现了这个情况,十分惭愧。我这个不专业的 IT 给各位添麻烦了。
    当我把硬盘映射从逻辑挂载点,重置到 UID 后。我的目录映射正确了。读取文件时,硬盘的指示灯也正确了。上传下载时候的速度也对了。经过这一个月的观察,确信了这件事情。

    最后再次感谢各位的帮助。谢谢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     872 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:46 PVG 05:46 LAX 14:46 JFK 17:46
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86