我正在尝试基于 FreeBSD+ZFS+标准组件构建自己的网络附加存储,但存在奇怪的性能问题。
硬件规格如下:
- AMD Athlon II X2 240e 处理器
- 华硕 M4A78LT-M LE 主板
- 2GiB 金士顿 ECC DDR3(两根)
- Intel Pro/1000 CT PCIe 网络适配器
- 5x 西部数据 Caviar 绿色 1.5TB
我从所有磁盘创建了一个 RAID-Z2 zpool。我按照以下说明在该 zpool 上安装了 FreeBSD 8.1教程. SATA 控制器在 AHCI 模式下运行。
zpool status 的输出:
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
问题在于池上的写入性能非常非常很糟糕(<10 MB/s),并且访问磁盘的每个应用程序在写入时每隔几秒钟就会无响应。似乎写入很好,直到 ZFS ark 缓存已满,然后 ZFS 会暂停整个系统 I/O,直到完成写入该数据。
此外,我还遇到了kmem_malloc to small
内核恐慌。我已经尝试过
vm.kmem_size="1500M"
vm.kmem_size_max="1500M"
进入 /boot/loader.conf,但它没有帮助。
有人知道这是怎么回事吗?我真的没有足够的内存让 ZFS 处理这个 RAID-Z2 吗?
答案1
我怀疑你可能遇到了我称之为“512 字节扇区不是 4K 扇区”的问题。无论如何,在 Google 上搜索 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 arc 启动,然后 arc 开始填充。所以总的来说,没什么大不了的,对吧?
实际上,如果你向 zfs 写入的文件大于你的 arc 加上驱动器上缓冲区的大小,那么这将是一个非常大的问题。...
答案2
除了 4K/512b 问题之外,WD 绿盘也不是您使用的理想选择,因为它们在 8 秒不活动后会停止磁头,需要几秒钟才能恢复到工作状态。这就是您观察到的写入延迟。
http://opensolaris.org/jive/thread.jspa?messageID=480641&tstart=0
答案3
尝试使用 WDidle 工具禁用计时器。