unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* MPS command line parameters
@ 2024-08-16  7:32 Helmut Eller
  2024-08-16  7:48 ` Eli Zaretskii
  0 siblings, 1 reply; 7+ messages in thread
From: Helmut Eller @ 2024-08-16  7:32 UTC (permalink / raw)
  To: Pip Cet; +Cc: emacs-devel, Gerd Möllmann

[-- Attachment #1: Type: text/plain, Size: 227 bytes --]

The patches below add a command line option to configure MPS.  It can be
used like

  emacs --igc-param pause_time=INF \
        --igc-param gen_params=64000k80%,256000k20% \
        --igc-param commit_limit=1000000000

WDYT?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Introduce-a-struct-igc_params.patch --]
[-- Type: text/x-diff, Size: 5261 bytes --]

From 63010af19ff11e77aee0846e7b795cc4df897f4a Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@gmail.com>
Date: Fri, 16 Aug 2024 08:21:25 +0200
Subject: [PATCH 1/4] Introduce a struct igc_params

* src/igc.h (struct igc_params): New.
(init_igc): Take igc_params as argument.
* src/emacs.c (parse_igc_params, parse_igc_param): New.
(main): Parse igc_params before init_igc.
(usage_message, standard_args): Include --igc-param.
* src/igc.c (make_arena): Use igc_params to configure pause_time.
(init_igc, make_igc): Pass igc_params along.
---
 src/emacs.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/igc.c   | 14 +++++++++-----
 src/igc.h   | 11 ++++++++++-
 3 files changed, 74 insertions(+), 7 deletions(-)

diff --git a/src/emacs.c b/src/emacs.c
index 88b96ca7761..ced3f723919 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -291,6 +291,11 @@ #define MAIN_PROGRAM
 --fingerprint               output fingerprint and exit\n\
 ",
 #endif
+#if HAVE_MPS
+    "\
+--igc-param PARAM=VALUE     set IGC paramater PARAM to VALUE\n\
+"
+#endif
 #if SECCOMP_USABLE
     "\
 --seccomp=FILE              read Seccomp BPF filter from FILE\n\
@@ -730,6 +735,42 @@ argmatch (char **argv, int argc, const char *sstr, const char *lstr,
     }
 }
 
+#ifdef HAVE_MPS
+static void
+parse_igc_param (const char *val, struct igc_params *params)
+{
+  int n = 0;
+  if ((sscanf (val, "pause_time=%lf%n", &params->pause_time.seconds, &n) == 1)
+      && val[n] == '\0' && params->pause_time.seconds >= 0)
+    {
+      params->pause_time.dflt = false;
+      return;
+    }
+  fprintf (stderr, "Invalid igc_param: %s\n", val);
+  exit (1);
+}
+
+static struct igc_params
+parse_igc_params (int argc, char **argv)
+{
+  struct igc_params params = {
+    .pause_time = { .dflt = true },
+    .gen_params = { .dflt = true },
+  };
+  for (int skip = 0; skip != argc;)
+    {
+      char *val = NULL;
+      if (argmatch (argv, argc, "-igc-param", "--igc-param", 11, &val, &skip))
+	parse_igc_param (val, &params);
+      else if (argmatch (argv, argc, "--", NULL, 0, NULL, &skip))
+	break;
+      else
+	skip++;
+    }
+  return params;
+}
+#endif
+
 #if !defined HAVE_ANDROID || defined ANDROID_STUBIFY
 
 /* Find a name (absolute or relative) of the Emacs executable whose
@@ -1421,7 +1462,8 @@ main (int argc, char **argv)
   init_signals ();
 
 #ifdef HAVE_MPS
-  init_igc ();
+  const struct igc_params params = parse_igc_params (argc, argv);
+  init_igc (&params);
 #endif
 
   /* This is needed early because load_pdump can call 'float-time' (via
@@ -2051,6 +2093,15 @@ main (int argc, char **argv)
   init_module_assertions (module_assertions);
 #endif
 
+#ifdef HAVE_MPS
+  {
+    char *arg;
+    while (argmatch (argv, argc, "-igc-param", "--igc-param", 11,
+		     &arg, &skip_args))
+      ;
+  }
+#endif
+
 #ifdef HAVE_NS
   if (!noninteractive)
     {
@@ -2681,6 +2732,9 @@ main (int argc, char **argv)
   { "-no-build-details", "--no-build-details", 63, 0 },
 #ifdef HAVE_MODULES
   { "-module-assertions", "--module-assertions", 62, 0 },
+#endif
+#ifdef HAVE_MPS
+  {"-igc-param", "--igc-param", 61, 1 },
 #endif
   /* -d must come last before the options handled in startup.el.  */
   { "-d", "--display", 60, 1 },
diff --git a/src/igc.c b/src/igc.c
index f069a2becc9..c294eae747e 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -4448,12 +4448,16 @@ DEFUN ("igc--set-commit-limit", Figc__set_commit_limit,
   return Qnil;
 }
 
+static_assert (sizeof (struct igc_gen_param) == sizeof (mps_gen_param_s));
+
 static void
-make_arena (struct igc *gc)
+make_arena (struct igc *gc, const struct igc_params *params)
 {
   mps_res_t res;
   MPS_ARGS_BEGIN (args)
   {
+    if (!params->pause_time.dflt)
+      MPS_ARGS_ADD (args, MPS_KEY_PAUSE_TIME, params->pause_time.seconds);
     res = mps_arena_create_k (&gc->arena, mps_arena_class_vm (), args);
   }
   MPS_ARGS_END (args);
@@ -4534,10 +4538,10 @@ make_pool_amcz (struct igc *gc, mps_fmt_t fmt)
 }
 
 static struct igc *
-make_igc (void)
+make_igc (const struct igc_params *params)
 {
   struct igc *gc = xzalloc (sizeof *gc);
-  make_arena (gc);
+  make_arena (gc, params);
 
   /* We cannot let the GC run until at least all staticpros haven been
      processed. Otherwise we might allocate objects that are not
@@ -4967,11 +4971,11 @@ DEFUN ("igc--remove-extra-dependency", Figc__remove_extra_dependency,
  ***********************************************************************/
 
 void
-init_igc (void)
+init_igc (const struct igc_params *params)
 {
   /* Returns previous handler.  */
   (void) mps_lib_assert_fail_install (igc_assert_fail);
-  global_igc = make_igc ();
+  global_igc = make_igc (params);
   add_main_thread ();
   set_state (IGC_STATE_USABLE_PARKED);
 }
diff --git a/src/igc.h b/src/igc.h
index 00e37b6c952..586db8ce77f 100644
--- a/src/igc.h
+++ b/src/igc.h
@@ -60,8 +60,17 @@ #define EMACS_IGC_H
 
 #ifdef HAVE_MPS
 
+struct igc_params
+{
+  struct
+  {
+    bool dflt;
+    double seconds; /* in seconds; valid values in [0..INF] */
+  } pause_time;
+};
+
 void igc_break (void);
-void init_igc (void);
+void init_igc (const struct igc_params *);
 void syms_of_igc (void);
 void *igc_thread_add (struct thread_state *ts);
 void igc_thread_remove (void **info);
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-Add-gen_params-to-igc_params.patch --]
[-- Type: text/x-diff, Size: 3641 bytes --]

From e732965529ce3b29de2d211349c033f4b5724a23 Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@gmail.com>
Date: Fri, 16 Aug 2024 08:28:35 +0200
Subject: [PATCH 2/4] Add gen_params to igc_params.

* src/igc.h (struct igc_gen_param): New.
(struct igc_params): Add gen_params field.
* src/emacs.c (parse_igc_gen_params): New.
(parse_igc_param): Use it.
* src/igc.c (make_arena): Use igc_params to configure the generation
chain.
---
 src/emacs.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 src/igc.c   | 11 +++++++++--
 src/igc.h   | 12 ++++++++++++
 3 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/src/emacs.c b/src/emacs.c
index ced3f723919..b2d12b61967 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -736,6 +736,45 @@ argmatch (char **argv, int argc, const char *sstr, const char *lstr,
 }
 
 #ifdef HAVE_MPS
+static void
+parse_igc_gen_params (const char *string, struct igc_params *params)
+{
+  size_t count = 0;
+  struct igc_gen_param *array = NULL;
+  for (const char *s = string;;)
+    {
+      int n = 0;
+      size_t capacity, mortality;
+      if ((sscanf (s, "%zuk%zu%%%n", &capacity, &mortality, &n) == 2)
+	  && mortality <= 100)
+	{
+	  struct igc_gen_param p = { .capacity = capacity,
+				     .mortality = (double)mortality / 100.0 };
+	  count++;
+	  array = xrealloc (array, sizeof (array[0]) * count);
+	  array[count - 1] = p;
+	  if (s[n] == ',')
+	    {
+	      s = &s[n + 1];
+	      continue;
+	    }
+	  else if (s[n] == '\0')
+	    {
+	      params->gen_params.dflt = false;
+	      params->gen_params.gen_count = count;
+	      params->gen_params.gen_params = array;
+	      return;
+	    }
+	  else
+	    break;
+	}
+      else
+	break;
+    }
+  fprintf (stderr, "Invalid value gen_params: %s\n", string);
+  exit (1);
+}
+
 static void
 parse_igc_param (const char *val, struct igc_params *params)
 {
@@ -746,6 +785,11 @@ parse_igc_param (const char *val, struct igc_params *params)
       params->pause_time.dflt = false;
       return;
     }
+
+  const char *key = "gen_params=";
+  if (strncmp (val, key, strlen (key)) == 0)
+    return parse_igc_gen_params (val + strlen (key), params);
+
   fprintf (stderr, "Invalid igc_param: %s\n", val);
   exit (1);
 }
diff --git a/src/igc.c b/src/igc.c
index c294eae747e..77f897bfdca 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -4463,8 +4463,15 @@ make_arena (struct igc *gc, const struct igc_params *params)
   MPS_ARGS_END (args);
   IGC_CHECK_RES (res);
 
-  mps_gen_param_s gens[] = { { 128000, 0.8 }, { 5 * 128000, 0.4 } };
-  res = mps_chain_create (&gc->chain, gc->arena, ARRAYELTS (gens), gens);
+  mps_gen_param_s dflt_gens[] = { { 128000, 0.8 }, { 5 * 128000, 0.4 } };
+  mps_gen_param_s *gens = dflt_gens;
+  size_t ngens = ARRAYELTS (dflt_gens);
+  if (!params->gen_params.dflt)
+    {
+      ngens = params->gen_params.gen_count;
+      gens = (mps_gen_param_s *)params->gen_params.gen_params;
+    }
+  res = mps_chain_create (&gc->chain, gc->arena, ngens, gens);
   IGC_CHECK_RES (res);
 }
 
diff --git a/src/igc.h b/src/igc.h
index 586db8ce77f..716069adceb 100644
--- a/src/igc.h
+++ b/src/igc.h
@@ -60,6 +60,12 @@ #define EMACS_IGC_H
 
 #ifdef HAVE_MPS
 
+struct igc_gen_param
+{
+  size_t capacity;	  /* in kilobytes */
+  double mortality;	  /* initial estimate; valid values in [0..1] */
+};
+
 struct igc_params
 {
   struct
@@ -67,6 +73,12 @@ #define EMACS_IGC_H
     bool dflt;
     double seconds; /* in seconds; valid values in [0..INF] */
   } pause_time;
+  struct
+  {
+    bool dflt;
+    size_t gen_count;
+    struct igc_gen_param *gen_params;
+  } gen_params;
 };
 
 void igc_break (void);
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-Add-commit_limit-to-igc_params.patch --]
[-- Type: text/x-diff, Size: 2187 bytes --]

From 185135e876ea29511e72db090e91636dc0402344 Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@gmail.com>
Date: Fri, 16 Aug 2024 09:05:06 +0200
Subject: [PATCH 3/4] Add commit_limit to igc_params

* src/igc.h (struct igc_params): Add commit_limit field.
* src/igc.c (make_arena): Use igc_params to configure commit_limit.
* src/emacs.c (parse_igc_params, parse_igc_param): Parse commit_limit.
---
 src/emacs.c | 9 +++++++++
 src/igc.c   | 2 ++
 src/igc.h   | 5 +++++
 3 files changed, 16 insertions(+)

diff --git a/src/emacs.c b/src/emacs.c
index b2d12b61967..777ca703079 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -790,6 +790,14 @@ parse_igc_param (const char *val, struct igc_params *params)
   if (strncmp (val, key, strlen (key)) == 0)
     return parse_igc_gen_params (val + strlen (key), params);
 
+  if ((sscanf (val, "commit_limit=%zu%n", &params->commit_limit.bytes, &n)
+       == 1)
+      && val[n] == '\0')
+    {
+      params->commit_limit.dflt = false;
+      return;
+    }
+
   fprintf (stderr, "Invalid igc_param: %s\n", val);
   exit (1);
 }
@@ -800,6 +808,7 @@ parse_igc_params (int argc, char **argv)
   struct igc_params params = {
     .pause_time = { .dflt = true },
     .gen_params = { .dflt = true },
+    .commit_limit = { .dflt = true },
   };
   for (int skip = 0; skip != argc;)
     {
diff --git a/src/igc.c b/src/igc.c
index 77f897bfdca..89e767ad79f 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -4458,6 +4458,8 @@ make_arena (struct igc *gc, const struct igc_params *params)
   {
     if (!params->pause_time.dflt)
       MPS_ARGS_ADD (args, MPS_KEY_PAUSE_TIME, params->pause_time.seconds);
+    if (!params->commit_limit.dflt)
+      MPS_ARGS_ADD (args, MPS_KEY_COMMIT_LIMIT, params->commit_limit.bytes);
     res = mps_arena_create_k (&gc->arena, mps_arena_class_vm (), args);
   }
   MPS_ARGS_END (args);
diff --git a/src/igc.h b/src/igc.h
index 716069adceb..abe2452f625 100644
--- a/src/igc.h
+++ b/src/igc.h
@@ -79,6 +79,11 @@ #define EMACS_IGC_H
     size_t gen_count;
     struct igc_gen_param *gen_params;
   } gen_params;
+  struct
+  {
+    bool dflt;
+    size_t bytes;
+  } commit_limit;
 };
 
 void igc_break (void);
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-Remove-igc-set-commit-limit.patch --]
[-- Type: text/x-diff, Size: 3076 bytes --]

From 4a7915668552bc029d43b4c6752274c527be7644 Mon Sep 17 00:00:00 2001
From: Helmut Eller <eller.helmut@gmail.com>
Date: Fri, 16 Aug 2024 09:15:58 +0200
Subject: [PATCH 4/4] Remove igc--set-commit-limit

The commit_limit can now be set with the --igc-param command line
option.

* src/igc.c (Figc__set_commit_limit, mps_res_to_string): Deleted.
* test/src/igc-tests.el (set-commit-limit-test): Deleted.
---
 src/igc.c             | 38 --------------------------------------
 test/src/igc-tests.el | 12 ------------
 2 files changed, 50 deletions(-)

diff --git a/src/igc.c b/src/igc.c
index 89e767ad79f..82c5886a8a5 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -4411,43 +4411,6 @@ igc_external_header (struct igc_header *h)
   return header_exthdr (h);
 }
 
-static const char *
-mps_res_to_string (mps_res_t res)
-{
-  switch (res)
-    {
-#define RES_CASE(prefix, id, doc)                                            \
-  case prefix##id:                                                           \
-    return #prefix #id " " doc;
-      _mps_RES_ENUM (RES_CASE, MPS_RES_);
-#undef RES_CASE
-    default:
-      return NULL;
-    }
-}
-
-DEFUN ("igc--set-commit-limit", Figc__set_commit_limit,
-       Sigc__set_commit_limit, 1, 1, 0,
-       doc: /* Set the arena commit limit to LIMIT.
-LIMIT can be an integer (number of bytes) or nil (no limit).
-
-Do NOT use this for anything but testing, unless you
-really know what you are doing!  */)
-  (Lisp_Object limit)
-{
-  size_t nbytes
-      = NILP (limit) ? ~0 : check_uinteger_max (limit, SIZE_MAX - 1);
-  mps_res_t err = mps_arena_commit_limit_set (global_igc->arena, nbytes);
-  if (err != MPS_RES_OK)
-    {
-      const char *msg = mps_res_to_string (err);
-      xsignal3 (Qerror,
-		intern_c_string (Sigc__set_commit_limit.s.symbol_name),
-		make_fixnum (err), msg ? build_string (msg) : Qnil);
-    }
-  return Qnil;
-}
-
 static_assert (sizeof (struct igc_gen_param) == sizeof (mps_gen_param_s));
 
 static void
@@ -4995,7 +4958,6 @@ syms_of_igc (void)
   defsubr (&Sigc_info);
   defsubr (&Sigc__roots);
   defsubr (&Sigc__collect);
-  defsubr (&Sigc__set_commit_limit);
   defsubr (&Sigc__add_extra_dependency);
   defsubr (&Sigc__remove_extra_dependency);
   DEFSYM (Qambig, "ambig");
diff --git a/test/src/igc-tests.el b/test/src/igc-tests.el
index 59a0cb83909..2d0e296f06c 100644
--- a/test/src/igc-tests.el
+++ b/test/src/igc-tests.el
@@ -1,15 +1,3 @@
 ;;; igc-tests.el --- tests for src/igc.c -*- lexical-binding: t -*-
 
 (require 'ert)
-
-(ert-deftest set-commit-limit-test ()
-  (should (equal (igc--set-commit-limit (ash 1 30)) nil))
-  (should (equal (assoc-string "commit-limit" (igc-info))
-                 '("commit-limit" 1 1073741824 0)))
-  (should-error (igc--set-commit-limit -1)
-                :type 'args-out-of-range)
-  (should-error (igc--set-commit-limit (- (ash 1 64) 1))
-                :type 'args-out-of-range)
-  (should (equal (igc--set-commit-limit nil) nil))
-  (should (equal (assoc-string "commit-limit" (igc-info))
-                 '("commit-limit" 1 -1 0))))
-- 
2.39.2


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

* Re: MPS command line parameters
  2024-08-16  7:32 MPS command line parameters Helmut Eller
@ 2024-08-16  7:48 ` Eli Zaretskii
  2024-08-16  7:58   ` Pip Cet
  2024-08-16  8:59   ` Helmut Eller
  0 siblings, 2 replies; 7+ messages in thread
From: Eli Zaretskii @ 2024-08-16  7:48 UTC (permalink / raw)
  To: Helmut Eller; +Cc: pipcet, emacs-devel, gerd.moellmann

> From: Helmut Eller <eller.helmut@gmail.com>
> CC: emacs-devel@gnu.org, Gerd Möllmann
>  <gerd.moellmann@gmail.com>
> Date: Fri, 16 Aug 2024 09:32:14 +0200
> 
> The patches below add a command line option to configure MPS.  It can be
> used like
> 
>   emacs --igc-param pause_time=INF \
>         --igc-param gen_params=64000k80%,256000k20% \
>         --igc-param commit_limit=1000000000

Is there any way of changing these parameters when Emacs is already
running?  It is quite un-Emacsy to allow some configuration only via
the command line.  Also, relatively inconvenient, since you must
restart Emacs each time you want to change these parameters.

Thanks.



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

* Re: MPS command line parameters
  2024-08-16  7:48 ` Eli Zaretskii
@ 2024-08-16  7:58   ` Pip Cet
  2024-08-16  8:59   ` Helmut Eller
  1 sibling, 0 replies; 7+ messages in thread
From: Pip Cet @ 2024-08-16  7:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Helmut Eller, emacs-devel, gerd.moellmann

"Eli Zaretskii" <eliz@gnu.org> writes:

>> From: Helmut Eller <eller.helmut@gmail.com>
>> CC: emacs-devel@gnu.org, Gerd Möllmann
>>  <gerd.moellmann@gmail.com>
>> Date: Fri, 16 Aug 2024 09:32:14 +0200
>>
>> The patches below add a command line option to configure MPS.  It can be
>> used like
>>
>>   emacs --igc-param pause_time=INF \
>>         --igc-param gen_params=64000k80%,256000k20% \
>>         --igc-param commit_limit=1000000000
>
> Is there any way of changing these parameters when Emacs is already
> running?

For most parameters, yes, but the generation chain parameters can only
be set when the pool using them is created.  It's possible, of course,
to create a new pool for new allocations when the parameters change and
use that, but then we'd have to keep track of obsolete pools and that
would complicate things further.

> It is quite un-Emacsy to allow some configuration only via
> the command line.  Also, relatively inconvenient, since you must
> restart Emacs each time you want to change these parameters.

Unfortunately, the generation size settings have a huge influence on
performance, so we might have to implement the pool-switching thing
after all...

Pip




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

* Re: MPS command line parameters
  2024-08-16  7:48 ` Eli Zaretskii
  2024-08-16  7:58   ` Pip Cet
@ 2024-08-16  8:59   ` Helmut Eller
  2024-08-16 10:50     ` Eli Zaretskii
  2024-08-21  8:06     ` Pip Cet
  1 sibling, 2 replies; 7+ messages in thread
From: Helmut Eller @ 2024-08-16  8:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: pipcet, emacs-devel, gerd.moellmann

On Fri, Aug 16 2024, Eli Zaretskii wrote:

>> The patches below add a command line option to configure MPS.  It can be
>> used like
>> 
>>   emacs --igc-param pause_time=INF \
>>         --igc-param gen_params=64000k80%,256000k20% \
>>         --igc-param commit_limit=1000000000
>
> Is there any way of changing these parameters when Emacs is already
> running? It is quite un-Emacsy to allow some configuration only via
> the command line.  Also, relatively inconvenient, since you must
> restart Emacs each time you want to change these parameters.

pause_time and commit_limit could be set at runtime; gen_params not.



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

* Re: MPS command line parameters
  2024-08-16  8:59   ` Helmut Eller
@ 2024-08-16 10:50     ` Eli Zaretskii
  2024-08-21  8:06     ` Pip Cet
  1 sibling, 0 replies; 7+ messages in thread
From: Eli Zaretskii @ 2024-08-16 10:50 UTC (permalink / raw)
  To: Helmut Eller; +Cc: pipcet, emacs-devel, gerd.moellmann

> From: Helmut Eller <eller.helmut@gmail.com>
> Cc: pipcet@protonmail.com,  emacs-devel@gnu.org,  gerd.moellmann@gmail.com
> Date: Fri, 16 Aug 2024 10:59:48 +0200
> 
> On Fri, Aug 16 2024, Eli Zaretskii wrote:
> 
> >> The patches below add a command line option to configure MPS.  It can be
> >> used like
> >> 
> >>   emacs --igc-param pause_time=INF \
> >>         --igc-param gen_params=64000k80%,256000k20% \
> >>         --igc-param commit_limit=1000000000
> >
> > Is there any way of changing these parameters when Emacs is already
> > running? It is quite un-Emacsy to allow some configuration only via
> > the command line.  Also, relatively inconvenient, since you must
> > restart Emacs each time you want to change these parameters.
> 
> pause_time and commit_limit could be set at runtime; gen_params not.

It would be good to have variables/functions to change those
parameters that can be modified during a session.



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

* Re: MPS command line parameters
  2024-08-16  8:59   ` Helmut Eller
  2024-08-16 10:50     ` Eli Zaretskii
@ 2024-08-21  8:06     ` Pip Cet
  2024-08-21  9:31       ` Helmut Eller
  1 sibling, 1 reply; 7+ messages in thread
From: Pip Cet @ 2024-08-21  8:06 UTC (permalink / raw)
  To: Helmut Eller; +Cc: Eli Zaretskii, emacs-devel, gerd.moellmann

"Helmut Eller" <eller.helmut@gmail.com> writes:

> On Fri, Aug 16 2024, Eli Zaretskii wrote:
>
>>> The patches below add a command line option to configure MPS.  It can be
>>> used like
>>>
>>>   emacs --igc-param pause_time=INF \
>>>         --igc-param gen_params=64000k80%,256000k20% \
>>>         --igc-param commit_limit=1000000000
>>
>> Is there any way of changing these parameters when Emacs is already
>> running? It is quite un-Emacsy to allow some configuration only via
>> the command line.  Also, relatively inconvenient, since you must
>> restart Emacs each time you want to change these parameters.
>
> pause_time and commit_limit could be set at runtime; gen_params not.

I haven't forgotten about this.  Would it be okay to install a patch to
set the generation chain params and the grain size at startup time, and
leave the code in to set the other parameters at runtime?

Pip




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

* Re: MPS command line parameters
  2024-08-21  8:06     ` Pip Cet
@ 2024-08-21  9:31       ` Helmut Eller
  0 siblings, 0 replies; 7+ messages in thread
From: Helmut Eller @ 2024-08-21  9:31 UTC (permalink / raw)
  To: Pip Cet; +Cc: Eli Zaretskii, emacs-devel, gerd.moellmann

On Wed, Aug 21 2024, Pip Cet wrote:

>> pause_time and commit_limit could be set at runtime; gen_params not.
>
> I haven't forgotten about this.  Would it be okay to install a patch to
> set the generation chain params and the grain size at startup time, and
> leave the code in to set the other parameters at runtime?

Of course it would be okay.  Though, I think those parameters will
almost exclusively be set on startup before running a benchmark.



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

end of thread, other threads:[~2024-08-21  9:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-16  7:32 MPS command line parameters Helmut Eller
2024-08-16  7:48 ` Eli Zaretskii
2024-08-16  7:58   ` Pip Cet
2024-08-16  8:59   ` Helmut Eller
2024-08-16 10:50     ` Eli Zaretskii
2024-08-21  8:06     ` Pip Cet
2024-08-21  9:31       ` Helmut Eller

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).