首页 > 其他分享 >调度器59—CONFIG_SCHED_DEBUG 的作用

调度器59—CONFIG_SCHED_DEBUG 的作用

时间:2023-09-22 22:45:24浏览次数:39  
标签:SCHED show sched sh debug 7110 DEBUG 59 cpu

一、使能 CONFIG_SCHED_DEBUG 提供的文件

1. /proc/pid/sched 文件

cat显示统计数据,echo清0,无论echo的是啥。

2. /proc/sys/kernel 下的

sched_min_granularity_ns
sched_latency_ns
sched_sync_hint_enable
sched_cstate_aware
sched_wakeup_granularity_ns
sched_tunable_scaling
sched_migration_cost_ns
sched_nr_migrate
sched_time_avg_ms
sched_schedstats
//若使能 CONFIG_IO_SCHED_OPTIMIZE 还有:
io_sched_optimize
//若使能 CONFIG_NUMA_BALANCING 还有:
numa_balancing_scan_delay_ms
numa_balancing_scan_period_min_ms
numa_balancing_scan_period_max_ms
numa_balancing_scan_size_mb
numa_balancing

3. /proc/sched_debug 文件


二、提供启动参数 sched_debug

1. 作用

static int __init sched_debug_setup(char *str) //topology.c
{
    sched_debug_enabled = true;

    return 0;
}
early_param("sched_debug", sched_debug_setup); //topology.c

sched_init_domains //topology.c
partition_sched_domains //topology.c
    build_sched_domains
        cpu_attach_domain //sched/topology.c
            sched_domain_debug //sched/topology.c
                if (sched_debug_enabled) {
                    printk(KERN_DEBUG "CPU%d attaching sched-domain(s):\n", cpu);
                    for (;;) {
                        if (sched_domain_debug_one(sd, cpu, level, sched_domains_tmpmask))
                            break;
                        level++;
                        sd = sd->parent;
                        if (!sd)
                            break;
                    }
                }


三、代码分析

1. 使能后编译住sched/debug.c

msm-4.14/kernel/sched$ cat Makefile
obj-$(CONFIG_SCHED_DEBUG) += debug.o //代码编译上会编译住debug.c

2. deadlne.c中的使用

/proc/sched_debug 
    sched_debug_show //sched/debug.c
        print_cpu //sched/debug.c
            print_dl_stats(*m, cpu) //deadline.c
                print_dl_rq(*m, cpu, *dl_rq)//sched/debug.c

3. sched/core.c 中的使用

sysrq_sched_debug_show() //sched/core.c

//调用路径:
    echo t > /proc/sysrq-trigger
        sysrq_showstate_op.handler //"show-task-states(t)" 对应的handler回调
            sysrq_handle_showstate //sysrq.c
            fn_show_state //tty/vt/keyboard.c
                show_state() //sched/debug.h 传参0
                sysrq_handle_showstate_blocked //sysrq.c 传参 TASK_UNINTERRUPTIBLE=2,无效
                    show_state_filter(ustate_filter) //sched/core.c 参数为0才执行
                        sysrq_sched_debug_show //sched/debug.c 使能 CONFIG_SCHED_DEBUG 才存在
                            for_each_online_cpu(cpu)
                                print_cpu(NULL, cpu);

echo t > /proc/sysrq-trigger 会触发打印每一个进程的内核栈,如下:

[  565.347148] (7)[7110:sh]fxp.monlolo S     0   838  1073  4078    623 0x00000000
[  565.347155] (7)[7110:sh]Call trace:
[  565.347159] (7)[7110:sh] __switch_to+0x118/0x134
[  565.347161] (7)[7110:sh] __schedule+0x7c0/0xa78
[  565.347167] (7)[7110:sh] schedule+0x70/0x90
[  565.347172] (7)[7110:sh] schedule_hrtimeout_range_clock+0xc0/0xe8
[  565.347174] (7)[7110:sh] schedule_hrtimeout_range+0x10/0x18
[  565.347180] (7)[7110:sh] SyS_epoll_wait+0x2ac/0x3c4
[  565.347184] (7)[7110:sh] SyS_epoll_pwait+0x108/0x168
[  565.347186] (7)[7110:sh] el0_svc_naked+0x34/0x38

若正在运行,会多打印出"running task",打印如下:

[  565.299661] (4)[7110:sh]UnityMain       R   running task        0 32556    28  3430    623 0x00000000
[  565.299664] (4)[7110:sh]Call trace:
[  565.299667] (4)[7110:sh] __switch_to+0x118/0x134
[  565.299670] (4)[7110:sh] __schedule+0x7c0/0xa78
[  565.299672] (4)[7110:sh] schedule+0x70/0x90
[  565.299675] (4)[7110:sh] futex_wait_queue_me+0xbc/0x108
[  565.299678] (4)[7110:sh] futex_wait+0x104/0x2d0
[  565.299681] (4)[7110:sh] do_futex+0x114/0x18e4
[  565.299684] (4)[7110:sh] SyS_futex+0x140/0x1ac
[  565.299687] (4)[7110:sh] el0_svc_naked+0x34/0x38

第一行各字段分别为:p->comm, task_state_to_char(p), "running task"(正在runing的有,sleep的无),0, p->nvcsw, p->nivcsw, p->pid, p->real_parent->pid, task_thread_info(p)->flags

# ps -e| grep fxp.monlolo
USER           PID  PPID     VSZ    RSS WCHAN            ADDR S NAME
system        4078   623 7980716 237860 SyS_epoll_wait      0 S com.fxp.monlolo

3. rt.c中的使用

print_rt_stats //rt.c

//调用路径:
            print_cpu //sched/debug.c 同上
                print_rt_stats(*m, cpu) //rt.c

 

四、补充

1. 上面说到了打印内核栈,这里增量两个打印每CPU调用栈和进程用户栈的方法

# echo l > /proc/sysrq-trigger 打印每个CPU当前调用栈

thaw-filesystems(j) show-backtrace-all-active-cpus(l) show-task-states(t) show-blocked-tasks(w)

# debuggerd -b <pid> 打印pid进程所有线程的用户栈

 

标签:SCHED,show,sched,sh,debug,7110,DEBUG,59,cpu
From: https://www.cnblogs.com/hellokitty2/p/17723544.html

相关文章

  • 【LeetCode】2591. 将钱分给最多的儿童
    描述给你一个整数money,表示你总共有的钱数(单位为美元)和另一个整数children,表示你要将钱分配给多少个儿童。你需要按照如下规则分配:所有的钱都必须被分配。每个儿童至少获得1美元。没有人获得4美元。请你按照上述规则分配金钱,并返回最多有多少个儿童获得恰好8......
  • 概述NCP81599MNTXG USB供电(PD)控制器,NCP1342DADBDGD1R2G离线转换器、500kHz 9SOIC
    一、NCP81599 USB供电4开关降压升压控制器NCP81599MNTXGUSB供电(PD)控制器是一款同步降压升压控制器,经过优化,可将电池电压或适配器电压转换为笔记本电脑、平板电脑和台式机系统以及许多其他使用USBPD标准和C−型电缆的消费电子设备所需的电源轨。NCP81599专为需要动态控制压摆......
  • 安装Dophin Scheduler 单机版
    官方文档:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8/guide/installation/standalone测试机器是UbuntuServer1.-下载dophinscheduler包wgethttps://dlcdn.apache.org/dolphinscheduler/3.1.8/apache-dolphinscheduler-3.1.8-bin.tar.gz这个地址根据下载页面获取下载......
  • 完美解决schedule.ScheduleValueError: Invalid time format
    完美解决schedule.ScheduleValueError:Invalidtimeformat文章目录报错问题解决方法声明报错问题之前在工作中遇到过这个坑,记录一下问题以及解决方法,不一定针对所有情况都能用,但是可以供大家参考。问题描述如下:schedule.ScheduleValueError:Invalidtimeformat时间表时间表......
  • 宏定义(Release/Debug)
    #defineLOG(x)std::cout<<"Hello"<<std::endl;在项目属性的c++->Preprocesser(预处理)->PreprocesserDefine中添加DR_MODULE,将configuration模式调为release#ifdefDR_MODULE#defineLOG(x) #else#defineLOG(x) std::cout<<"Hello&......
  • java.lang.IllegalArgumentException: Malformed \uxxxx encoding — 记一次mvnDebug
    本文唯一发布网站博客园(官网地址:https://www.cnblogs.com/)本文地址:https://www.cnblogs.com/zeromi/p/17716933.html前情提要有天需要写个东西,需要翻一下老代码,使用idea打开一个很久没打开的项目,然后不知道为啥到处飘红在查看了项目的ExternalLabraries列表,发现包都有,再看......
  • CF1599E Two Arrays
    Dq17y。考虑斐波那契通项公式,分别维护区间\(\left(\frac{1+\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)和\(\left(\frac{1-\sqrt5}{2}\right)^{a_{1,i}+a_{2,i}}\)的和。显然可以扩域,定义一个\(n=a+\sqrt5b\)的结构体即可。然后快速求斐波那契数列某项就可以直接快速幂了。......
  • 小夜灯CB证书CE证书LVD证书EMC证书FCC证书EN60598-2-12
    小夜灯检测报告找我办理。小夜灯GB7000.212报告,小夜灯IEC60598-2-12报告小夜灯EN60598-2-12报告小夜灯CE证书小夜灯FCC证书小夜灯ROHS证书小夜灯REACH证书小夜灯EN62471报告小夜灯SAA证书小夜灯CB证书小夜灯TUV证书小夜灯COC证书小夜灯LVD证书小夜灯EMC证书小夜灯I......
  • VSCode 报错,Unable to start debugging.(后面内容看图)
    今天用vscode写c++时,调试的时候,突然蹦出这个错误 之前我也以为是lanch.json的配置出错了但我并未更改我的配置啊,经过漫长的百度的之后,发现了原来是文件名不能设置为“中文”。。。。真的服了,以后再也不偷懒了。。。然后我也意识到备份的重要性,下面给出lanch.jason和tasks.......
  • python3的schedule模块
    一、schedule模块:1、基本操作:importscheduleimporttime defhello(name):  print("hello%s"%name) defjob():  print("I'mworking...") #每十分钟执行任务schedule.every(10).minutes.do(job)#每个小时执行任务schedule.every().hour.do(job)#......