小文件IO性能测试

这是最近工作中投入精力较大的一个任务,今天是周五,本来想着放松一下,好好吃吃东西发发呆,可是自己这段时间内很多时间都被这件事情占用,不想着做一些什么让它留个回忆来纪念这段时间我的时间花费实在是不甘心呀。

目标:300k + 50k 同时读写,通过san开出的iscsi盘向存储读写,在千兆网传输下达到的100M左右

基础环境:

  • 一号设备(服务器):4个SSD+20个HDD的ceph环境,其中4块ssd每块需要带5个hdd盘的db和wal分区
  • 在一号部署san环境,开出一个块设备通过iscsi映射到到二号设备
  • 二号发现一号,并建立iscsi连接,并向映射进来的块存储进行读写测试

以上描述大家肯定有很多不懂得地方,这里简单讲解一下我测试用到的一些与性能有关的东西

  • hdd硬盘驱动器,就是我们常用的电脑C盘、D盘存储 ,读写速度较慢且无法直接在磁盘上提升。关于硬盘工作原理可以参考浅析硬盘工作原理
  • ssd固态存储,速度较快
  • ceph环境下的io是通过存储系统每秒的op操作数目向存储盘读写,每个op都会处理ceph数据存储的操作,总体是进行数据迁移,主osd向向副本osd分发备份事务(大哥向小弟布置任务),之后收集反馈(检查任务完成度),保证备份按照规则执行,最后收尾。这里缩短op操作时间来提升ceph底层io性能,难度较大,需要修改ceph源码
  • san环境的封装,san环境底层通过hsand服务进行数据读写,交给ceph底层块设备
  • 网络封装,二号设备执行的读写需要通过网络传输到一号设备,再次执行一号设备san的hsand服务
  • 二号设备缓存的影响(我们测试的是磁盘读写,所以路径尽要可能接近磁盘,这里可将dirty_ratio和dirty_background_ratio两个系统缓存参数,即数据先按照dirty_background_ratio比例写入内存,然后超过这个参数的百分比才开始向存储中写),关于调整这两个参数的方式可以用命令systcl -v vm.dirty_ratio=10sysctl -v vm.dirty_background_ratio=5,同时该参数存放的位置在/proc/sys/vm/dirty_ratio目录下,文章dirty_ratio与dirty_background_ratio的区别可以帮助你更好理解
  • 执行的并发数是否达到cpu处理上限,(测试过程中短时间达到这样的结果是可以的,不要让cpu长时间处于满负荷状态)

开始执行io测试

我总共使用三个工具尝试 rbd benchfio、我们同事的io工具small_io_tool

rbd bench(先避开网络因素和san环境的封装因素,直接向本地盘刷数据)

使用前提:

  • 更换了一下写的方式,在一号设备本地开一块块设备
  • 使用工具进行写(rbd bench-write),这个工具只支持写

rbd bench-write <RBD image name>语法如下,可带参数,这里可以参考ceph环境如何创建rbd块设备

  • --io-size:单位 byte,默认 4096 bytes = 4K
  • --io-threads:线程数,默认 16
  • --io-total:总写入字节,单位为字节,默认 1024M
  • --io-pattern <seq|rand>:写模式,默认为 seq 即顺序写

执行

  • 总共10000个300k文件,20个线程
[root@node1 ~]# rbd bench-write rbd_write --io-size 307200 --io-threads 20 --io-total 3072000000 -p data
rbd: bench-write is deprecated, use rbd bench --io-type write ...
bench  type write io_size 307200 io_threads 20 bytes 3072000000 pattern sequential
  SEC       OPS   OPS/SEC   BYTES/SEC
    1      1121   1117.59  343322870.14
    2      2274   1144.97  351734522.67
    3      3165   1061.21  326004583.38
    4      4392   1102.90  338809422.25
    5      5643   1132.43  347883129.70
    6      6915   1163.65  357473906.08
    7      8168   1179.55  362357900.50
    8      9381   1243.27  381931405.42
elapsed:     8  ops:    10000  ops/sec:  1175.75  bytes/sec: 361190697.81

大概写速度达到了361M/s,1175ops/s 这个数据可以作为存储本身的写速度参考。

  • 总共10000个300k文件,100个线程
[root@node1 ~]# rbd bench-write rbd_write --io-size 307200 --io-threads 100 --io-total 3072000000 -p data
rbd: bench-write is deprecated, use rbd bench --io-type write ...
bench  type write io_size 307200 io_threads 100 bytes 3072000000 pattern sequential
  SEC       OPS   OPS/SEC   BYTES/SEC
    1      1610   1708.05  524713872.88
    2      3040   1569.89  482271716.97
    3      4686   1594.22  489743682.92
    4      6317   1603.63  492635848.49
    5      7962   1611.33  494999281.40
    6      9434   1564.90  480738745.75
elapsed:     6  ops:    10000  ops/sec:  1573.70  bytes/sec: 483440698.21

建议大家在写数据同时通过iotop,iostat,vmstat,top等命令查看系统状态如下,这里是用20个线程写的数据:

iostat -k  -x 2
//我们平时关注的主要是 device 的await ,同时device 的io速度为rkb,wkb参数  
//显然我们sd盘符作后端存储的写速度是接近我们rbd bench-write输出的值
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.66    0.00    9.74    7.28    0.00   74.32

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    19.00    0.00   15.50     0.00   148.00    19.10     0.00    0.06    0.00    0.06   0.06   0.10
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00   133.00    0.00  149.50     0.00 53848.00   720.37     1.95   13.07    0.00   13.07   2.66  39.75
sdc               0.00    95.00    0.00  257.50     0.00 44502.00   345.65     0.64    2.48    0.00    2.48   0.75  19.30
sdd               0.00    94.50    0.00  239.50     0.00 43548.00   363.66     0.75    3.13    0.00    3.13   0.77  18.55
sde               0.00    69.50    0.00  188.00     0.00 32966.00   350.70     0.57    3.01    0.00    3.01   0.81  15.25
sdf               0.00   109.50    0.00  236.00     0.00 47104.00   399.19     0.92    3.91    0.00    3.91   0.89  20.95
sdg               0.00    96.00    0.00  234.50     0.00 43008.00   366.81     0.73    3.11    0.00    3.11   0.86  20.20
sdh               0.00   118.00    0.00  251.50     0.00 52744.00   419.44     3.12   13.00    0.00   13.00   1.86  46.85
sdi               0.00    85.50    0.00  173.00     0.00 35822.00   414.13     1.50    8.65    0.00    8.65   1.56  27.05
sdj               0.00   150.50    0.00  326.50     0.00 63638.00   389.82     1.24    3.81    0.00    3.81   0.84  27.55
sdk               0.00    87.50    0.00  206.50     0.00 38912.00   376.87     0.66    3.18    0.00    3.18   0.79  16.25
sdl               0.00   130.00    0.00  326.50     0.00 59542.00   364.73     1.17    3.57    0.00    3.57   0.83  27.20
sdm               0.00   115.50    0.00  282.50     0.00 50492.00   357.47     0.83    2.88    0.00    2.88   0.80  22.55
sdn               0.00   116.50    0.00  251.00     0.00 50308.00   400.86     1.18    4.71    0.00    4.71   0.94  23.50
sdo               0.00    71.00    0.00  189.50     0.00 33068.00   349.00     0.52    2.76    0.00    2.76   0.77  14.60
sdp               0.00    98.00    0.00  251.50     0.00 45344.00   360.59     0.72    2.87    0.00    2.87   0.75  18.80
sdq               0.00    97.00    0.00  208.50     0.00 41260.00   395.78     0.83    4.00    0.00    4.00   0.84  17.45
sdr               0.00    77.50    0.00  203.00     0.00 36020.00   354.88     0.56    2.75    0.00    2.75   0.79  15.95
sds               0.00    82.00    0.00  159.00     0.00 32768.00   412.18     0.67    4.19    0.00    4.19   0.92  14.65
sdt               0.00    95.00    0.00  207.00     0.00 40960.00   395.75     0.80    3.88    0.00    3.88   0.86  17.75
sdu               0.00   136.00    0.00  305.00     0.00 58838.00   385.82     1.11    3.62    0.00    3.62   0.81  24.85
sdv               0.00     0.00    2.50 1119.00   100.00  4756.00     8.66     0.19    0.17    2.20    0.17   0.14  15.20
sdw               0.00     0.00    0.00 1025.50     0.00  3070.00     5.99     0.15    0.15    0.00    0.15   0.14  14.25
sdx               0.00     0.00    0.00 1151.00     0.00  3330.00     5.79     0.18    0.15    0.00    0.15   0.14  16.35
sdy               0.00     0.00    0.00  932.50     0.00  2768.00     5.94     0.14    0.15    0.00    0.15   0.14  13.35 
//iotop查看系统线程数,同样也会输出磁盘读写速度,这次就有点快了,速度变动较大,可以多次尝试,记录的时候取较为稳定的一段速率。
[root@node1 ~]# iotop
Total DISK READ :       0.00 B/s | Total DISK WRITE :     962.01 M/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:     963.28 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                               
15791 be/4 ceph        0.00 B/s  948.80 K/s  0.00 % 17.11 % ceph-osd -f --cluster ceph --id 8 --setuser ceph --setgroup ceph [bstore_kv_sync]
22597 be/4 ceph        0.00 B/s  865.39 K/s  0.00 % 12.04 % ceph-osd -f --cluster ceph --id 12 --setuser ceph --setgroup ceph [bstore_kv_sync]
  358 be/4 ceph        0.00 B/s  733.32 K/s  0.00 % 11.66 % ceph-osd -f --cluster ceph --id 6 --setuser ceph --setgroup ceph [bstore_kv_sync] 
23827 be/4 ceph        0.00 B/s  663.81 K/s  0.00 % 11.18 % ceph-osd -f --cluster ceph --id 15 --setuser ceph --setgroup ceph [bstore_kv_sync]
15070 be/4 ceph        0.00 B/s  496.99 K/s  0.00 % 10.77 % ceph-osd -f --cluster ceph --id 11 --setuser ceph --setgroup ceph [bstore_kv_sync]
16259 be/4 ceph        0.00 B/s  802.83 K/s  0.00 % 10.71 % ceph-osd -f --cluster ceph --id 16 --setuser ceph --setgroup ceph [bstore_kv_sync]
10249 be/4 ceph        0.00 B/s  934.90 K/s  0.00 % 10.35 % ceph-osd -f --cluster ceph --id 10 --setuser ceph --setgroup ceph [bstore_kv_sync]
 7537 be/4 ceph        0.00 B/s  653.38 K/s  0.00 %  9.98 % ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph [bstore_kv_sync] 
26524 be/4 ceph        0.00 B/s  344.07 K/s  0.00 %  9.96 % ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph [bstore_kv_sync] 
 7866 be/4 ceph        0.00 B/s  708.99 K/s  0.00 %  9.79 % ceph-osd -f --cluster ceph --id 19 --setuser ceph --setgroup ceph [bstore_kv_sync]
 4523 be/4 ceph        0.00 B/s  865.39 K/s  0.00 %  9.10 % ceph-osd -f --cluster ceph --id 14 --setuser ceph --setgroup ceph [bstore_kv_sync]
18974 be/4 ceph        0.00 B/s  858.44 K/s  0.00 %  8.63 % ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph [bstore_kv_sync] 
13833 be/4 ceph        0.00 B/s  521.32 K/s  0.00 %  8.36 % ceph-osd -f --cluster ceph --id 9 --setuser ceph --setgroup ceph [bstore_kv_sync] 
16777 be/4 ceph        0.00 B/s  649.91 K/s  0.00 %  7.96 % ceph-osd -f --cluster ceph --id 17 --setuser ceph --setgroup ceph [bstore_kv_sync]
17246 be/4 ceph        0.00 B/s  354.50 K/s  0.00 %  7.30 % ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph [bstore_kv_sync] 
  635 be/4 ceph        0.00 B/s  636.01 K/s  0.00 %  7.18 % ceph-osd -f --cluster ceph --id 7 --setuser ceph --setgroup ceph [bstore_kv_sync] 
16302 be/4 ceph        0.00 B/s  538.69 K/s  0.00 %  6.69 % ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph [bstore_kv_sync] 
29237 be/4 ceph        0.00 B/s  514.37 K/s  0.00 %  6.35 % ceph-osd -f --cluster ceph --id 13 --setuser ceph --setgroup ceph [bstore_kv_sync]
 5465 be/4 ceph        0.00 B/s  340.59 K/s  0.00 %  4.22 % ceph-osd -f --cluster ceph --id 18 --setuser ceph --setgroup ceph [bstore_kv_sync]

后面的两个命令top主要是查看cpu以及各个进程状态,vmstat查看各个进程内存状态,当然也有cpu和io状态,用法可以去网络上查看,但是本次我们主要查看以上两个命令结果,因为内存占用较少,(内存相关两个参数做了调整)。

后续文章会对fio性能压力进行描述,总之,性能测试过程中寻找瓶颈以及后续的调优一定要在理解自己业务场景的前提下进行,否则只是盲目学习工具,没有什么经验或者调优思路的提升的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容