V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lovejunjie1
V2EX  ›  服务器

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

  •  
  •   lovejunjie1 · 257 天前 · 1601 次点击
    这是一个创建于 257 天前的主题,其中的信息可能已经有所发展或是发生改变。
    佬们好,我是一个影视行业的从业工作者。喜欢在家捯饬一些 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  
       257 天前
    16T 单盘做的 raid0 吗,这还不如不做
    dapang1221
        2
    dapang1221  
       257 天前
    raid0 是多块盘来分摊读写速度,建议改直通模式试试速度
    ccde8259
        3
    ccde8259  
       257 天前 via iPhone   ❤️ 1
    先 dd 确认一下速率
    有可能是网络协议开销
    整存储前考虑过其他方案吗?
    硬阵列方案优缺点?
    阵列级别带来的容灾能力差异?
    软阵列方案优缺点?
    阵列校验开销能不能 cover ?
    ZFS/GlusterFS/Ceph 方案优缺点?
    发生阵列降级以后怎么处理?
    磁盘真的是越大越好吗?
    lovejunjie1
        4
    lovejunjie1  
    OP
       257 天前
    @dapang1221 是双盘做的 R0 。单盘写上限只有 300MB/S 。目前这个速度可以满足我们向服务器的这个 R0 缓存盘同步写入数据用了。直通模式的事情我咨询一下华为售后看看如何操作。
    lovejunjie1
        5
    lovejunjie1  
    OP
       257 天前
    @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
       256 天前
    @ccde8259 测试了一下读取速度,512MB 。这个速度很理想
    [email protected]:~$ 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  
       256 天前 via iPhone
    @lovejunjie1
    大致就是不考虑容灾,只考虑性能对吧。
    双 16T 和 4 块 8T 甚至 8 块 4T 构筑 R0 阵列,对于吞吐量问题上会带来什么差异?
    读写场景是读多还是写多?
    读写场景是顺序读写还是随机读写多?
    不妨看下硬阵列卡是否有缓存?是否有缓存配置优化空间?
    软硬阵列在缓存层面的差异能带来什么样不同的优劣势?
    choury
        8
    choury  
       256 天前 via Android
    @lovejunjie1 加 iflag=direct 重测
    ccde8259
        9
    ccde8259  
       256 天前 via iPhone
    @lovejunjie1
    那现阶段问题基本就是网络协议开销问题,至少本地 dd 性能没出问题。
    一方面 iperf3 打一下带宽,是否需要修改 MTU ?
    一方面猜你用的 SMB 协议,是否有其他协议可以使用? NFS FTP WebDAV ?
    lovejunjie1
        10
    lovejunjie1  
    OP
       256 天前
    @ccde8259 感谢,不愧是神佬。经验丰富。我也是疏忽了忘记告知是 SMB 协议。
    我尝试一下 iperf3 。等会吃完午餐把数据发上来。
    SMB 协议是我用的比较熟悉的。趁着午饭我也把这三个稍微摸一下。
    回 7 楼的疑问:
    是的,只考虑性能就可以。
    1.目前服务器上 3.5 寸口的 slot 已经基本上告罄,没有硬盘也没有 slot 来测试这个问题了。
    2.读写都比较多,我把这块视作一个公共的网络缓存。
    3.大概是随机读写会比较多。目前已有的序列帧,单文件 15MB 到 50MB 居多,一次缓存任务,读取 200 到 600 个左右。
    4.好的,我去咨询一下。这里或许是有优化的空间的。
    5.这个点我还需要继续做一些调查。以我目前的知识储备还需要一些时间才能作答……
    lovejunjie1
        11
    lovejunjie1  
    OP
       256 天前
    @choury 额。伪装成 IO 的话,似乎就重现了我之前的问题

    [email protected]:~$ 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  
       256 天前
    我也使用了 RH2288 V2 ,LSI 2288 的 RAID 卡,如果是单盘的话,RAID 配置时,可以选择读写操作都通过缓存,也许有所提升。

    至于协议层看应用场景,如果需要经常读取某个大文件中的一部分,而不是全部,建议通过 iSCSI 共享。
    如果是大量小文件的读取,iSCSI 和 NFS 都可以考虑。
    如果是读写体积完整文件,则各种共享方式差距不明显(都在可接受范围内)。
    CallMeReznov
        13
    CallMeReznov  
       256 天前
    阵列卡的缓存策略是什么?
    snuglove
        14
    snuglove  
       256 天前
    可以尝试关 swap.只用内存.
    内网主要还是看磁盘性能和网络传输情况.
    lovejunjie1
        15
    lovejunjie1  
    OP
       256 天前
    @gam2046 中午调查服务器 bios 和设备管理器的时候。看到了我这边有 iSCSI 的字样。这个似乎是一个硬件的 iSCSI 设备?看来可以尝试一下这个了。
    @CallMeReznov 目前 read cache policy 是 read ahead, dirver cache 是 unchanged.中午把 IO 项从直连 direct 改成缓存 cached 了。目前还在试
    lovejunjie1
        16
    lovejunjie1  
    OP
       256 天前
    喜报。打开缓存之后,并把 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
       256 天前
    @ccde8259 我现在十分怀疑是我的网络配置出现了问题,dd 模拟 IO 的情况下和我实际使用中的情况是一直的。

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

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

    同时 Linux 、Windows 作为访问的客户端都支持的比较完备。如果 macos 的话...我猜应该也还不错吧,主要是自己没有 macos 设备
    neilyoone
        19
    neilyoone  
       256 天前
    R0 没理解错 应该是 Raid0

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

    Ubuntu 下的软件有 bcache, 对随机 IO 读写提升会很有帮助.
    kokutou
        20
    kokutou  
       256 天前 via Android
    如果没看错的话,现在问题就是

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

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

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

    最后再次感谢各位的帮助。谢谢。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3216 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:52 · PVG 12:52 · LAX 21:52 · JFK 00:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.