小樱 发表于 2026/2/10 03:17

linux dd命令不同bs区块对写入SSD固态磁盘io性能的影响,1MB最占优势,DD包安装速度优化

linux dd命令不同bs区块对写入SSD固态磁盘io性能的影响,1MB最占优势,DD包安装速度优化

测试命令,不加bs参数的情况,默认值是0.5K,也就是512字节
dd if=/dev/zero of=test count=1K oflag=dsync
dd if=/dev/zero of=test bs=4K count=1K oflag=dsync
dd if=/dev/zero of=test bs=128K count=1K oflag=dsync
dd if=/dev/zero of=test bs=1M count=1K oflag=dsync
dd if=/dev/zero of=test bs=8M count=128 oflag=dsync

结论:SSD固态磁盘的时候,1MB区块速度最快,猜测和CPU的L3缓存有关系,8M比较巨大无法缓存所以io速度反而降低了不少
机械磁盘的时候反而是8MB才勉强起来速度,16MB区块才能达到机械硬盘的写入峰值
很多dd包教程命令都没带bs参数,这个是一定要带的,否则dd过程的时候看服务器给的Graphs数据,无bs参数情况下会发生5K iops左右的读,CPU还一直吃满,明明wget的服务器很快,但是dd需要1到2小时,这就是没加 bs=1M 导致的
一旦使用 bs=1M 后,磁盘io就不会发生读现象了,DD只会进行数据解压写入到磁盘,gzip的单线程解压速度一般是150MB/s左右,这时候大概2分钟就能完成一台设备DD包安装,参考正确的DD命令
rescue救援模式下使用
wget -O- http://文件地址.vhd.gz | gunzip | dd of=/dev/vda bs=1M


测试机器1,vps宿主机采用sata ssd,虚拟机做了io限制避免一台vps占用过多性能
Architecture:          x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:               94
Model name:            Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz
Stepping:            3
CPU MHz:               3599.953
BogoMIPS:            7199.90
Hypervisor vendor:   Microsoft
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:            256K
L3 cache:            8192K
NUMA node0 CPU(s):   0-3
# dd if=/dev/zero of=test count=1K oflag=dsync
记录了1024+0 的读入
记录了1024+0 的写出
524288字节(524 kB)已复制,3.12447 秒,168 kB/秒
# dd if=/dev/zero of=test bs=4K count=1K oflag=dsync
记录了1024+0 的读入
记录了1024+0 的写出
4194304字节(4.2 MB)已复制,3.17382 秒,1.3 MB/秒
# dd if=/dev/zero of=test bs=128K count=1K oflag=dsync
记录了1024+0 的读入
记录了1024+0 的写出
134217728字节(134 MB)已复制,4.86477 秒,27.6 MB/秒
# dd if=/dev/zero of=test bs=1M count=1K oflag=dsync
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,9.32242 秒,115 MB/秒
# dd if=/dev/zero of=test bs=8M count=128 oflag=dsync
记录了128+0 的读入
记录了128+0 的写出
1073741824字节(1.1 GB)已复制,9.53983 秒,113 MB/秒
#


测试机器2,kvm是基于驱动层的虚拟化所以io性能很差,虽然是nvme并且开了cache=writeback,但是io大区块下读写依旧不稳定,修改为cache=writethrough反而会更平滑
Architecture:                x86_64
CPU op-mode(s):            32-bit, 64-bit
Address sizes:             40 bits physical, 48 bits virtual
Byte Order:                Little Endian
CPU(s):                      2
On-line CPU(s) list:       0,1
Vendor ID:                   GenuineIntel
BIOS Vendor ID:            QEMU
Model name:                Intel Xeon Processor (Skylake, IBRS, no TSX)
    BIOS Model name:         NotSpecifiedCPU @ 2.0GHz
    BIOS CPU family:         1
    CPU family:            6
    Model:                   85
    Thread(s) per core:      1
    Core(s) per socket:      2
    Socket(s):               1
    Stepping:                4
    BogoMIPS:                4599.99
Virtualization features:   
Hypervisor vendor:         KVM
Virtualization type:       full
Caches (sum of all):         
L1d:                     64 KiB (2 instances)
L1i:                     64 KiB (2 instances)
L2:                        8 MiB (2 instances)
L3:                        16 MiB (1 instance)
root@rescue ~ # dd if=/dev/zero of=test count=1K oflag=dsync
1024+0 records in
1024+0 records out
524288 bytes (524 kB, 512 KiB) copied, 0.00297515 s, 176 MB/s
root@rescue ~ # dd if=/dev/zero of=test bs=4K count=1K oflag=dsync
1024+0 records in
1024+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.0143906 s, 291 MB/s
root@rescue ~ # dd if=/dev/zero of=test bs=128K count=1K oflag=dsync
1024+0 records in
1024+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 0.0919815 s, 1.5 GB/s
root@rescue ~ # dd if=/dev/zero of=test bs=1M count=1K oflag=dsync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.540522 s, 2.0 GB/s
root@rescue ~ # dd if=/dev/zero of=test bs=8M count=128 oflag=dsync
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.960251 s, 1.1 GB/s
root@rescue ~ #
页: [1]
查看完整版本: linux dd命令不同bs区块对写入SSD固态磁盘io性能的影响,1MB最占优势,DD包安装速度优化