2021-07-09 05:06:55

by zhouchuangao

[permalink] [raw]
Subject: [PATCH] kernel/sched/core: Print the time when the process entered the D state

Sometimes we need to trigger /proc/sysrq-trigger to view the information
of the D state process in the system.
e.g:
echo w > /proc/sysrq-trigger

Here we print the scheduling time of the process, which is convenient
for us to judge the state of the system and for debugging.

Signed-off-by: zhouchuangao <[email protected]>
---
kernel/sched/core.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index cf16f8f..e03474d 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -8154,9 +8154,10 @@ void sched_show_task(struct task_struct *p)
if (pid_alive(p))
ppid = task_pid_nr(rcu_dereference(p->real_parent));
rcu_read_unlock();
- pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx\n",
+ pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx sched:%llu\n",
free, task_pid_nr(p), ppid,
- (unsigned long)task_thread_info(p)->flags);
+ (unsigned long)task_thread_info(p)->flags,
+ p->sched_info.last_arrival);

print_worker_info(KERN_INFO, p);
print_stop_info(KERN_INFO, p);
--
2.7.4


2021-07-09 06:58:11

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] kernel/sched/core: Print the time when the process entered the D state

Hi zhouchuangao,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tip/sched/core]
[also build test ERROR on tip/master linux/master linus/master v5.13 next-20210709]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/zhouchuangao/kernel-sched-core-Print-the-time-when-the-process-entered-the-D-state/20210709-130636
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 031e3bd8986fffe31e1ddbf5264cccfe30c9abd7
config: i386-tinyconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/287f10f679a0c30c4ac57abb8a36e698619554d5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review zhouchuangao/kernel-sched-core-Print-the-time-when-the-process-entered-the-D-state/20210709-130636
git checkout 287f10f679a0c30c4ac57abb8a36e698619554d5
# save the attached .config to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash kernel/sched/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

kernel/sched/core.c: In function 'ttwu_stat':
kernel/sched/core.c:3267:13: warning: variable 'rq' set but not used [-Wunused-but-set-variable]
3267 | struct rq *rq;
| ^~
In file included from include/linux/kernel.h:17,
from arch/x86/include/asm/percpu.h:27,
from arch/x86/include/asm/current.h:6,
from include/linux/sched.h:12,
from include/linux/kthread.h:6,
from include/trace/events/sched.h:8,
from kernel/sched/core.c:10:
kernel/sched/core.c: In function 'sched_show_task':
>> kernel/sched/core.c:8158:16: error: 'struct sched_info' has no member named 'last_arrival'
8158 | p->sched_info.last_arrival);
| ^
include/linux/printk.h:385:26: note: in definition of macro 'pr_cont'
385 | printk(KERN_CONT fmt, ##__VA_ARGS__)
| ^~~~~~~~~~~


vim +8158 kernel/sched/core.c

8134
8135 void sched_show_task(struct task_struct *p)
8136 {
8137 unsigned long free = 0;
8138 int ppid;
8139
8140 if (!try_get_task_stack(p))
8141 return;
8142
8143 pr_info("task:%-15.15s state:%c", p->comm, task_state_to_char(p));
8144
8145 if (task_is_running(p))
8146 pr_cont(" running task ");
8147 #ifdef CONFIG_DEBUG_STACK_USAGE
8148 free = stack_not_used(p);
8149 #endif
8150 ppid = 0;
8151 rcu_read_lock();
8152 if (pid_alive(p))
8153 ppid = task_pid_nr(rcu_dereference(p->real_parent));
8154 rcu_read_unlock();
8155 pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx sched:%llu\n",
8156 free, task_pid_nr(p), ppid,
8157 (unsigned long)task_thread_info(p)->flags,
> 8158 p->sched_info.last_arrival);
8159
8160 print_worker_info(KERN_INFO, p);
8161 print_stop_info(KERN_INFO, p);
8162 show_stack(p, NULL, KERN_INFO);
8163 put_task_stack(p);
8164 }
8165 EXPORT_SYMBOL_GPL(sched_show_task);
8166

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (3.54 kB)
.config.gz (7.24 kB)
Download all attachments

2021-07-09 07:49:57

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH] kernel/sched/core: Print the time when the process entered the D state

Hi zhouchuangao,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tip/sched/core]
[also build test ERROR on tip/master linux/master linus/master v5.13 next-20210709]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/zhouchuangao/kernel-sched-core-Print-the-time-when-the-process-entered-the-D-state/20210709-130636
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 031e3bd8986fffe31e1ddbf5264cccfe30c9abd7
config: riscv-randconfig-r022-20210709 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8d69635ed9ecf36fd0ca85906bfde17949671cbe)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install riscv cross compiling tool for clang build
# apt-get install binutils-riscv64-linux-gnu
# https://github.com/0day-ci/linux/commit/287f10f679a0c30c4ac57abb8a36e698619554d5
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review zhouchuangao/kernel-sched-core-Print-the-time-when-the-process-entered-the-D-state/20210709-130636
git checkout 287f10f679a0c30c4ac57abb8a36e698619554d5
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=riscv SHELL=/bin/bash kernel/sched/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

kernel/sched/core.c:3201:6: warning: no previous prototype for function 'sched_set_stop_task' [-Wmissing-prototypes]
void sched_set_stop_task(int cpu, struct task_struct *stop)
^
kernel/sched/core.c:3201:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void sched_set_stop_task(int cpu, struct task_struct *stop)
^
static
kernel/sched/core.c:6049:35: warning: no previous prototype for function 'schedule_user' [-Wmissing-prototypes]
asmlinkage __visible void __sched schedule_user(void)
^
kernel/sched/core.c:6049:22: note: declare 'static' if the function is not intended to be used outside of this translation unit
asmlinkage __visible void __sched schedule_user(void)
^
static
>> kernel/sched/core.c:8158:17: error: no member named 'last_arrival' in 'struct sched_info'
p->sched_info.last_arrival);
~~~~~~~~~~~~~ ^
include/linux/printk.h:385:26: note: expanded from macro 'pr_cont'
printk(KERN_CONT fmt, ##__VA_ARGS__)
^~~~~~~~~~~
2 warnings and 1 error generated.


vim +8158 kernel/sched/core.c

8134
8135 void sched_show_task(struct task_struct *p)
8136 {
8137 unsigned long free = 0;
8138 int ppid;
8139
8140 if (!try_get_task_stack(p))
8141 return;
8142
8143 pr_info("task:%-15.15s state:%c", p->comm, task_state_to_char(p));
8144
8145 if (task_is_running(p))
8146 pr_cont(" running task ");
8147 #ifdef CONFIG_DEBUG_STACK_USAGE
8148 free = stack_not_used(p);
8149 #endif
8150 ppid = 0;
8151 rcu_read_lock();
8152 if (pid_alive(p))
8153 ppid = task_pid_nr(rcu_dereference(p->real_parent));
8154 rcu_read_unlock();
8155 pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx sched:%llu\n",
8156 free, task_pid_nr(p), ppid,
8157 (unsigned long)task_thread_info(p)->flags,
> 8158 p->sched_info.last_arrival);
8159
8160 print_worker_info(KERN_INFO, p);
8161 print_stop_info(KERN_INFO, p);
8162 show_stack(p, NULL, KERN_INFO);
8163 put_task_stack(p);
8164 }
8165 EXPORT_SYMBOL_GPL(sched_show_task);
8166

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]


Attachments:
(No filename) (4.19 kB)
.config.gz (34.96 kB)
Download all attachments

2021-07-09 10:08:20

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH] kernel/sched/core: Print the time when the process entered the D state

On Thu, Jul 08, 2021 at 10:05:59PM -0700, zhouchuangao wrote:
> Sometimes we need to trigger /proc/sysrq-trigger to view the information
> of the D state process in the system.
> e.g:
> echo w > /proc/sysrq-trigger
>
> Here we print the scheduling time of the process, which is convenient
> for us to judge the state of the system and for debugging.
>
> Signed-off-by: zhouchuangao <[email protected]>
> ---
> kernel/sched/core.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index cf16f8f..e03474d 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -8154,9 +8154,10 @@ void sched_show_task(struct task_struct *p)
> if (pid_alive(p))
> ppid = task_pid_nr(rcu_dereference(p->real_parent));
> rcu_read_unlock();
> - pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx\n",
> + pr_cont(" stack:%5lu pid:%5d ppid:%6d flags:0x%08lx sched:%llu\n",
> free, task_pid_nr(p), ppid,
> - (unsigned long)task_thread_info(p)->flags);
> + (unsigned long)task_thread_info(p)->flags,
> + p->sched_info.last_arrival);

How's that not a compile fail for SCHED_INFO=n ?