我正在尝试基于 FreeBSD+ZFS+标准组件构建自己的网络附加存储,但存在奇怪的性能问题。
硬件规格为:
我从所有磁盘创建了一个 RAID-Z2 zpool。我按照教程在那个 zpool 上安装了 FreeBSD 8.1 。SATA 控制器以 AHCI 模式运行。
zpool 状态的输出:
pool: zroot
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
raidz2 ONLINE 0 0 0
gptid/7ef815fc-eab6-11df-8ea4-001b2163266d ONLINE 0 0 0
gptid/80344432-eab6-11df-8ea4-001b2163266d ONLINE 0 0 0
gptid/81741ad9-eab6-11df-8ea4-001b2163266d ONLINE 0 0 0
gptid/824af5cb-eab6-11df-8ea4-001b2163266d ONLINE 0 0 0
gptid/82f98a65-eab6-11df-8ea4-001b2163266d ONLINE 0 0 0
Run Code Online (Sandbox Code Playgroud)
问题是池上的写入性能非常糟糕(<10 MB/s),并且每个访问磁盘的应用程序在写入时每隔几秒就会无响应。在 ZFS 方舟缓存已满之前写入似乎没问题,然后 ZFS 停止整个系统 I/O,直到完成写入该数据。
我也收到kmem_malloc to small
内核恐慌。我已经试过把
vm.kmem_size="1500M"
vm.kmem_size_max="1500M"
Run Code Online (Sandbox Code Playgroud)
进入/boot/loader.conf,但它没有帮助。
有谁知道这里发生了什么?我真的没有足够的内存供 ZFS 处理这个 RAID-Z2 吗?
Jed*_*els 10
我怀疑您可能遇到了我将称之为“512 字节扇区不是 4K 扇区”问题的问题。无论如何,谷歌搜索 gnop、4K 扇区、WD Green,我怀疑你会找到解决办法。我第一次在这个网站上了解到它,它提供了关于这个问题的信息,以及针对 FreeBSD 和 ZFS 的各种其他调整。祝你好运!
编辑:引用链接网站:
... 最后,我遇到了我正在使用的西部数据 1.5 TB (WE15EADS) 绿色驱动器问题的参考。
驱动器具有 4KB 物理扇区,但向 BIOS 报告 512 字节。所以性能在真正大的写入时会下降,因为 FreeBSD 上的 zfs 将 4KB 的数据作为 8 个 512 字节的单独写入发送到驱动器,这需要驱动器中的固件将其工作负载增加 60 倍(第 1 个 512 字节 -写入 4KB,第 2 个 512 字节,读取 4K,写入 4K,...,第 8 个 512 字节,读取 4K,写入 4K -- 所以 4KB 写入变为 4KB 写入 +(4KB 读取 + 4KB 写入)X(4KB/512Bytes - 1 ) = 60. 内置 32 MB 缓存的驱动器有帮助,直到它填满并且 zfs 弧开始,然后弧开始填满。总而言之,没什么大不了的,对吧?
实际上,如果您向 zfs 写入的文件大于您的弧加上驱动器上的缓冲区大小,那将是一件大事。...