同步写入速度非常慢。 Ubuntu 10.10,32 位,ext4

同步写入速度非常慢。 Ubuntu 10.10,32 位,ext4

我在运行 Ubuntu 10.10(32 位,带有 ext4 分区)的 Macbook Pro 上运行 ActiveMQ。

Linux iker-laptop 2.6.35-23-generic-pae #40-Ubuntu SMP Wed Nov 17 22:32:51 UTC 2010 i686 GNU/Linux

如果我在 ActiveMQ 中启用持久性,性能会急剧下降。我在其他机器上测试过同样的事情,差异有2个数量级。

有一个带有activeMQ的工具可以测试HD,结果如下:

iker@iker-laptop:~/apps/apache-activemq-5.4.1$ java -classpath lib/kahadb-5.4.1.jar org.apache.kahadb.util.DiskBenchmark 

Benchmarking: /home/iker/apps/apache-activemq-5.4.1/disk-benchmark.dat
Writes: 
  146171 writes of size 4096 written in 11.074 seconds.
  13199.477 writes/second.
  51.560455 megs/second.

Sync Writes: 
  197 writes of size 4096 written in 10.006 seconds.
  19.688187 writes/second.
  0.07690698 megs/second.

Reads: 
  5589861 reads of size 4096 read in 10.001 seconds.
  558930.2 writes/second.
  2183.321 megs/second.

同步写入的性能很糟糕。肯定有什么配置错误,但这是我注意到高清性能问题的唯一应用程序。

hdparm 抛出预期值:

iker@iker-laptop:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   6282 MB in  2.00 seconds = 3141.73 MB/sec
 Timing buffered disk reads:  240 MB in  3.00 seconds =  79.88 MB/sec

答案1

同步 IO 的主要限制因素不是硬盘的吞吐量,而是从发出写入到将其提交到磁盘所需的时间。在这方面,硬盘驱动器最相关的性能指标是硬盘驱动器的寻道时间,而不是理想情况下的吞吐量。

除了硬件对你不利之外,内核也是如此,我猜你可能会看到一个小小的改进(尽管,可能远不及你从异步 IO 中获得的效果),如果你可以将基准测试(应用程序)在实时IO调度类下运行。默认情况下,应用程序将安排在尽力而为类别下,这也可能会增加写入的等待时间。使用实时调度类需要您自担风险,因为它会在访问磁盘时对其他应用程序的性能产生不利影响。

总的来说,我真的不认为您所看到的同步写入性能有什么严重错误。与异步 IO 相比,同步 IO 通常会表现得非常糟糕。

作为旁注,快速谷歌一下 activemq 和同步 io 给出了下列的:

出于性能原因,即使您使用的是持久消息,您也可能希望尽快将消息流式传输到代理

答案2

cfq I/O 调度程序在此类测试中往往表现得很糟糕。除了前面的 ionice 建议之外,您可能还想尝试切换到截止时间 I/O 调度程序(通过使用 root 启动elevator=deadline或以 root 身份执行for n in /sys/block/sd*/queue/scheduler ; do echo deadline > $n ; done)。

答案3

同步写入必须先收到写入已提交的确认(无论提交成功还是错误),然后才能返回自身。这是设计使然,并且由于旋转金属磁盘涉及的高延迟时间(磁盘 RAM 缓存不计算在内),本质上会使同步写入速度变慢。

异步写入通常写入 RAM,操作系统稍后将其提交到磁盘(稍后通常只需几秒或更短时间(我相信 ZFS 是 5x/秒,或每 5 秒一次))。磁盘寻道时间以毫秒为单位,而 RAM 寻道时间以纳秒为单位。这是 1000 倍的差异。

当在继续之前永久存储数据绝对至关重要并且可能发生断电的 1 秒延迟是不可接受的时,请使用同步写入。

在所有其他时间使用异步写入。

答案4

同步写入很慢,这就是我们缓冲所有内容的原因。看一眼IOPS在 Wikipedia 上,您会看到典型的 7,200 rpm HDD 具有 75-100 IOPS。现在看一下Macbook Pro 的技术规格,并且它有一个 5,400 rpm 的硬盘。这最多相当于 75% 的性能,因此您最多只能看到笔记本电脑的 50-75 IOPS。

MQ 可能会编写一个数据分类账和一个会计分类账,这会让您达到在 ActiveMQ 基准测试中看到的 20 IOPS。

你有两个选择,测试一下临时文件系统,即内存文件系统,或者使用SSD。通常,使用同步写入的服务器将拥有一个带有 15,000 rpm 磁盘的重要 SAS/SCSI RAID 阵列。向阵列添加额外的磁盘是为了提高性能,而不是增加容量。

相关内容