All Raspberry pi models up to 4 required microSD because the microSD had a bootloader. Raspberry Pi 4 has 512KB EEPROM (Electrically Erasable Programmable Read-Only Memory). Thus, the bootloader from microSD moved to EEPROM, making it possible to boot directly from a USB drive or even over a network without a microSD. This post describes the installation process for Ubuntu 20.04 on an SSD connected via USB 3.0.
Several of these Raspberry pis are used as control nodes for my home cluster. As shown from the tests given at the end of this post, an SSD-drive connected to raspberry pi via USB 3.0 provides much higher performance than a microSD (expectedly).
But first, we still need a microSD card with a Raspberry Pi OS. The support of direct USB boot was added to the EEPROM firmware recently. For modules that I have, an update was required.
After booting into Raspberry Pi OS, we have to update all packages and switch the EEPROM update channel from critical to stable:
apt update apt full-upgrade sed -i 's/^FIRMWARE_RELEASE_STATUS=.*/FIRMWARE_RELEASE_STATUS="stable"/' /etc/default/rpi-eeprom-update
Then we will update the EEPROM and reboot:
rpi-eeprom-update -a -d BCM2711 detected Dedicated VL805 EEPROM detected BOOTFS /boot *** INSTALLING EEPROM UPDATES *** BOOTLOADER: update available CURRENT: Tue 10 Sep 2019 10:41:50 AM UTC (1568112110) LATEST: Thu 03 Sep 2020 12:11:43 PM UTC (1599135103) FW DIR: /lib/firmware/raspberrypi/bootloader/stable VL805: update available CURRENT: 000137ad LATEST: 000138a1 BOOTFS /boot EEPROM updates pending. Please reboot to apply the update. reboot
Checking the config after the update:
vcgencmd bootloader_config [all] BOOT_UART=0 WAKE_ON_GPIO=1 POWER_OFF_ON_HALT=0 DHCP_TIMEOUT=45000 DHCP_REQ_TIMEOUT=4000 TFTP_FILE_TIMEOUT=30000 ENABLE_SELF_UPDATE=1 DISABLE_HDMI=0 BOOT_ORDER=0xf41
It’s time to install Ubuntu 20.04 on SSD:
wget https://cdimage.ubuntu.com/releases/20.04.1/release/ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz xz -d < ubuntu-20.04.1-preinstalled-server-arm64+raspi.img.xz - | dd of=/dev/sda bs=1M status=progress partprobe mkdir /mnt/root mount /dev/sda2 /mnt/root mount /dev/sda1 /mnt/root/boot/firmware
Most of the further actions are borrowed from the official forum raspberrypi.org.
Unfortunately, direct USB boot does not work with a compressed kernel, so we need to unpack it:
cd /mnt/root/boot/firmware zcat vmlinuz > vmlinux
And also we make the section of config.txt to:
[pi4] gpu_mem=16 max_framebuffers=2 dtoverlay=vc4-fkms-v3d boot_delay kernel=vmlinux initramfs initrd.img followkernel
Automating kernel unpacking when updating with script auto_decompress_kernel:
cat <<EOF > auto_decompress_kernel
#!/bin/bash -e
#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux
#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
exit 0
else echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
fi
fi
#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak
if [ ! $? == 0 ]; then
echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
exit 1
else echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi
#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH".............."
zcat $CKPATH > $DKPATH
if [ ! $? == 0 ]; then
echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
exit 1
else
echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi
#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5
if [ ! $? == 0 ]; then
echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
else echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi
#Exit
exit 0
EOF
Run this script for every package manipulation:
cat <<EOF > /mnt/root/etc/apt/apt.conf.d/999_decompress_rpi_kernel
DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };
EOF
chmod +x /mnt/root/etc/apt/apt.conf.d/999_decompress_rpi_kernel
After this, turn off the system and take out the SD card. We will never need this again. Further, the OS will be loaded from USB.
SSD vs microSD performance
What was it all for? If you've read this far, you may like to know how what performance will take SSD on raspberry pi compares to a top-end microSD card. The results that I got are shown in the summary table below.
Test configuration
The following components were used during testing:
- Raspberry Pi 4 model B 4GB
- GeeekPi Raspberry X857 mSATA SSD Shield
- Kingspec mSATA SSD 128 ГБ
- SanDisk Extreme Pro 64G microSD
Test results
| IOPS | BW, MiB/s | lat, ms | sequential reads |
|---|---|---|---|
| microSD | 10 | 43.3 | 2935 |
| SSD | 94 | 379 | 336 |
| random reads | |||
| microSD | 1875 | 7.5 | 0.5 |
| SSD | 5185 | 20.3 | 0.2 |
| sequential writes | |||
| microSD | 6 | 25.5 | 4979.09 |
| SSD | 69 | 277 | 336 |
| random writes | |||
| microSD | 163 | 0.6 | 6.1 |
| SSD | 551 | 2.2 | 1.8 |
Raw test results
SSD
fio -ioengine=libaio -direct=1 -invalidate=1 -name=test -bs=4M -iodepth=32 -rw=read -runtime=60 -filename=/dev/sda
test: (g=0): rw=read, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=32
fio-3.12
Starting 1 process
Jobs: 1 (f=1): [R(1)][100.0%][r=380MiB/s][r=95 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=1168: Wed Sep 16 20:24:17 2020
read: IOPS=94, BW=379MiB/s (397MB/s)(22.2GiB/60078msec)
slat (usec): min=396, max=22200, avg=10518.14, stdev=3092.86
clat (msec): min=69, max=445, avg=326.21, stdev=11.54
lat (msec): min=78, max=457, avg=336.73, stdev=11.57
clat percentiles (msec):
| 1.00th=[ 321], 5.00th=[ 321], 10.00th=[ 321], 20.00th=[ 321],
| 30.00th=[ 321], 40.00th=[ 326], 50.00th=[ 326], 60.00th=[ 330],
| 70.00th=[ 334], 80.00th=[ 334], 90.00th=[ 334], 95.00th=[ 334],
| 99.00th=[ 334], 99.50th=[ 338], 99.90th=[ 393], 99.95th=[ 426],
| 99.99th=[ 447]
bw ( KiB/s): min=81920, max=401408, per=99.54%, avg=386013.07, stdev=28372.15, samples=120
iops : min= 20, max= 98, avg=94.13, stdev= 6.93, samples=120
lat (msec) : 100=0.05%, 250=0.25%, 500=99.70%
cpu : usr=0.26%, sys=5.84%, ctx=7075, majf=0, minf=32791
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.3%, 32=99.5%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued rwts: total=5688,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=32
Run status group 0 (all jobs):
READ: bw=379MiB/s (397MB/s), 379MiB/s-379MiB/s (397MB/s-397MB/s), io=22.2GiB (23.9GB), run=60078-60078msec
Disk stats (read/write):
sda: ios=45355/0, merge=0/0, ticks=3252406/0, in_queue=3033920, util=99.87%
fio -ioengine=libaio -direct=1 -invalidate=1 -name=test -bs=4M -iodepth=32 -rw=write -runtime=60 -filename=/dev/sda
test: (g=0): rw=write, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=32
fio-3.12
Starting 1 process
Jobs: 1 (f=1): [W(1)][100.0%][w=108MiB/s][w=27 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=1155: Wed Sep 16 20:20:57 2020
write: IOPS=69, BW=277MiB/s (291MB/s)(16.3GiB/60277msec); 0 zone resets
slat (usec): min=1484, max=77985, avg=14324.74, stdev=7642.49
clat (msec): min=271, max=1390, avg=446.22, stdev=199.27
lat (msec): min=305, max=1422, avg=460.55, stdev=205.50
clat percentiles (msec):
| 1.00th=[ 376], 5.00th=[ 380], 10.00th=[ 384], 20.00th=[ 384],
| 30.00th=[ 388], 40.00th=[ 388], 50.00th=[ 393], 60.00th=[ 393],
| 70.00th=[ 397], 80.00th=[ 397], 90.00th=[ 405], 95.00th=[ 1167],
| 99.00th=[ 1217], 99.50th=[ 1217], 99.90th=[ 1234], 99.95th=[ 1318],
| 99.99th=[ 1385]
bw ( KiB/s): min=98304, max=335872, per=99.67%, avg=283024.26, stdev=85726.24, samples=120
iops : min= 24, max= 82, avg=68.99, stdev=20.90, samples=120
lat (msec) : 500=92.56%, 750=0.36%, 1000=0.43%
cpu : usr=5.45%, sys=3.32%, ctx=7301, majf=0, minf=25
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=0.4%, 32=99.3%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued rwts: total=0,4179,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=32
Run status group 0 (all jobs):
WRITE: bw=277MiB/s (291MB/s), 277MiB/s-277MiB/s (291MB/s-291MB/s), io=16.3GiB (17.5GB), run=60277-60277msec
Disk stats (read/write):
sda: ios=117/33425, merge=0/0, ticks=76/3276312, in_queue=3106450, util=99.43%
fio -ioengine=libaio -sync=1 -direct=1 -invalidate=1 -name=test -bs=4k -iodepth=1 -rw=randread -runtime=60 -filename=/dev/sda
test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.12
Starting 1 process
Jobs: 1 (f=1): [r(1)][100.0%][r=22.1MiB/s][r=5667 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=1148: Wed Sep 16 20:18:19 2020
read: IOPS=5185, BW=20.3MiB/s (21.2MB/s)(1215MiB/60001msec)
slat (usec): min=24, max=134, avg=29.69, stdev= 5.88
clat (usec): min=13, max=27815, avg=155.23, stdev=72.73
lat (usec): min=120, max=27982, avg=186.02, stdev=75.01
clat percentiles (usec):
| 1.00th=[ 97], 5.00th=[ 98], 10.00th=[ 99], 20.00th=[ 112],
| 30.00th=[ 143], 40.00th=[ 145], 50.00th=[ 147], 60.00th=[ 153],
| 70.00th=[ 159], 80.00th=[ 167], 90.00th=[ 221], 95.00th=[ 289],
| 99.00th=[ 343], 99.50th=[ 351], 99.90th=[ 383], 99.95th=[ 388],
| 99.99th=[ 396]
bw ( KiB/s): min=12808, max=23208, per=99.90%, avg=20719.71, stdev=3476.07, samples=119
iops : min= 3202, max= 5802, avg=5179.91, stdev=869.02, samples=119
lat (usec) : 20=0.01%, 50=0.01%, 100=11.41%, 250=80.32%, 500=8.27%
lat (usec) : 750=0.01%
lat (msec) : 2=0.01%, 50=0.01%
cpu : usr=4.18%, sys=31.36%, ctx=311343, majf=0, minf=22
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=311124,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=20.3MiB/s (21.2MB/s), 20.3MiB/s-20.3MiB/s (21.2MB/s-21.2MB/s), io=1215MiB (1274MB), run=60001-60001msec
Disk stats (read/write):
sda: ios=310369/0, merge=0/0, ticks=48674/0, in_queue=20, util=99.84%
fio -ioengine=libaio -sync=1 -direct=1 -invalidate=1 -name=test -bs=4k -iodepth=1 -rw=randwrite -runtime=60 -filename=/dev/sda
test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.12
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=2192KiB/s][w=548 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=1124: Wed Sep 16 20:16:02 2020
write: IOPS=551, BW=2207KiB/s (2260kB/s)(129MiB/60001msec); 0 zone resets
slat (usec): min=39, max=678, avg=81.91, stdev= 7.52
clat (usec): min=1061, max=10623, avg=1713.08, stdev=196.50
lat (usec): min=1639, max=10709, avg=1799.11, stdev=196.79
clat percentiles (usec):
| 1.00th=[ 1631], 5.00th=[ 1647], 10.00th=[ 1647], 20.00th=[ 1647],
| 30.00th=[ 1647], 40.00th=[ 1663], 50.00th=[ 1663], 60.00th=[ 1663],
| 70.00th=[ 1663], 80.00th=[ 1680], 90.00th=[ 2057], 95.00th=[ 2057],
| 99.00th=[ 2212], 99.50th=[ 2474], 99.90th=[ 2868], 99.95th=[ 6128],
| 99.99th=[ 6456]
bw ( KiB/s): min= 2160, max= 2320, per=99.98%, avg=2206.55, stdev=19.14, samples=120
iops : min= 540, max= 580, avg=551.50, stdev= 4.81, samples=120
lat (msec) : 2=88.03%, 4=11.89%, 10=0.08%, 20=0.01%
cpu : usr=1.03%, sys=4.56%, ctx=66286, majf=0, minf=21
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,33112,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=2207KiB/s (2260kB/s), 2207KiB/s-2207KiB/s (2260kB/s-2260kB/s), io=129MiB (136MB), run=60001-60001msec
Disk stats (read/write):
sda: ios=116/33012, merge=0/0, ticks=48/57647, in_queue=10, util=99.97%
microSD
fio -ioengine=libaio -direct=1 -invalidate=1 -name=test -bs=4M -iodepth=32 -rw=read -runtime=60 -filename=/dev/mmcblk0
test: (g=0): rw=read, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=32
fio-3.16
Starting 1 process
Jobs: 1 (f=1): [R(1)][4.2%][r=16.0MiB/s][r=4 IOPS][eta 23m:03s]
test: (groupid=0, jobs=1): err= 0: pid=2120: Wed Sep 16 18:20:31 2020
read: IOPS=10, BW=43.3MiB/s (45.4MB/s)(2660MiB/61469msec)
slat (msec): min=5, max=131, avg=90.24, stdev=13.51
clat (msec): min=1441, max=4215, avg=2845.52, stdev=214.83
lat (msec): min=1532, max=4308, avg=2935.76, stdev=221.38
clat percentiles (msec):
| 1.00th=[ 1737], 5.00th=[ 2802], 10.00th=[ 2836], 20.00th=[ 2836],
| 30.00th=[ 2869], 40.00th=[ 2869], 50.00th=[ 2869], 60.00th=[ 2869],
| 70.00th=[ 2869], 80.00th=[ 2869], 90.00th=[ 2903], 95.00th=[ 2903],
| 99.00th=[ 3675], 99.50th=[ 3943], 99.90th=[ 4212], 99.95th=[ 4212],
| 99.99th=[ 4212]
bw ( KiB/s): min= 8192, max=49152, per=99.32%, avg=44010.88, stdev=5224.40, samples=118
iops : min= 2, max= 12, avg=10.70, stdev= 1.29, samples=118
lat (msec) : 2000=1.95%, >=2000=98.05%
cpu : usr=0.02%, sys=0.62%, ctx=772, majf=0, minf=32791
IO depths : 1=0.2%, 2=0.3%, 4=0.6%, 8=1.2%, 16=2.4%, 32=95.3%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=99.8%, 8=0.0%, 16=0.0%, 32=0.2%, 64=0.0%, >=64=0.0%
issued rwts: total=665,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=32
Run status group 0 (all jobs):
READ: bw=43.3MiB/s (45.4MB/s), 43.3MiB/s-43.3MiB/s (45.4MB/s-45.4MB/s), io=2660MiB (2789MB), run=61469-61469msec
Disk stats (read/write):
mmcblk0: ios=5319/0, merge=0/0, ticks=7555533/0, in_queue=7544900, util=35.06%
fio -ioengine=libaio -direct=1 -invalidate=1 -name=test -bs=4M -iodepth=32 -rw=write -runtime=60 -filename=/dev/mmcblk0
test: (g=0): rw=write, bs=(R) 4096KiB-4096KiB, (W) 4096KiB-4096KiB, (T) 4096KiB-4096KiB, ioengine=libaio, iodepth=32
fio-3.16
Starting 1 process
Jobs: 1 (f=1): [W(1)][2.4%][eta 42m:01s]
test: (groupid=0, jobs=1): err= 0: pid=2145: Wed Sep 16 18:22:57 2020
write: IOPS=6, BW=25.5MiB/s (26.7MB/s)(1588MiB/62279msec); 0 zone resets
slat (usec): min=499, max=448407, avg=151333.36, stdev=67559.61
clat (msec): min=2174, max=7178, avg=4827.75, stdev=1185.82
lat (msec): min=2177, max=7445, avg=4979.09, stdev=1227.35
clat percentiles (msec):
| 1.00th=[ 2366], 5.00th=[ 3373], 10.00th=[ 3910], 20.00th=[ 4044],
| 30.00th=[ 4111], 40.00th=[ 4245], 50.00th=[ 4279], 60.00th=[ 4463],
| 70.00th=[ 5269], 80.00th=[ 6409], 90.00th=[ 6745], 95.00th=[ 6946],
| 99.00th=[ 7148], 99.50th=[ 7148], 99.90th=[ 7148], 99.95th=[ 7148],
| 99.99th=[ 7148]
bw ( KiB/s): min= 8192, max=40960, per=98.13%, avg=25622.02, stdev=9590.32, samples=117
iops : min= 2, max= 10, avg= 6.19, stdev= 2.32, samples=117
lat (msec) : >=2000=100.00%
cpu : usr=0.51%, sys=0.17%, ctx=497, majf=0, minf=22
IO depths : 1=0.3%, 2=0.5%, 4=1.0%, 8=2.0%, 16=4.0%, 32=92.2%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=99.7%, 8=0.0%, 16=0.0%, 32=0.3%, 64=0.0%, >=64=0.0%
issued rwts: total=0,397,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=32
Run status group 0 (all jobs):
WRITE: bw=25.5MiB/s (26.7MB/s), 25.5MiB/s-25.5MiB/s (26.7MB/s-26.7MB/s), io=1588MiB (1665MB), run=62279-62279msec
Disk stats (read/write):
mmcblk0: ios=0/3185, merge=0/0, ticks=0/7594168, in_queue=7587800, util=21.04%
fio -ioengine=libaio -sync=1 -direct=1 -invalidate=1 -name=test -bs=4k -iodepth=1 -rw=randread -runtime=60 -filename=/dev/mmcblk0
test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.16
Starting 1 process
Jobs: 1 (f=1): [r(1)][100.0%][r=7784KiB/s][r=1946 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=2168: Wed Sep 16 18:24:21 2020
read: IOPS=1875, BW=7500KiB/s (7680kB/s)(439MiB/60001msec)
slat (usec): min=30, max=173, avg=38.10, stdev= 1.42
clat (usec): min=212, max=51870, avg=492.15, stdev=723.30
lat (usec): min=251, max=51909, avg=530.71, stdev=723.32
clat percentiles (usec):
| 1.00th=[ 420], 5.00th=[ 424], 10.00th=[ 424], 20.00th=[ 424],
| 30.00th=[ 429], 40.00th=[ 429], 50.00th=[ 429], 60.00th=[ 429],
| 70.00th=[ 429], 80.00th=[ 429], 90.00th=[ 685], 95.00th=[ 824],
| 99.00th=[ 840], 99.50th=[ 848], 99.90th=[ 5473], 99.95th=[19268],
| 99.99th=[36439]
bw ( KiB/s): min= 4696, max= 7944, per=99.96%, avg=7497.35, stdev=661.73, samples=119
iops : min= 1174, max= 1986, avg=1874.34, stdev=165.43, samples=119
lat (usec) : 250=0.01%, 500=87.07%, 750=6.37%, 1000=6.36%
lat (msec) : 2=0.02%, 4=0.03%, 10=0.06%, 20=0.04%, 50=0.04%
lat (msec) : 100=0.01%
cpu : usr=1.28%, sys=5.51%, ctx=225012, majf=0, minf=25
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=112502,0,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
READ: bw=7500KiB/s (7680kB/s), 7500KiB/s-7500KiB/s (7680kB/s-7680kB/s), io=439MiB (461MB), run=60001-60001msec
Disk stats (read/write):
mmcblk0: ios=112481/0, merge=0/0, ticks=57454/0, in_queue=2180, util=96.77%
fio -ioengine=libaio -sync=1 -direct=1 -invalidate=1 -name=test -bs=4k -iodepth=1 -rw=randwrite -runtime=60 -filename=/dev/mmcblk0
test: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.16
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=804KiB/s][w=201 IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=2176: Wed Sep 16 18:25:56 2020
write: IOPS=163, BW=653KiB/s (669kB/s)(38.3MiB/60001msec); 0 zone resets
slat (usec): min=39, max=160, avg=40.88, stdev= 2.31
clat (usec): min=1391, max=137877, avg=6078.68, stdev=9078.56
lat (usec): min=1431, max=137918, avg=6120.11, stdev=9078.57
clat percentiles (msec):
| 1.00th=[ 4], 5.00th=[ 4], 10.00th=[ 5], 20.00th=[ 5],
| 30.00th=[ 5], 40.00th=[ 5], 50.00th=[ 5], 60.00th=[ 7],
| 70.00th=[ 7], 80.00th=[ 7], 90.00th=[ 7], 95.00th=[ 7],
| 99.00th=[ 13], 99.50th=[ 112], 99.90th=[ 125], 99.95th=[ 126],
| 99.99th=[ 138]
bw ( KiB/s): min= 456, max= 928, per=99.96%, avg=652.76, stdev=122.86, samples=119
iops : min= 114, max= 232, avg=163.18, stdev=30.73, samples=119
lat (msec) : 2=0.01%, 4=6.67%, 10=92.25%, 20=0.26%, 50=0.14%
lat (msec) : 100=0.05%, 250=0.61%
cpu : usr=0.14%, sys=0.48%, ctx=19598, majf=0, minf=23
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued rwts: total=0,9799,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=653KiB/s (669kB/s), 653KiB/s-653KiB/s (669kB/s-669kB/s), io=38.3MiB (40.1MB), run=60001-60001msec
Disk stats (read/write):
mmcblk0: ios=0/9795, merge=0/0, ticks=0/59750, in_queue=44232, util=65.49%