Software /
code /
prosody
Annotate
util/gc.lua @ 12084:59557bc3c4b8 0.11
net.server_epoll: Process all queued events from epoll before timers
Should call timers less frequently when many sockets are waiting for
processing. May help under heavy load.
Requested by Ge0rG
Backport of 2bcd84123eba requested by Roi
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 21 Oct 2021 15:59:16 +0200 |
parent | 11072:02227c5d0c59 |
child | 11431:4874b54af344 |
rev | line source |
---|---|
11071
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local set = require "util.set"; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local known_options = { |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 incremental = set.new { "mode", "threshold", "speed", "step_size" }; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 generational = set.new { "mode", "minor_threshold", "major_threshold" }; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 }; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 if _VERSION ~= "5.4" then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 known_options.generational = nil; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 known_options.incremental:remove("step_size"); |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local function configure(user, defaults) |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local mode = user.mode or defaults.mode or "incremental"; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 if not known_options[mode] then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 return nil, "GC mode not supported on ".._VERSION..": "..mode; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 for k, v in pairs(user) do |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 if not known_options[mode]:contains(k) then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 return nil, "Unknown GC parameter: "..k; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 elseif k ~= "mode" and type(v) ~= "number" then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 return nil, "parameter '"..k.."' should be a number"; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 if mode == "incremental" then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 if _VERSION == "Lua 5.4" then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 collectgarbage(mode, |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 user.threshold or defaults.threshold, |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 user.speed or defaults.speed, |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 user.step_size or defaults.step_size |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 ); |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 else |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 collectgarbage("setpause", user.threshold or defaults.threshold); |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 collectgarbage("setstepmul", user.speed or defaults.speed); |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 elseif mode == "generational" then |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 collectgarbage(mode, |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 user.minor_threshold or defaults.minor_threshold, |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 user.major_threshold or defaults.major_threshold |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 ); |
11072
02227c5d0c59
util.gc: Linter fixes [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
11071
diff
changeset
|
43 end |
11071
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 return true; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 return { |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 configure = configure; |
f69a63b80f3a
util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 }; |