在裸机上运行的 Ubuntu 上,HDD 写入速度很慢。我在同一台主机上启动了一个 Vagrant 盒(运行相同版本的 Ubuntu),与裸机相比,写入速度非常快。
以下是主机和虚拟机中各种与 HDD 性能相关的命令的输出。有什么想法我应该微调什么来提高裸机上的写入速度吗?
裸机
$ dd if=/dev/zero of=/tmp/output bs=384k count=1k oflag=dsync 1024+0 records in 1024+0 records out 402653184 bytes (403 MB) copied, 37.4866 s, 10.7 MB/s
VM(Vagrant Box)
vagrant@vagrant-ubuntu-trusty-64:~$ sudo dd if=/dev/zero of=/tmp/output bs=384k count=1k oflag=dsync 1024+0 records in 1024+0 records out 402653184 bytes (403 MB) copied, 0.923299 s, 436 MB/s
在主机上,
$ lsblk -l NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk sda1 8:1 0 802.9G 0 part md0 9:0 0 802.8G 0 raid1 / sda2 8:2 0 1K 0 part sda5 8:5 0 35.5G 0 part md1 9:1 0 35.4G 0 raid1 [SWAP] sda6 8:6 0 93.1G 0 part md2 9:2 0 93.1G 0 raid1 /home sdb 8:16 0 931.5G 0 disk sdb1 8:17 0 802.9G 0 part md0 9:0 0 802.8G 0 raid1 / sdb2 8:18 0 1K 0 part sdb5 8:21 0 35.5G 0 part md1 9:1 0 35.4G 0 raid1 [SWAP] sdb6 8:22 0 93.1G 0 part md2 9:2 0 93.1G 0 raid1 /home $ mount | grep md0 /dev/md0 on / type ext4 (rw,errors=remount-ro)
在虚拟机上
$ lsblk -l NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk sda1 8:1 0 40G 0 part / $ mount | grep sda1 /dev/sda1 on / type ext4 (rw)
来自主机的 HDD 信息
$ hdparm -I /dev/sda /dev/sda: ATA device, with non-removable media Model Number: ST1000NM0033-9ZM173 Serial Number: Z1W3BGQQ Firmware Revision: SN04 Transport: Serial, SATA Rev 3.0 Standards: Supported: 9 8 7 6 5 Likely used: 9 Configuration: Logical max current cylinders 16383 16383 heads 16 16 sectors/track 63 63 -- CHS current addressable sectors: 16514064 LBA user addressable sectors: 268435455 LBA48 user addressable sectors: 1953525168 Logical Sector size: 512 bytes Physical Sector size: 512 bytes Logical Sector-0 offset: 0 bytes device size with M = 1024*1024: 953869 MBytes device size with M = 1000*1000: 1000204 MBytes (1000 GB) cache/buffer size = unknown Form Factor: 3.5 inch Nominal Media Rotation Rate: 7200
答案1
我猜测内存缓存或虚拟化层识别数据流中的零,从而在驱动器映像中创建稀疏记录。
>400MB/s,就像 VM 所报告的那样,在 7200rpm 驱动器上是完全不现实的。120-150MB/s 是现实的,但高的连续写入速度,>400MB/s 是不现实的。
要测试它是否是内存缓存,请选择大的写入,例如盒子总内存的两倍。这会从等式中消除写入缓存的影响,并会告诉您虚拟化层是否对所有空值做了一些欺骗。
您还可以尝试读取非零数据文件(如 ISO),然后查看写入性能。如果速度一样快,则意味着数据实际上并未写入磁盘,而只是缓存某处。
在最近修整过的 ssd 系统上,我达到了 42MB/s。这可能比磁盘在顺序写入时的速度要慢,因为 dsync 表示同步 I/O 操作。如果我将块大小更改为 1M,将计数更改为 400,我在 SSD 上的速度约为 80MB/s,这表明同步操作在低速中起着很大的作用。