Linux 上 SSD 随机读取性能不佳

Linux 上 SSD 随机读取性能不佳

我最近买了一个英特尔 320 系列固态硬盘 (http://www.intel.com/content/www/us/en/solid-state-drives/solid-state-drives-320-series.html),并且我在实现广告中所说的随机 4K 读取 38K IOPS 时遇到了困难。

无论是使用 fio 还是我自己编写的程序,我都看到大约 6K IOPS。这几乎就像 IO 深度大小无关紧要,内核每次都尝试获取一个块。

例子:

cat job
[randread]
filename=/dev/sdb2
rw=randread
size=128m
blocksize=4k
ioengine=libaio
iodepth=64
direct=1

sudo fio job
randread: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=64
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [25423K/0K /s] [6207/0 iops] [eta 00m:00s]
randread: (groupid=0, jobs=1): err= 0: pid=4678
  read : io=131072KB, bw=24852KB/s, iops=6213, runt=  5274msec
    slat (usec): min=1, max=94, avg= 5.00, stdev= 2.88
    clat (usec): min=312, max=13070, avg=10290.25, stdev=1399.78
    bw (KB/s) : min=23192, max=24464, per=97.08%, avg=24125.60, stdev=383.70
  cpu          : usr=15.74%, sys=22.57%, ctx=31642, majf=0, minf=88
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=99.8%
     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.1%, >=64=0.0%
     issued r/w: total=32768/0, short=0/0
     lat (usec): 500=0.01%, 750=0.01%, 1000=0.03%
     lat (msec): 2=0.05%, 4=0.10%, 10=20.10%, 20=79.70%

Run status group 0 (all jobs):
   READ: io=131072KB, aggrb=24852KB/s, minb=25448KB/s, maxb=25448KB/s, mint=5274msec, maxt=5274msec

Disk stats (read/write):
  sdb: ios=30453/0, merge=850/0, ticks=319060/0, in_queue=319060, util=98.09%

该系统是 Linux 2.6.35-31-generic #63-Ubuntu SMP Mon Nov 28 19:29:10 UTC 2011 x86_64 GNU/Linux。上面的 /dev/sdb2 是 80GB SSD 上的一个 ~10GB 分区。fio 是版本 1.38。

非常感谢您提出可能存在问题的想法。

答案1

38000 IOPS 规范适用于顺序 I/O。

根据英特尔自己的 320 系列规格,对于真正的(全盘跨度)随机 4Kb 读取,最高可达 6600 IOPS。

答案2

您确定您的控制器处于 AHCI 模式吗?哎呀,不是传统模式。如果不是,请将其切换以获取控制器可以提供的完整 SATA 指令集。

相关内容