ok2.0现在可以不用boot分区直接一根到底使用btrfs文件系统了。
所以今天重装了下ok,然后测试了下磁盘的io性能,以下测试均是在同一块sata接口的古老ssd硬盘上测试的。
一、测试结果
二、简要总结
- exfat毫无疑问性能是最差的
- ext4就比较有意思了,大部分时间还是比btrfs快,但其对dd命令分块大小比较敏感,分块变化时写入速度波动较大
- btrfs大部分时间比ext4慢,读速度差不了太多,但是写速度分块小的时候差别还是稍大的
- btrfs在分块很小的时候要比ext4快很多
- btrfs在分块大的时候不一定比ext4差了#
三、个人愚见(轻喷)
- 个人认为如果作为系统分区,因为有成千上万的软件,这些软件作者不一样,在io的时候很可能分块大小什么的不一样,万一有些情况碰到恰好是ext4比较弱的分块,那么此时速度就会很慢,甚至系统卡顿。
- 操作系统有木桶效应,往往是否流畅取决于最短的那根木板,所以使用btrfs或xfs做根目录文件系统体验上要优于ext4。
- 即使我们不使用btrfs的高级性能,仅仅当作普通硬盘来使用,他对不同类型io操作的适应性显然要优于ext4。
- btrfs对ssd专门的优化对硬盘的寿命也有帮助,越好的硬盘其根etx4的差距越不容易感知。
- 综上,拥抱btrfs吧,ext4真的有点老了。
四、测速脚本
#!/usr/bin/env python3
import os
bs_list_K = [str(2**i) for i in range(13)]
bs_list_M = [str(i) for i in range(1, 9)]
sum = 1024
print(f"\n分块传输大小:1KB 到 {bs_list_K[-1]}KB")
print("测试中,请耐心等待...")
for bs in bs_list_K:
count = int(sum*1024/int(bs))
in_result = os.popen("dd if=/dev/zero of=test.dd oflag=direct bs=" +
str(bs)+"K count="+str(count)+" 2>&1").read()
in_result = in_result.split("\n")[-2].split(",")[-1]
out_result = os.popen("dd if=test.dd of=/dev/null iflag=direct bs=" +
str(bs)+"K count="+str(count)+" 2>&1").read()
out_result = out_result.split("\n")[-2].split(",")[-1]
print(bs+" KB\t"+"写入: "+in_result+"\t读取: "+out_result)
sum = 1024
print(f"\n分块总传输大小:1MB 到 {bs_list_M[-1]}MB")
print("测试中,请耐心等待...")
for bs in bs_list_M:
count = int(sum/int(bs))
in_result = os.popen("dd if=/dev/zero of=test.dd oflag=direct bs=" +
str(bs)+"M count="+str(count)+" 2>&1").read()
in_result = in_result.split("\n")[-2].split(",")[-1]
out_result = os.popen("dd if=test.dd of=/dev/null iflag=direct bs=" +
str(bs)+"M count="+str(count)+" 2>&1").read()
out_result = out_result.split("\n")[-2].split(",")[-1]
print(bs+" MB\t"+"写入: "+in_result+"\t读取: "+out_result)
os.system("rm test.dd")