linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
@ 2021-11-26  7:13 Ian Rogers
  2022-01-12 17:22 ` Ian Rogers
  0 siblings, 1 reply; 6+ messages in thread
From: Ian Rogers @ 2021-11-26  7:13 UTC (permalink / raw)
  To: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Arnaldo Carvalho de Melo, Kan Liang,
	Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin,
	linux-perf-users, linux-kernel
  Cc: eranian, Ian Rogers

This patch changes MetricExpr to be written out in the same case. This
enables events in metrics to use modifiers like 'G' which currently
yield parse errors when made lower case. To keep tests passing the
literal #smt_on is compared in a non-case sensitive way - #SMT_on is
present in at least SkylakeX metrics.

This patch is on top of:
https://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com/

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/pmu-events/jevents.c | 2 --
 tools/perf/util/expr.c          | 2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
index 2e7c4153875b..1a57c3f81dd4 100644
--- a/tools/perf/pmu-events/jevents.c
+++ b/tools/perf/pmu-events/jevents.c
@@ -672,8 +672,6 @@ static int json_events(const char *fn,
 				addfield(map, &je.metric_constraint, "", "", val);
 			} else if (json_streq(map, field, "MetricExpr")) {
 				addfield(map, &je.metric_expr, "", "", val);
-				for (s = je.metric_expr; *s; s++)
-					*s = tolower(*s);
 			} else if (json_streq(map, field, "ArchStdEvent")) {
 				addfield(map, &arch_std, "", "", val);
 				for (s = arch_std; *s; s++)
diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
index cdbab4f959fe..5cd6b9ff2489 100644
--- a/tools/perf/util/expr.c
+++ b/tools/perf/util/expr.c
@@ -397,7 +397,7 @@ double expr__get_literal(const char *literal)
 	static struct cpu_topology *topology;
 	double result = NAN;
 
-	if (!strcmp("#smt_on", literal)) {
+	if (!strcasecmp("#smt_on", literal)) {
 		result =  smt_on() > 0 ? 1.0 : 0.0;
 		goto out;
 	}
-- 
2.34.0.rc2.393.gf8c9666880-goog


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
  2021-11-26  7:13 [RFC PATCH] perf pmu-events: Don't lower case MetricExpr Ian Rogers
@ 2022-01-12 17:22 ` Ian Rogers
  2022-01-12 17:45   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 6+ messages in thread
From: Ian Rogers @ 2022-01-12 17:22 UTC (permalink / raw)
  To: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Arnaldo Carvalho de Melo, Kan Liang,
	Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin,
	linux-perf-users, linux-kernel
  Cc: eranian

On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote:
>
> This patch changes MetricExpr to be written out in the same case. This
> enables events in metrics to use modifiers like 'G' which currently
> yield parse errors when made lower case. To keep tests passing the
> literal #smt_on is compared in a non-case sensitive way - #SMT_on is
> present in at least SkylakeX metrics.

Ping.

Thanks,
Ian

> This patch is on top of:
> https://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com/
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/perf/pmu-events/jevents.c | 2 --
>  tools/perf/util/expr.c          | 2 +-
>  2 files changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
> index 2e7c4153875b..1a57c3f81dd4 100644
> --- a/tools/perf/pmu-events/jevents.c
> +++ b/tools/perf/pmu-events/jevents.c
> @@ -672,8 +672,6 @@ static int json_events(const char *fn,
>                                 addfield(map, &je.metric_constraint, "", "", val);
>                         } else if (json_streq(map, field, "MetricExpr")) {
>                                 addfield(map, &je.metric_expr, "", "", val);
> -                               for (s = je.metric_expr; *s; s++)
> -                                       *s = tolower(*s);
>                         } else if (json_streq(map, field, "ArchStdEvent")) {
>                                 addfield(map, &arch_std, "", "", val);
>                                 for (s = arch_std; *s; s++)
> diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
> index cdbab4f959fe..5cd6b9ff2489 100644
> --- a/tools/perf/util/expr.c
> +++ b/tools/perf/util/expr.c
> @@ -397,7 +397,7 @@ double expr__get_literal(const char *literal)
>         static struct cpu_topology *topology;
>         double result = NAN;
>
> -       if (!strcmp("#smt_on", literal)) {
> +       if (!strcasecmp("#smt_on", literal)) {
>                 result =  smt_on() > 0 ? 1.0 : 0.0;
>                 goto out;
>         }
> --
> 2.34.0.rc2.393.gf8c9666880-goog
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
  2022-01-12 17:22 ` Ian Rogers
@ 2022-01-12 17:45   ` Arnaldo Carvalho de Melo
  2022-01-12 17:50     ` Arnaldo Carvalho de Melo
  2022-01-12 17:53     ` Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-01-12 17:45 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Kan Liang, Peter Zijlstra, Ingo Molnar,
	Mark Rutland, Alexander Shishkin, linux-perf-users, linux-kernel,
	eranian

Em Wed, Jan 12, 2022 at 09:22:51AM -0800, Ian Rogers escreveu:
> On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote:
> >
> > This patch changes MetricExpr to be written out in the same case. This
> > enables events in metrics to use modifiers like 'G' which currently
> > yield parse errors when made lower case. To keep tests passing the
> > literal #smt_on is compared in a non-case sensitive way - #SMT_on is
> > present in at least SkylakeX metrics.
> 
> Ping.

I tried applying 20211124001231.3277836-1-irogers@google.com on top of
your perf_cpu series, it failed, will check.

BTW, I got the two other patches in that series:

⬢[acme@toolbox perf]$ git log --oneline -2
6dd8646939a770e4 (HEAD -> perf/core) perf tools: Probe non-deprecated sysfs path 1st
0ce05781f4905fcf perf tools: Fix SMT fallback with large core counts
⬢[acme@toolbox perf]$

- Arnaldo
 
> Thanks,
> Ian
> 
> > This patch is on top of:
> > https://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com/
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> >  tools/perf/pmu-events/jevents.c | 2 --
> >  tools/perf/util/expr.c          | 2 +-
> >  2 files changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
> > index 2e7c4153875b..1a57c3f81dd4 100644
> > --- a/tools/perf/pmu-events/jevents.c
> > +++ b/tools/perf/pmu-events/jevents.c
> > @@ -672,8 +672,6 @@ static int json_events(const char *fn,
> >                                 addfield(map, &je.metric_constraint, "", "", val);
> >                         } else if (json_streq(map, field, "MetricExpr")) {
> >                                 addfield(map, &je.metric_expr, "", "", val);
> > -                               for (s = je.metric_expr; *s; s++)
> > -                                       *s = tolower(*s);
> >                         } else if (json_streq(map, field, "ArchStdEvent")) {
> >                                 addfield(map, &arch_std, "", "", val);
> >                                 for (s = arch_std; *s; s++)
> > diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
> > index cdbab4f959fe..5cd6b9ff2489 100644
> > --- a/tools/perf/util/expr.c
> > +++ b/tools/perf/util/expr.c
> > @@ -397,7 +397,7 @@ double expr__get_literal(const char *literal)
> >         static struct cpu_topology *topology;
> >         double result = NAN;
> >
> > -       if (!strcmp("#smt_on", literal)) {
> > +       if (!strcasecmp("#smt_on", literal)) {
> >                 result =  smt_on() > 0 ? 1.0 : 0.0;
> >                 goto out;
> >         }
> > --
> > 2.34.0.rc2.393.gf8c9666880-goog
> >

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
  2022-01-12 17:45   ` Arnaldo Carvalho de Melo
@ 2022-01-12 17:50     ` Arnaldo Carvalho de Melo
  2022-01-12 17:53     ` Arnaldo Carvalho de Melo
  1 sibling, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-01-12 17:50 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Kan Liang, Peter Zijlstra, Ingo Molnar,
	Mark Rutland, Alexander Shishkin, linux-perf-users, linux-kernel,
	eranian

Em Wed, Jan 12, 2022 at 02:45:07PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Wed, Jan 12, 2022 at 09:22:51AM -0800, Ian Rogers escreveu:
> > On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote:
> > >
> > > This patch changes MetricExpr to be written out in the same case. This
> > > enables events in metrics to use modifiers like 'G' which currently
> > > yield parse errors when made lower case. To keep tests passing the
> > > literal #smt_on is compared in a non-case sensitive way - #SMT_on is
> > > present in at least SkylakeX metrics.
> > 
> > Ping.
> 
> I tried applying 20211124001231.3277836-1-irogers@google.com on top of
> your perf_cpu series, it failed, will check.
> 
> BTW, I got the two other patches in that series:
> 
> ⬢[acme@toolbox perf]$ git log --oneline -2
> 6dd8646939a770e4 (HEAD -> perf/core) perf tools: Probe non-deprecated sysfs path 1st
> 0ce05781f4905fcf perf tools: Fix SMT fallback with large core counts
> ⬢[acme@toolbox perf]$

It was due to that cpu__max_present_cpu().cpu;

Fixed, applied.

- Arnaldo

diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
index e808738493e219fd..c94fb9bef919f5cb 100644
--- a/tools/perf/util/expr.c
+++ b/tools/perf/util/expr.c
@@ -405,12 +405,17 @@ double expr_id_data__source_count(const struct expr_id_data *data)
 double expr__get_literal(const char *literal)
 {
 	static struct cpu_topology *topology;
+	double result = NAN;
 
-	if (!strcmp("#smt_on", literal))
-		return smt_on() > 0 ? 1.0 : 0.0;
+	if (!strcmp("#smt_on", literal)) {
+		result = smt_on() > 0 ? 1.0 : 0.0;
+		goto out;
+	}
 
-	if (!strcmp("#num_cpus", literal))
-		return cpu__max_present_cpu().cpu;
+	if (!strcmp("#num_cpus", literal)) {
+		result = cpu__max_present_cpu().cpu;
+		goto out;
+	}
 
 	/*
 	 * Assume that topology strings are consistent, such as CPUs "0-1"
@@ -422,16 +427,24 @@ double expr__get_literal(const char *literal)
 		topology = cpu_topology__new();
 		if (!topology) {
 			pr_err("Error creating CPU topology");
-			return NAN;
+			goto out;
 		}
 	}
-	if (!strcmp("#num_packages", literal))
-		return topology->package_cpus_lists;
-	if (!strcmp("#num_dies", literal))
-		return topology->die_cpus_lists;
-	if (!strcmp("#num_cores", literal))
-		return topology->core_cpus_lists;
+	if (!strcmp("#num_packages", literal)) {
+		result = topology->package_cpus_lists;
+		goto out;
+	}
+	if (!strcmp("#num_dies", literal)) {
+		result = topology->die_cpus_lists;
+		goto out;
+	}
+	if (!strcmp("#num_cores", literal)) {
+		result = topology->core_cpus_lists;
+		goto out;
+	}
 
 	pr_err("Unrecognized literal '%s'", literal);
-	return NAN;
+out:
+	pr_debug2("literal: %s = %f\n", literal, result);
+	return result;
 }

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
  2022-01-12 17:45   ` Arnaldo Carvalho de Melo
  2022-01-12 17:50     ` Arnaldo Carvalho de Melo
@ 2022-01-12 17:53     ` Arnaldo Carvalho de Melo
  2022-01-12 17:58       ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-01-12 17:53 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Kan Liang, Peter Zijlstra, Ingo Molnar,
	Mark Rutland, Alexander Shishkin, linux-perf-users, linux-kernel,
	eranian

Em Wed, Jan 12, 2022 at 02:45:07PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Wed, Jan 12, 2022 at 09:22:51AM -0800, Ian Rogers escreveu:
> > On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote:
> > >
> > > This patch changes MetricExpr to be written out in the same case. This
> > > enables events in metrics to use modifiers like 'G' which currently
> > > yield parse errors when made lower case. To keep tests passing the
> > > literal #smt_on is compared in a non-case sensitive way - #SMT_on is
> > > present in at least SkylakeX metrics.
> > 
> > Ping.
> 
> I tried applying 20211124001231.3277836-1-irogers@google.com on top of
> your perf_cpu series, it failed, will check.
> 
> BTW, I got the two other patches in that series:
> 
> ⬢[acme@toolbox perf]$ git log --oneline -2
> 6dd8646939a770e4 (HEAD -> perf/core) perf tools: Probe non-deprecated sysfs path 1st
> 0ce05781f4905fcf perf tools: Fix SMT fallback with large core counts
> ⬢[acme@toolbox perf]$

Ok, I have that one now on, but could Andi or somebody else that works
more frequently with that code provide an Acked-by or Reviewed-by?

- Arnaldo
 
> - Arnaldo
>  
> > Thanks,
> > Ian
> > 
> > > This patch is on top of:
> > > https://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com/
> > >
> > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > ---
> > >  tools/perf/pmu-events/jevents.c | 2 --
> > >  tools/perf/util/expr.c          | 2 +-
> > >  2 files changed, 1 insertion(+), 3 deletions(-)
> > >
> > > diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
> > > index 2e7c4153875b..1a57c3f81dd4 100644
> > > --- a/tools/perf/pmu-events/jevents.c
> > > +++ b/tools/perf/pmu-events/jevents.c
> > > @@ -672,8 +672,6 @@ static int json_events(const char *fn,
> > >                                 addfield(map, &je.metric_constraint, "", "", val);
> > >                         } else if (json_streq(map, field, "MetricExpr")) {
> > >                                 addfield(map, &je.metric_expr, "", "", val);
> > > -                               for (s = je.metric_expr; *s; s++)
> > > -                                       *s = tolower(*s);
> > >                         } else if (json_streq(map, field, "ArchStdEvent")) {
> > >                                 addfield(map, &arch_std, "", "", val);
> > >                                 for (s = arch_std; *s; s++)
> > > diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
> > > index cdbab4f959fe..5cd6b9ff2489 100644
> > > --- a/tools/perf/util/expr.c
> > > +++ b/tools/perf/util/expr.c
> > > @@ -397,7 +397,7 @@ double expr__get_literal(const char *literal)
> > >         static struct cpu_topology *topology;
> > >         double result = NAN;
> > >
> > > -       if (!strcmp("#smt_on", literal)) {
> > > +       if (!strcasecmp("#smt_on", literal)) {
> > >                 result =  smt_on() > 0 ? 1.0 : 0.0;
> > >                 goto out;
> > >         }
> > > --
> > > 2.34.0.rc2.393.gf8c9666880-goog
> > >
> 
> -- 
> 
> - Arnaldo

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC PATCH] perf pmu-events: Don't lower case MetricExpr
  2022-01-12 17:53     ` Arnaldo Carvalho de Melo
@ 2022-01-12 17:58       ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 6+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-01-12 17:58 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Andi Kleen, Jiri Olsa, Namhyung Kim, John Garry, Kajol Jain,
	Paul A . Clarke, Kan Liang, Peter Zijlstra, Ingo Molnar,
	Mark Rutland, Alexander Shishkin, linux-perf-users, linux-kernel,
	eranian

Em Wed, Jan 12, 2022 at 02:53:42PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Wed, Jan 12, 2022 at 02:45:07PM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Wed, Jan 12, 2022 at 09:22:51AM -0800, Ian Rogers escreveu:
> > > On Thu, Nov 25, 2021 at 11:13 PM Ian Rogers <irogers@google.com> wrote:
> > > >
> > > > This patch changes MetricExpr to be written out in the same case. This
> > > > enables events in metrics to use modifiers like 'G' which currently
> > > > yield parse errors when made lower case. To keep tests passing the
> > > > literal #smt_on is compared in a non-case sensitive way - #SMT_on is
> > > > present in at least SkylakeX metrics.
> > > 
> > > Ping.
> > 
> > I tried applying 20211124001231.3277836-1-irogers@google.com on top of
> > your perf_cpu series, it failed, will check.
> > 
> > BTW, I got the two other patches in that series:
> > 
> > ⬢[acme@toolbox perf]$ git log --oneline -2
> > 6dd8646939a770e4 (HEAD -> perf/core) perf tools: Probe non-deprecated sysfs path 1st
> > 0ce05781f4905fcf perf tools: Fix SMT fallback with large core counts
> > ⬢[acme@toolbox perf]$
> 
> Ok, I have that one now on, but could Andi or somebody else that works
> more frequently with that code provide an Acked-by or Reviewed-by?

Its there since since MetricExpr was introduced:

commit 00636c3b48e8acac2acd2601274c6eab4ecf8201
Author: Andi Kleen <ak@linux.intel.com>
Date:   Mon Mar 20 13:17:07 2017 -0700

    perf pmu: Support MetricExpr header in JSON event list

    Add support for parsing the MetricExpr header in the JSON event lists
    and storing them in the alias structure.

    Used in the next patch.

    v2: Change DividedBy to MetricExpr
    v3: Really catch all uses of DividedBy

    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Link: http://lkml.kernel.org/r/20170320201711.14142-10-andi@firstfloor.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>o

-----------------------------

There is no explanation as to why it should be lowercased, and Ian's
reason not to lowercase it is valid, not to lose information, so I'll
apply the patch, please holler if there is some other subtlety I'm
missing...

- Arnaldo

> > > > This patch is on top of:
> > > > https://lore.kernel.org/lkml/20211124001231.3277836-1-irogers@google.com/
> > > >
> > > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > > ---
> > > >  tools/perf/pmu-events/jevents.c | 2 --
> > > >  tools/perf/util/expr.c          | 2 +-
> > > >  2 files changed, 1 insertion(+), 3 deletions(-)
> > > >
> > > > diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
> > > > index 2e7c4153875b..1a57c3f81dd4 100644
> > > > --- a/tools/perf/pmu-events/jevents.c
> > > > +++ b/tools/perf/pmu-events/jevents.c
> > > > @@ -672,8 +672,6 @@ static int json_events(const char *fn,
> > > >                                 addfield(map, &je.metric_constraint, "", "", val);
> > > >                         } else if (json_streq(map, field, "MetricExpr")) {
> > > >                                 addfield(map, &je.metric_expr, "", "", val);
> > > > -                               for (s = je.metric_expr; *s; s++)
> > > > -                                       *s = tolower(*s);
> > > >                         } else if (json_streq(map, field, "ArchStdEvent")) {
> > > >                                 addfield(map, &arch_std, "", "", val);
> > > >                                 for (s = arch_std; *s; s++)
> > > > diff --git a/tools/perf/util/expr.c b/tools/perf/util/expr.c
> > > > index cdbab4f959fe..5cd6b9ff2489 100644
> > > > --- a/tools/perf/util/expr.c
> > > > +++ b/tools/perf/util/expr.c
> > > > @@ -397,7 +397,7 @@ double expr__get_literal(const char *literal)
> > > >         static struct cpu_topology *topology;
> > > >         double result = NAN;
> > > >
> > > > -       if (!strcmp("#smt_on", literal)) {
> > > > +       if (!strcasecmp("#smt_on", literal)) {
> > > >                 result =  smt_on() > 0 ? 1.0 : 0.0;
> > > >                 goto out;
> > > >         }
> > > > --
> > > > 2.34.0.rc2.393.gf8c9666880-goog
> > > >
> > 
> > -- 
> > 
> > - Arnaldo
> 
> -- 
> 
> - Arnaldo

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-01-12 17:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-26  7:13 [RFC PATCH] perf pmu-events: Don't lower case MetricExpr Ian Rogers
2022-01-12 17:22 ` Ian Rogers
2022-01-12 17:45   ` Arnaldo Carvalho de Melo
2022-01-12 17:50     ` Arnaldo Carvalho de Melo
2022-01-12 17:53     ` Arnaldo Carvalho de Melo
2022-01-12 17:58       ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).