summary refs log tree commit diff stats
path: root/results/scraper/fex/3524
diff options
context:
space:
mode:
authorChristian Krinitsin <mail@krinitsin.com>2025-07-17 09:10:43 +0200
committerChristian Krinitsin <mail@krinitsin.com>2025-07-17 09:10:43 +0200
commitf2ec263023649e596c5076df32c2d328bc9393d2 (patch)
tree5dd86caab46e552bd2e62bf9c4fb1a7504a44db4 /results/scraper/fex/3524
parent63d2e9d409831aa8582787234cae4741847504b7 (diff)
downloadqemu-analysis-main.tar.gz
qemu-analysis-main.zip
add downloaded fex bug-reports HEAD main
Diffstat (limited to 'results/scraper/fex/3524')
-rw-r--r--results/scraper/fex/352412
1 files changed, 12 insertions, 0 deletions
diff --git a/results/scraper/fex/3524 b/results/scraper/fex/3524
new file mode 100644
index 000000000..f00beb650
--- /dev/null
+++ b/results/scraper/fex/3524
@@ -0,0 +1,12 @@
+Support partial JIT invalidation
+LÖVE 11.5 game engine has switched over to using LuaJIT by default. This causes [Balatro](https://store.steampowered.com/app/2379780/Balatro/) to /constantly/ JIT code through code invalidations.

+

+This is due to how LuaJIT compiles, it allocates 128KB at the start, and each time it generates new JIT code it changes permission of the code segment to RW for the full range, JITs code by appending to the end, and then changes back to RX. This causes FEX to invalidate all code in that mapping and spend all CPU time JITTing the same code over and over. This drops the game to sub 1FPS.

+

+If we recognize that a region is a JIT region and do partial invalidations this will significantly improve the situation.

+We could do this by:

+- hashing a JIT region code upfront (xxhash likely)

+- On invalidation just remove jump entries

+- On JIT, just do a lookup and hash check to put the entry back in JIT

+

+This will have a bit of stampeding in the JIT after each invalidation, but better than full reJIT.
\ No newline at end of file