一次PM_RUNTIME引起IO性能问题的排查记录

问题描述

设备内核从3.x升级至5.x后,同样的系统配置,磁盘,用fio测试时发现IO性能下降,在ssd上体现尤为明显。

用blktrace+btt分析,对比老内核,新内核在D2C过程有较大延时,初步定位是新内核驱动侧的差异导致。

 

磁盘驱动流程梳理

blktrace的D2C,表示IO请求从block层提交给驱动到收到数据IO请求结束的过程。设备使用的是usb外接磁盘,IO请求在block层以下各驱动层接口大致如下。

IO请求通过调用q->mq_ops->queue_rq()进入scsi层处理,在scsi层将io请求转换为最终的scsi命令,再调用host->hostt->queuecommand()进入底层驱动层处理,在usb层将scsi命令转换为usb数据并发送至usb总线,等待数据返回。

数据返回时触发中断,通过一路上注册的回调函数处理数据,并通知block层IO请求已完成。

由分析可知IO请求在D2C流程中会经过scsi,usb,中断等模块,将这些模块的事件加入跟踪进一步分析D2C延时。

Ftrace分析

使用ftrace接口,打开blk tracer基础上,增加下列事件跟踪,对比新老内核D2C流程的延时差异。

echo 1 > /sys/kernel/debug/tracing/events/scsi/scsi_dispatch_cmd_start/enable

ec

### 回答1: pm_runtime_mark_last_busy 是 Linux 内核中的一个函数,用于在执行完成设备操作后通知系统设备处于繁忙状态。 在设备操作期间,内核通常会将设备设置为忙状态以防止其他驱动程序或进程试图对其进行 I/O 操作。当设备操作完成后,内核需要通知系统设备处于繁忙状态,并保持设备的状态,以使其他驱动程序或进程知道设备还在使用,不要在此期间对设备进行操作。 pm_runtime_mark_last_busy 函数就是用于实现这一目的的。它将设备runtime_pm 状态标记为 busy,并记录最后一次访问设备的时间戳。这将通知内核设备仍处于繁忙状态,并防止其他进程或驱动程序尝试对其进行操作。 总之,pm_runtime_mark_last_busy 函数是用于通知系统设备正在被使用的内核函数,它可以保持设备在忙状态,并在需要时提供状态信息。这有助于确保内核中的其他模块不会对正在使用的设备进行意外的读写操作,并增强了设备的安全性和可靠性。 ### 回答2: pm_runtime_mark_last_busy()是一个函数,通常在驱动程序中调用,用来表明某个设备已经完成最后一次请求并且进入了空闲状态。这个函数可以避免设备进入节能模式时被客户端误认为已经空闲,导致设备无法进入真正的节能模式。 在 Linux 内核中,设备的节能管理是通过使用 Runtime PM (RPM) 框架来实现的。当设备空闲时,RPM 框架会将设备状态切换为最低功耗状态以达到省电的目的。pm_runtime_mark_last_busy()函数就是在这个过程中使用的工具函数之一。 这个函数的具体作用是告诉 RPM 框架,设备已经完成了最后一次请求并进入了空闲状态,可以切换到节能模式了。如果设备在调用 pm_runtime_mark_last_busy() 前还有未完成的请求,那么 RPM 框架会继续等待这些请求完成,直到设备进入了空闲状态才会切换到节能模式。 需要注意的是,虽然想要节能是一个好的目的,但是过于频繁地调用 pm_runtime_mark_last_busy() 函数也会增加功耗,因为每次调用都会导致系统从挂起状态中恢复,执行一些额外的操作,最后再次进入挂起状态。因此,开发者应该在必要的时候才调用这个函数。 ### 回答3: pm_runtime_mark_last_busy是指用于Linux内核的函数,在设备完成使用后,向系统请求延长设备休眠时间的函数。在设备使用过程中,系统会不断地检查设备是否可以休眠,如果设备在一段时间内没有使用则会进入休眠状态以节省电能。但是如果设备已经使用完毕,但尚未调用pm_runtime_mark_last_busy函数,则会导致设备过早地进入休眠状态,可能会引起系统崩溃或设备无法正常工作的问题pm_runtime_mark_last_busy函数的作用是向系统发送一个消息,告诉系统设备已经完成了所有任务,系统应该在设备休眠之前延长设备的休眠时间。这样可以确保设备在真正完成了任务后再进入休眠状态,避免由于设备还有未完成任务而导致的问题。在Linux内核中,使用pm_runtime_mark_last_busy函数是一种良好的编程实践,可以提高设备性能和稳定性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值