加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 调试Linux调度程序

发布时间:2020-12-14 01:19:26 所属栏目:Linux 来源:网络整理
导读:我正在尝试实现一个新的内核调度程序作为我的学术项目.我知道这可能会减慢系统速度,但出于调试目的,我在上下文切换和调度功能中编写了一个printk语句,这样我就可以在dmesg输出中看到该事件.但是我没有在dmesg文件中获得任何输出.我试图在各个地方插入printk
我正在尝试实现一个新的内核调度程序作为我的学术项目.我知道这可能会减慢系统速度,但出于调试目的,我在上下文切换和调度功能中编写了一个printk语句,这样我就可以在dmesg输出中看到该事件.但是我没有在dmesg文件中获得任何输出.我试图在各个地方插入printk语句,但没有得到任何输出.我在做什么过程?是否有更好的工具或技术来调试这种任务?

解决方法

如何为 linux内核学习ftrace?使用它的方式略微取决于内核版本.只需阅读文件/ sys / kernel / debug / tracing / README以获取详细信息.

如果上面的目录不存在,那么您可能必须安装它:

mount -t debugfs nodev /sys/kernel/debug

然后编写一个bash shell脚本来生成用户空间跟踪:

#!/bin/bash
echo 0 >/sys/kernel/debug/tracing/tracing_enabled
echo 'sched_*' 'irq_*' > /sys/kernel/debug/tracing/set_ftrace_filter
echo function >/sys/kernel/debug/tracing/current_tracer
echo 1 >/sys/kernel/debug/tracing/tracing_enabled

ls -al /tmp/ 1>/dev/null &
ls -al /tmp/ 1>/dev/null &
ls -al /tmp/ 1>/dev/null &
ls -al /tmp/ 1>/dev/null &
ls -al /tmp/ 1>/dev/null &
ls -al /tmp/ 1>/dev/null &

sleep 3

echo 0 >/sys/kernel/debug/tracing/tracing_enabled

cat /sys/kernel/debug/tracing/trace

注意事项:

一个. Linux内核调度在内核源代码的kernel / sched目录中实现.一个例子是在fair.c中的CFQ.

湾读取文件并查找API,我们知道调度中涉及的相关API以“irq_”和“sched_”开头,因此我们将其编码到上面的shell脚本中.

C.我系统上面的shell脚本的输出位于下面(在大量截断“打开”相关函数之后,它被gzip压缩,大约21K行):

https://drive.google.com/file/d/0B1hg6_FvnEa8dDBMcl9tcEs2VEU/edit?usp=sharing

基本上,您可以看到哪个内核函数涉及哪个进程上下文.从内核函数的名称,您可以通过读取源代码继续跟踪.

您可以进一步谷歌的更多细节,例如:

http://tthtlc.wordpress.com/2013/11/19/using-ftrace-to-understanding-linux-kernel-api/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读