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
    • 最新
    • 标签
主页 / server / 问题 / 610523
Accepted
nn4l
nn4l
Asked: 2014-07-07 20:33:53 +0800 CST2014-07-07 20:33:53 +0800 CST 2014-07-07 20:33:53 +0800 CST

为什么我的 RAID1 读取访问比写入访问慢?

  • 772

我做了一些简单的性能测试,似乎从我的 RAID1 读取比写入慢:

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

我明白 dd 不是性能测试工具,但是这个结果仍然是一个惊喜。

系统由供应商构建,具有 16 GByte RAM 的 Supermicro 主板。RAID 控制器是具有 1 GB 高速缓存的 MegaRAID 9271-8i。SAS-933EL1 背板上有 8 个 2 TB SAS 磁盘。我不确定布线,控制器的一个连接器连接到 SAS 背板,另一个连接到两个保存操作系统的 SATA 磁盘。

RAID1 是使用以下命令设置的:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

我希望读取访问至少与写入访问一样快,甚至可能更快。715 MByte/sec 的写入速度似乎接近单个 SAS/SATA 连接器的 6 GBit 限制。这可能是 SAS 背板的配置或布线问题吗?SAS背板配置可以用MegaRAID命令查询吗?请指教。

更新

正如 poige 和 Peter 所解释的,读取性能低于预期可能是由于 Linux I/O 子系统的缓存造成的。

在 dd 命令中使用直接标志时,我得到

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

这要好得多,但仍然比写入速度慢 10%。使用 oflag=direct 不会影响写入速度。

performance
  • 2 2 个回答
  • 2980 Views

2 个回答

  • Voted
  1. poige
    2014-07-07T21:12:46+08:002014-07-07T21:12:46+08:00

    答案的关键是预读。曾几何时,我也碰巧有这个问题。

    IOW,为了获得最佳的顺序读取性能,所有磁盘都应永久包含在输入中。

    当您使用ddw/o directio(参见 参考资料man dd)时,写入操作不会立即执行,而是通过 OS 缓存,因此它有更多机会依次涉及所有磁盘并获得最大可能的性能。

    • 10
  2. Best Answer
    Peter
    2014-07-07T23:55:38+08:002014-07-07T23:55:38+08:00

    poige 关于写缓存的说法完全正确,但这里有更多细节。

    dd 带零并使用写缓存不是基准测试的正确方法(当然,除非您想测试写缓存,这可能仅对文件系统有用,以查看它同步元数据、创建新文件等的多少。 )(并且可能 dd 总是错误的基准测试类型,但它适用于非常基本的测试)

    我建议您将 dd 与以下选项中的至少一个一起使用:

    conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
    oflag=direct   -> this will make it skip the OS cache but not the disk cache
    conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.
    

    也不要使用零。如果数据如此可预测为零,则某些智能硬件/软件/固件可能会使用一些快捷方式。如果我猜您没有使用压缩,则尤其如此。相反,使用内存中的随机文件(例如 /dev/shm)。urandom 很慢,所以你需要暂时将它写在某个地方才能再次阅读。创建一个 50MB 的随机文件:

    dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50
    

    读取文件多次写入(这里我使用cat读取6次):

    dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync
    
    rm /dev/shm/randfile
    

    另请记住,raid1 读取在并行操作中最快,因此可以独立使用磁盘。协调磁盘以使用不同磁盘读取同一操作的不同部分可能不够聪明。

    • 8

相关问题

  • 基于 Microsoft 的服务器(IIS、MSSQL 等)上的病毒扫描应排除哪些内容?

  • jvm性能调优技巧/资源?

  • 加快 MSSQL 快照复制到 SQLExpress 副本的速度

  • 聚集索引与非聚集索引?

  • 使用大量 javascript 的页面上的鱿鱼速度很慢

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve