File 1275-stdlib-Limit-ets_SUITE-smp_insert-on-large-multi-cor.patch of Package erlang

From 44922efc96a1e8eac34946d2534748a0cd4fc850 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Tue, 29 Apr 2025 17:36:34 +0200
Subject: [PATCH 1/2] stdlib: Limit ets_SUITE:smp_insert on large multi core
 machines

---
 lib/stdlib/test/ets_SUITE.erl | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/lib/stdlib/test/ets_SUITE.erl b/lib/stdlib/test/ets_SUITE.erl
index 675752a984..30a5b90e07 100644
--- a/lib/stdlib/test/ets_SUITE.erl
+++ b/lib/stdlib/test/ets_SUITE.erl
@@ -7413,7 +7413,12 @@ smp_insert_do(Opts) ->
     ExecF = fun(_) -> true = ets:insert(smp_insert,{rand:uniform(KeyRange)})
             end,
     FiniF = fun(_) -> ok end,
-    run_smp_workers(InitF,ExecF,FiniF,100000),
+    %% Limit number of concurrent inserters on large multicore machines
+    %% as hash tables have been seen to not keep up with growth.
+    %% But probably not a problem in practice with such massively
+    %% concurrent frequent insertions.
+    MaxWorkers = 150,
+    run_smp_workers(InitF,ExecF,FiniF,100000, #{max => MaxWorkers}),
     verify_table_load(smp_insert),
     ets:delete(smp_insert).
 
@@ -8003,7 +8008,7 @@ otp_9423(Config) when is_list(Config) ->
                               end
                       end,
               FiniF = fun(R) -> R end,
-              case run_smp_workers(InitF, ExecF, FiniF, infinite, 1) of
+              case run_smp_workers(InitF, ExecF, FiniF, infinite, #{exclude => 1}) of
                   Pids when is_list(Pids) ->
                       %%[P ! start || P <- Pids],
                       repeat(fun() -> ets_new(otp_9423, [named_table, public, 
@@ -8916,11 +8921,15 @@ add_lists([E1|T1], [E2|T2], Acc) ->
     add_lists(T1, T2, [E1+E2 | Acc]).
 
 run_smp_workers(InitF,ExecF,FiniF,Laps) ->
-    run_smp_workers(InitF,ExecF,FiniF,Laps, 0).
-run_smp_workers(InitF,ExecF,FiniF,Laps, Exclude) ->
+    run_smp_workers(InitF,ExecF,FiniF,Laps, #{}).
+
+run_smp_workers(InitF,ExecF,FiniF,Laps, Opts) ->
+    Exclude = maps:get(exclude, Opts, 0),
+    Max = maps:get(max, Opts, infinite),
     case erlang:system_info(schedulers_online) of
         N when N > Exclude ->
-            run_workers_do(InitF,ExecF,FiniF,Laps, N - Exclude);
+            Workers = min(N - Exclude, Max),
+            run_workers_do(InitF, ExecF, FiniF, Laps, Workers);
         _ ->
             {skipped, "Too few schedulers online"}
     end.
-- 
2.43.0

openSUSE Build Service is sponsored by