[PATCH v2] sched: print information about scheduling granularity

Sergey Dyasli posted 1 patch 4 years ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/xen tags/patchew/20200420130650.14341-1-sergey.dyasli@citrix.com
Maintainers: George Dunlap <george.dunlap@citrix.com>, Dario Faggioli <dfaggioli@suse.com>, Juergen Gross <jgross@suse.com>
There is a newer version of this series
xen/common/sched/cpupool.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
[PATCH v2] sched: print information about scheduling granularity
Posted by Sergey Dyasli 4 years ago
Currently it might be not obvious which scheduling mode (e.g. core-
scheduling) is being used by the scheduler. Alleviate this by printing
additional information about the selected granularity per-cpupool.

Note: per-cpupool granularity selection is not implemented yet.
      The single global value is being used for each cpupool.

Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
---
v2:
- print information on a separate line
- use per-cpupool granularity
- updated commit message

CC: Juergen Gross <jgross@suse.com>
CC: Dario Faggioli <dfaggioli@suse.com>
CC: George Dunlap <george.dunlap@citrix.com>
CC: Jan Beulich <jbeulich@suse.com>
---
 xen/common/sched/cpupool.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/xen/common/sched/cpupool.c b/xen/common/sched/cpupool.c
index d40345b585..68106f6c15 100644
--- a/xen/common/sched/cpupool.c
+++ b/xen/common/sched/cpupool.c
@@ -40,6 +40,30 @@ static DEFINE_SPINLOCK(cpupool_lock);
 static enum sched_gran __read_mostly opt_sched_granularity = SCHED_GRAN_cpu;
 static unsigned int __read_mostly sched_granularity = 1;
 
+static void sched_gran_print(enum sched_gran mode, unsigned int gran)
+{
+    char *str = "";
+
+    switch ( mode )
+    {
+    case SCHED_GRAN_cpu:
+        str = "cpu";
+        break;
+    case SCHED_GRAN_core:
+        str = "core";
+        break;
+    case SCHED_GRAN_socket:
+        str = "socket";
+        break;
+    default:
+        ASSERT_UNREACHABLE();
+        break;
+    }
+
+    printk("Scheduling granularity: %s, %u CPU%s per sched-resource\n",
+           str, gran, gran == 1 ? "" : "s");
+}
+
 #ifdef CONFIG_HAS_SCHED_GRANULARITY
 static int __init sched_select_granularity(const char *str)
 {
@@ -115,6 +139,7 @@ static void __init cpupool_gran_init(void)
         warning_add(fallback);
 
     sched_granularity = gran;
+    sched_gran_print(opt_sched_granularity, sched_granularity);
 }
 
 unsigned int cpupool_get_granularity(const struct cpupool *c)
@@ -911,6 +936,7 @@ void dump_runq(unsigned char key)
     {
         printk("Cpupool %d:\n", (*c)->cpupool_id);
         printk("Cpus: %*pbl\n", CPUMASK_PR((*c)->cpu_valid));
+        sched_gran_print((*c)->gran, cpupool_get_granularity(*c));
         schedule_dump(*c);
     }
 
-- 
2.17.1


Re: [PATCH v2] sched: print information about scheduling granularity
Posted by Jan Beulich 4 years ago
On 20.04.2020 15:06, Sergey Dyasli wrote:
> --- a/xen/common/sched/cpupool.c
> +++ b/xen/common/sched/cpupool.c
> @@ -40,6 +40,30 @@ static DEFINE_SPINLOCK(cpupool_lock);
>  static enum sched_gran __read_mostly opt_sched_granularity = SCHED_GRAN_cpu;
>  static unsigned int __read_mostly sched_granularity = 1;
>  
> +static void sched_gran_print(enum sched_gran mode, unsigned int gran)
> +{
> +    char *str = "";

const please (could easily be added while committing of course)

Jan

Re: [PATCH v2] sched: print information about scheduling granularity
Posted by Jürgen Groß 4 years ago
On 20.04.20 15:06, Sergey Dyasli wrote:
> Currently it might be not obvious which scheduling mode (e.g. core-
> scheduling) is being used by the scheduler. Alleviate this by printing
> additional information about the selected granularity per-cpupool.
> 
> Note: per-cpupool granularity selection is not implemented yet.
>        The single global value is being used for each cpupool.

This is misleading. You are using the per-cpupool values, but they
are all the same right now.

> 
> Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
> ---
> v2:
> - print information on a separate line
> - use per-cpupool granularity
> - updated commit message
> 
> CC: Juergen Gross <jgross@suse.com>
> CC: Dario Faggioli <dfaggioli@suse.com>
> CC: George Dunlap <george.dunlap@citrix.com>
> CC: Jan Beulich <jbeulich@suse.com>
> ---
>   xen/common/sched/cpupool.c | 26 ++++++++++++++++++++++++++
>   1 file changed, 26 insertions(+)
> 
> diff --git a/xen/common/sched/cpupool.c b/xen/common/sched/cpupool.c
> index d40345b585..68106f6c15 100644
> --- a/xen/common/sched/cpupool.c
> +++ b/xen/common/sched/cpupool.c
> @@ -40,6 +40,30 @@ static DEFINE_SPINLOCK(cpupool_lock);
>   static enum sched_gran __read_mostly opt_sched_granularity = SCHED_GRAN_cpu;
>   static unsigned int __read_mostly sched_granularity = 1;
>   
> +static void sched_gran_print(enum sched_gran mode, unsigned int gran)
> +{
> +    char *str = "";
> +
> +    switch ( mode )
> +    {
> +    case SCHED_GRAN_cpu:
> +        str = "cpu";
> +        break;
> +    case SCHED_GRAN_core:
> +        str = "core";
> +        break;
> +    case SCHED_GRAN_socket:
> +        str = "socket";
> +        break;
> +    default:
> +        ASSERT_UNREACHABLE();
> +        break;
> +    }

With this addition it might make sense to have an array indexed by
mode to get the string. This array could then be used in
sched_select_granularity(), too.

> +
> +    printk("Scheduling granularity: %s, %u CPU%s per sched-resource\n",
> +           str, gran, gran == 1 ? "" : "s");
> +}
> +
>   #ifdef CONFIG_HAS_SCHED_GRANULARITY
>   static int __init sched_select_granularity(const char *str)
>   {
> @@ -115,6 +139,7 @@ static void __init cpupool_gran_init(void)
>           warning_add(fallback);
>   
>       sched_granularity = gran;
> +    sched_gran_print(opt_sched_granularity, sched_granularity);
>   }
>   
>   unsigned int cpupool_get_granularity(const struct cpupool *c)
> @@ -911,6 +936,7 @@ void dump_runq(unsigned char key)
>       {
>           printk("Cpupool %d:\n", (*c)->cpupool_id);
>           printk("Cpus: %*pbl\n", CPUMASK_PR((*c)->cpu_valid));
> +        sched_gran_print((*c)->gran, cpupool_get_granularity(*c));
>           schedule_dump(*c);
>       }


Juergen


Re: [PATCH v2] sched: print information about scheduling granularity
Posted by Sergey Dyasli 3 years, 12 months ago
On 20/04/2020 14:45, Jürgen Groß wrote:
> On 20.04.20 15:06, Sergey Dyasli wrote:
>> Currently it might be not obvious which scheduling mode (e.g. core-
>> scheduling) is being used by the scheduler. Alleviate this by printing
>> additional information about the selected granularity per-cpupool.
>>
>> Note: per-cpupool granularity selection is not implemented yet.
>>        The single global value is being used for each cpupool.
> 
> This is misleading. You are using the per-cpupool values, but they
> are all the same right now.

This is what I meant by my note, but I might need to improve the wording
since the current one looks ambiguous to you.

> 
>>
>> Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
>> ---
>> v2:
>> - print information on a separate line
>> - use per-cpupool granularity
>> - updated commit message
>>
>> CC: Juergen Gross <jgross@suse.com>
>> CC: Dario Faggioli <dfaggioli@suse.com>
>> CC: George Dunlap <george.dunlap@citrix.com>
>> CC: Jan Beulich <jbeulich@suse.com>
>> ---
>>   xen/common/sched/cpupool.c | 26 ++++++++++++++++++++++++++
>>   1 file changed, 26 insertions(+)
>>
>> diff --git a/xen/common/sched/cpupool.c b/xen/common/sched/cpupool.c
>> index d40345b585..68106f6c15 100644
>> --- a/xen/common/sched/cpupool.c
>> +++ b/xen/common/sched/cpupool.c
>> @@ -40,6 +40,30 @@ static DEFINE_SPINLOCK(cpupool_lock);
>>   static enum sched_gran __read_mostly opt_sched_granularity = SCHED_GRAN_cpu;
>>   static unsigned int __read_mostly sched_granularity = 1;
>> +static void sched_gran_print(enum sched_gran mode, unsigned int gran)
>> +{
>> +    char *str = "";
>> +
>> +    switch ( mode )
>> +    {
>> +    case SCHED_GRAN_cpu:
>> +        str = "cpu";
>> +        break;
>> +    case SCHED_GRAN_core:
>> +        str = "core";
>> +        break;
>> +    case SCHED_GRAN_socket:
>> +        str = "socket";
>> +        break;
>> +    default:
>> +        ASSERT_UNREACHABLE();
>> +        break;
>> +    }
> 
> With this addition it might make sense to have an array indexed by
> mode to get the string. This array could then be used in
> sched_select_granularity(), too.

I had thoughts about that, and with your suggestion looks like I need
to go and do it.

> 
>> +
>> +    printk("Scheduling granularity: %s, %u CPU%s per sched-resource\n",
>> +           str, gran, gran == 1 ? "" : "s");
>> +}
>> +
>>   #ifdef CONFIG_HAS_SCHED_GRANULARITY
>>   static int __init sched_select_granularity(const char *str)
>>   {
>> @@ -115,6 +139,7 @@ static void __init cpupool_gran_init(void)
>>           warning_add(fallback);
>>       sched_granularity = gran;
>> +    sched_gran_print(opt_sched_granularity, sched_granularity);
>>   }
>>   unsigned int cpupool_get_granularity(const struct cpupool *c)
>> @@ -911,6 +936,7 @@ void dump_runq(unsigned char key)
>>       {
>>           printk("Cpupool %d:\n", (*c)->cpupool_id);
>>           printk("Cpus: %*pbl\n", CPUMASK_PR((*c)->cpu_valid));
>> +        sched_gran_print((*c)->gran, cpupool_get_granularity(*c));
>>           schedule_dump(*c);
>>       }
> 

--
Thanks,
Sergey