/ 详情

[openEuler-20.03] nvme 4k随机写测试性能只有centos 50%

Fixing
Bug
Opened this issue  
2021-06-02 15:30

【标题描述】能够简要描述问题:说明什么场景下,做了什么操作,出现什么问题(尽量使用正向表达方式)
fio随机写测试nvme磁盘性能只有centos的50%
【环境信息】
硬件信息:
1)x86 物理机 (AMD Ryzen 5 3600 6-Core Processor)
25:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. Device 2263 (rev 03)

软件信息:
1) OS版本及分支
openEuler release 20.03 (LTS-SP1)
2) 内核信息
4.19.90-2012.4.0.0053.x86_64
3) 发现问题的组件版本信息
如果有特殊组网,请提供网络拓扑图
【问题复现步骤】
具体操作步骤
fio -filename=/dev/nvme0n1p6 -direct=1 -iodepth 128 -thread -rw=write -ioengine=libaio -bs=4m -size=30G -numjobs=1 -runtime=60 -group_reporting -name=rand_100write_4k
出现概率(是否必现,概率性错误) 必现
【预期结果】
描述预期结果,可以通过对比新老版本获取
centos测试结果(CentOS Linux release 7.7.1908 (Core) 3.10.0-1062.el7.x86_64)
吞吐 1487MB/s IOPS=355
输入图片说明
【实际结果】
IO吞吐只有596MB/s IOPS=142
输入图片说明
【附件信息】
比如系统message日志/组件日志、dump信息、图片等

Attachments

Comments (10)

lisiheng created缺陷
lisiheng set related repository to openEuler/kernel
展开全部操作日志

Hey lisiheng, Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot .
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.

openeuler-ci-bot added
 
sig/Kernel
label
lisiheng changed description
lisiheng changed title
成坚 (CHENG Jian) changed title

使用 blktrace 抓起日志, blktrace分析IO

上次发的数据我已经分析过了,现象有点奇怪,初步怀疑是和io完成的cpu分布有关
Centos环境下发io cpu统计:

    861 0
    695 1
    223 10
     58 11
   1270 2
    370 3
    902 4
    926 5
    574 6
    904 7
    445 8
    498 9

Centos环境完成io cpu统计:

  27526 0
  22183 1
   7136 10
   1830 11
  40667 2
  11864 3
  28126 4
  28885 5
  18463 6
  28913 7
  14267 8
  15946 9

Openeuler环境下发io cpu统计:

   2301 0
   3679 1
     28 10
    801 2
    383 6
    216 7
    223 8
    111 9

Openeuelr环境完成io cpu统计:

  72709 0
 117712 1
    919 10
  24668 2
  12217 6
   6924 7
   7116 8
   3557 9

CentOS 这边下发和完成分布比较平均,而 openEuler 这边则会集中在个别 cpu 上(cpu0 cpu1占了绝大多数)

进一步确认

  1. 确认fio版本一致为 3.7
  2. 绑核测试单进程 + 低并发 + 256k io (-numjobs=1 -iodepth=1 -bs=256k)
    openEuler测试结果 646MB/s
    centos测试结果 1315MB/s
    测试命令
taskset -c 3 fio -filename=/dev/nvme0n1p4 -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=256k -size=30G -numjobs=1 -runtime=60 -group_reporting -name=rand_100write_4k

256K 会被拆分成 2个 128 的.

  1. 绑核测试单进程 + 低并发 + 4k 小 io (-numjobs=1 -iodepth=1 -bs=4k)
    openEuler测试结果 240MB/s
    centos测试结果 223MB/s
    测试命令
taskset -c 3 fio -filename=/dev/nvme0n1p4 -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=4k -size=30G -numjobs=1 -runtime=60 -group_reporting -name=rand_100write_4k
成坚 (CHENG Jian) changed issue state from 待办的 to 修复中

简化测试用例,单进程同步io绑核测试可以复现问题

fio配置:

[global]
filename=/dev/nvme0n1p6
name=nvme_test
direct=1
ioengine=psync
size=90G
time_based
group_reporting

[test]
numjobs=1
iodepth=1
bs=128k
rw=write
runtime=60
cpus_allowed=3
cpus_allowed_policy=split

测试现象为带宽在 400Mib/s - 1500 Mib/s 之间波动

利用bpftrace脚本抓取io延时,确认主要延时消耗在D2C阶段(io下发到驱动到io完成的时间)

bpftrace脚本
输入图片说明

抓取结果

利用bpftrace脚本抓取系统处理的中断类型以及数量

bpftrace脚本
输入图片说明

未进行fio测试时,系统只有少量的网卡中断:
输入图片说明

当IO压力较大时,系统中除了io中断外,网卡中断的数量也显著提高了
输入图片说明

暂时不确定网卡中断和io压力的关系,需要进一步分析

通过关闭网卡复测确认没有其他中断影响,问题仍然存在

通过在OpenEuler环境和CentOS环境升级成相同的5.4内核,现象仍然存在(OpenEuler环境性能波动大,CentOS环境无波动),排除内核问题

怀疑与cpu有关,
利用cpupower工具确认openEuler性能波动期间,cpu频率没有变化
尝试了cpu的所有四种模式,performance,Userspace,powersave,ondemand,conservative 现象仍然一致

Sign in to comment

状态
Assignees
Projects
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
Duration (hours)
确定
参与者(4)
5329419 openeuler ci bot 1578984659