mirror of
https://codeberg.org/rudzik8/tune_jit.git
synced 2025-03-14 22:31:21 +00:00
Initial commit
This commit is contained in:
commit
9410a2bcd5
7 changed files with 105 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*.swp
|
||||
*.patch
|
||||
*.bak
|
3
.luacheckrc
Normal file
3
.luacheckrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
read_globals = {
|
||||
"core", "jit"
|
||||
}
|
10
LICENSE
Normal file
10
LICENSE
Normal file
|
@ -0,0 +1,10 @@
|
|||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
47
README.md
Normal file
47
README.md
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Tune JIT `tune_jit`
|
||||
|
||||
A Luanti mod tuning LuaJIT parameters to improve server performance by
|
||||
preventing constant GC.
|
||||
|
||||
|
||||
## Wait, what does it exactly do?
|
||||
|
||||
At a base level, this mod implements the same thing as [VoxeLibre](https://git.minetest.land/VoxeLibre/VoxeLibre/src/commit/161dbaea03a7816db1393ca767c84a5f275ef162/mods/CORE/mcl_init/tune_jit.lua)
|
||||
and [Mineclonia](https://codeberg.org/mineclonia/mineclonia/src/commit/94467d9f822ae31838e3c76d643950be2ee891f8/mods/ENTITIES/mcl_mobs/pathfinding.lua#L1627-L1636)
|
||||
but for other Luanti games, with more configurability for the server operator.
|
||||
|
||||
[The `jit.opt.*` API](https://luajit.org/ext_jit.html) is leveraged in order to
|
||||
modify JIT compiler optimization parameters on server startup. This won't work
|
||||
with LuaJIT 1.x, but if you have a LuaJIT that ancient, most of your server-side
|
||||
performance issues should go away after you upgrade it. The coolest thing is
|
||||
that this mod doesn't have to be in the `secure.trusted_mods` list in order to
|
||||
apply the parameters.
|
||||
|
||||
In [@halon](https://codeberg.org/halon)'s words:
|
||||
|
||||
> Large minetest servers on stock luajit spend most of their globalsteps
|
||||
> recording and jit compiling traces that are evicted for exceeding one of the
|
||||
> minuscule limits on trace count or mcode size defined by default
|
||||
|
||||
The specific parameters that are modified are `maxtrace`, `maxrecord`,
|
||||
`minstitch` and `maxmcode`. Please refer to this mod's `settingtypes.txt` and
|
||||
LuaJIT documentation for details.
|
||||
|
||||
|
||||
## Will it help with client-side lag?
|
||||
|
||||
Unless it was the server's fault, no.
|
||||
|
||||
For singleplayer, remember that Luanti just starts up a server under the hood
|
||||
and connects you to it, with the same server/client communication rules and
|
||||
specifics. The only difference is that both server and client are now ran on the
|
||||
same machine, though most likely in different threads.
|
||||
|
||||
Mobs freezing and map generation suddenly stopping might get removed, but this
|
||||
won't have any effect on rendering or audio playback.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
The source code is licensed under 0BSD ("public domain"). See `LICENSE` file for
|
||||
details.
|
23
init.lua
Normal file
23
init.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
if not core.global_exists("jit") then
|
||||
core.log("warning", "[tune_jit] Couldn't find LuaJIT, nothing to tune")
|
||||
return
|
||||
elseif not jit.status() then
|
||||
core.log("warning", "[tune_jit] LuaJIT is enabled but JIT compiler is disabled")
|
||||
return
|
||||
end
|
||||
|
||||
local PARAM_DEFAULTS = {
|
||||
maxtrace = 24000, -- 1000 for LuaJIT; 8000 for OpenResty
|
||||
maxrecord = 32000, -- 4000 for LuaJIT; 16000 for OpenResty
|
||||
minstitch = 3, -- 0 for LuaJIT; 3 for OpenResty
|
||||
maxmcode = 163840 -- 512 for LuaJIT (O_O); 40960 for OpenResty
|
||||
}
|
||||
|
||||
local opt = {}
|
||||
for name, default_value in pairs(PARAM_DEFAULTS) do
|
||||
local value = tonumber(core.settings:get("tune_jit."..name)) or default_value
|
||||
table.insert(opt, name .. "=" .. value)
|
||||
end
|
||||
|
||||
jit.opt.start(unpack(opt))
|
||||
core.log("action", "[tune_jit] Applied increased JIT compiler optimization parameters")
|
3
mod.conf
Normal file
3
mod.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
name = tune_jit
|
||||
title = Tune JIT
|
||||
description = Tunes LuaJIT parameters to improve server performance by preventing constant GC
|
16
settingtypes.txt
Normal file
16
settingtypes.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Maximum amount of cached traces.
|
||||
# 1000 for stock, 8000 for OpenResty
|
||||
tune_jit.maxtrace (Max. # of traces in cache) int 24000 0
|
||||
|
||||
# Maximum amount of IR (Intermediate Representation) instructions.
|
||||
# 4000 for stock, 16000 for OpenResty
|
||||
tune_jit.maxrecord (Max. # of recorded IR instructions) int 32000 0
|
||||
|
||||
# Minimum amount of IR (Intermediate Representation) instructions to be
|
||||
# included in a stitched trace.
|
||||
# 0 for stock, 3 for OpenResty
|
||||
tune_jit.minstitch (Min. # of stitched trace IR instructions) int 3 0
|
||||
|
||||
# Maximum total size of all machine code areas, in kilobytes.
|
||||
# 512 for stock, 40960 for OpenResty
|
||||
tune_jit.maxmcode (Max. machine code size) int 163840 0
|
Loading…
Add table
Reference in a new issue