MasterDuke | man, all sorts of exciting stuff landed this weekend | 00:03 | |
timotimo | so how did it go back up to 10 gc runs i wonder | 00:04 | |
what other things excite you, MasterDuke? | 00:06 | ||
MasterDuke | how much i'm enjoying pubg mobile | 00:08 | |
timotimo | haha | 00:12 | |
i was thinking more along the lines of rakudo-related stuff :) | 00:13 | ||
MasterDuke | you're making profiling better, zoffix is making number stringification better/faster, nine is doing cool stuff with the build, etc | 00:15 | |
timotimo | i agree on the latter two :P | 00:16 | |
and the etc | |||
i'm not making good progress with the profiler bits :| | |||
MasterDuke | well, i'm not doing anything much at all, so you're ahead of me | 00:18 | |
timotimo | you're among the folks providing me with profiler bugs %) | ||
i just replaced the call to .sum with a tiny "clever trick" | 00:19 | ||
MasterDuke | oh? | 00:20 | |
timotimo | yup, the original code goes kind of like this: | ||
set up an array of a few zeroes so we can smooth out consecutive readings | |||
every frame, shift off the first measurement, push a new measurement at the end, calculate the sum | |||
the new code just subtracts the shifted-off value and adds the pushed value and keeps the value around | 00:21 | ||
MasterDuke | ah, nice | ||
timotimo | the call to the sum method was pessimized because it created an empty hash that went unused every time around (because named arguments) | 00:22 | |
we can often throw those away, but not in this case :( | 00:23 | ||
wait, was the sum call already optimized properly the last time? | 00:25 | ||
the allocations are real low now | |||
i'll do a 300 second measurement | 00:26 | ||
this one was only a minute long, but it also only had 1 gc run | |||
i'm hopeful :) | |||
i'd really like less than one run per minute | 00:27 | ||
so a young object has two minutes to become unreferenced before it is incorrectly assumed to be long-lived (because it survived two nursery collections) | 00:29 | ||
nice. 3 gcs over 5 minutes | 00:31 | ||
MasterDuke | seems pretty good | 00:35 | |
timotimo | i'm not completely done yet | 00:36 | |
i don't think i can remove the BOOTHash allocs from prod-affinity-workers, and i can't remove the BOOTIntArray allocation from nqp::rusage, but i can perhaps get rid of the Int allocation from getrusage-total | 00:37 | ||
MasterDuke | is it going to julienne fries when you're done? | 00:38 | |
timotimo | i don't know what that is :o | 00:41 | |
first attempt didn't work, anyway | |||
MasterDuke | "it slices, it dices, it even does juilienne fries!" | 00:44 | |
just a trope about over-the-top ads for things | 00:45 | ||
to julienne something is to cut it into long thin slices | 00:46 | ||
timotimo | ah, ok | 00:48 | |
waiting for a 600s profile to finish now %) | 00:49 | ||
didn't even do a short one first to see if my second approach would work | |||
when will it finish ... | 00:53 | ||
there it is | |||
i doubled the amount of allocations :D | 00:54 | ||
nope, can't get it to go away. oh well. | 00:58 | ||
pushed the branch | 01:09 | ||
Geth | MoarVM: 5cff02dafe | (Timo Paulssen)++ | 3 files jit a few ops that ThreadPoolScheduler uses in particular, these are used by the supervisor thread that wakes up 100x per second. |
01:10 | |
MoarVM: e7fee68f1d | (Timo Paulssen)++ | src/profiler/instrument.c getrusage allocates, so log that in the profile. |
|||
timotimo | and the new jitted ops | ||
MoarVM: 621ca3c220 | (Timo Paulssen)++ | src/spesh/facts.c discover type of getrusage in spesh this allows devirtualization of atpos_i accesses to getrusage's result. Probably barely worth anything cpu-time wise. |
|||
MasterDuke | cool | 01:12 | |
timotimo | i'll write up a pull request for the TPS supervisor stuff | 01:13 | |
i'll also do a full measurement at 5 minutes run time | 01:14 | ||
01:18
reportable6 joined
|
|||
timotimo | 5 minutes is so long %) | 01:19 | |
01:26
bisectable6 joined
01:29
evalable6 joined
|
|||
timotimo | github.com/rakudo/rakudo/pull/1653 | 01:35 | |
01:35
FROGGS_ joined
|
|||
timotimo | bedtime | 01:36 | |
MasterDuke | nice, later... | 01:55 | |
01:57
ilbot3 joined
02:37
AlexDaniel joined
05:08
committable6 joined,
bisectable6 joined
05:58
domidumont joined
06:07
domidumont joined
06:22
domidumont joined
07:08
robertle joined
08:06
domidumont joined
09:02
domidumont joined
11:21
avar joined
12:26
reportable6 joined
13:20
reportable6 joined
13:29
AlexDaniel joined
14:34
notable6 joined,
nativecallable6 joined,
bloatable6 joined,
committable6 joined,
coverable6 joined,
greppable6 joined,
evalable6 joined,
quotable6 joined,
releasable6 joined,
benchable6 joined,
unicodable6 joined,
shareable6 joined,
squashable6 joined,
bisectable6 joined,
statisfiable6 joined
14:36
reportable6 joined
15:24
FROGGS joined
15:42
greppable6 joined
15:43
greppable6 joined
15:46
domidumont joined
15:53
dogbert17 joined
16:05
geospeck joined,
geospeck left
|
|||
timotimo | wow. if we change getrusage to fill a given array, we actually can get the supervisor allocation-free! holy cow. | 16:06 | |
that is, if inlining prod-affinity-workers doesn't cause allocations of closures or something | 16:08 | ||
awesome! there's only BOOTIntArray allocations remaining and a few types of objects that are allocated far less often | 16:11 | ||
Geth | MoarVM: 7198eb8014 | (Jonathan Worthington)++ | src/io/procops.c Convey the process ID of a started child |
16:20 | |
timotimo | jnthn: do you think making getrusage fill an int array for you instead of allocating one every time it's run is sane? | 16:22 | |
*doc brown voice* if my calculations are correct, when this baby runs for 88 hours, you'll see some sick shit! | |||
hell yeah! | 16:33 | ||
ran for 300 seconds, 0 gc runs | |||
it doesn't look like it's allocating anything during its main loop | |||
jnthn | timotimo: Hmm, I guess we could | 16:34 | |
timotimo | i haven't looked at tweak-workers at all yet, fwiw, because in an empty program it doesn't run | ||
and if the program's doing work, it's probably fine for the supervisor to allocate because the other work stuff is also likely to allocate | 16:35 | ||
Geth | MoarVM: fdb5e4d6bb | (Timo Paulssen)++ | 9 files make getrusage op modify an existing array instead of allocating one in the op itself. |
16:55 | |
MoarVM/spesh-refactor-iffy: 5 commits pushed by (Bart Wiegmans)++ | 19:19 | ||
20:29
brrt joined
|
|||
brrt | \o | 20:31 | |
timotimo | o/ | 20:37 | |
Geth | MoarVM/spesh-refactor-iffy: 8fecf3bfae | (Bart Wiegmans)++ | src/spesh/optimize.c [Spesh] Add optimize_unbox The original optimize_iffy had a special loop for unboxing boxed integers (and other things). I've taken that out and generalized it for 'unbox' operations. But as far as I've been able to determine, that isn't actually effective (the optimization is never applied). Maybe that is because rakudo outputs better code than ... (6 more lines) |
20:45 | |
brrt | I am going to make a pull request for that | ||
timotimo | brrt: we probably have lots of p6box_i instructions, those would probably not be picked up by this opt, right? | 20:46 | |
brrt | it basically splits a bunch of optimizations in optimize_iffy in simpler optimizations that can be applied on individual opts | ||
timotimo | oh, it doesn't actually check for the opcode at all, nice. | ||
brrt | not sure, but that is plausible | ||
well, you wrote that code | 20:47 | ||
years ago | |||
timotimo | yeah, i only just recognized that it's mine :D | ||
brrt | it is correct, I think, but I don't think it is actually useful anymore | ||
because the actual optimization is not applied anywhere in nqp + rakudo build | 20:49 | ||
timotimo | right | 20:50 | |
i bet our coverage shows that | |||
moarvm.github.io/coverage/libmoar/....html#L372 - check it out! | |||
so it looks like we never reach safety_cur == cur; maybe because it doesn't try to cross BB boundaries? | 20:51 | ||
do you think the iffy refactor is ready to hit master? | 20:55 | ||
i really, really want some way to put messages about the spesh process right into the spesh log in an easy-to-reference place ... | 20:56 | ||
in graph 0x7f048c0c17f0 bb 0x7f048c1576e8 optimized an unbox coming from bb 0x7f048c157688 | 21:00 | ||
MoarVM panic: Register types do not match between value and node | |||
fun! | |||
21:14
brrt joined
|
|||
timotimo | this'll be a ginormous trace ... | 21:14 | |
no big deal, just 15 megs of diff | 21:16 | ||
gist.githubusercontent.com/timo/69...tfile1.txt | |||
gist.github.com/timo/c0381e1b84352...14e12bceaf - this tells you when exactly the unbox_i optimization took place | 21:17 | ||
what the heck? sometimes it switches to a different spesh graph | 21:19 | ||
that's why the diffs are so humongous | 21:20 | ||
because it's got a full copy of the one graph every few commits | |||
turned inlining off, now it's only 1.5 megs <3 | 21:26 | ||
gist.github.com/timo/31244796c1022...d872602682 - github still truncates it :< | 21:27 | ||
should be in commits f56ff15 and af2a4e2 this time, BBs 0x7ffff008c7f8 → 0x7ffff008c858 and 0x7ffff008cc18 → 0x7ffff008cbb8 should have the optimization in them | 21:28 | ||
aha! | 21:32 | ||
it was taking the result of the box_i (or similar) rather than the first argument | |||
surprise surprise it doesn't crash any more (in the exact same spot at least) | 21:33 | ||
not sure why, but i get a bunch of failures with telemetry again | 21:37 | ||
fails with spesh disabled, too, though ... so not my fault :D | 21:40 | ||
unless my optimization subtly broke the compiler | |||
nope, even if i build all of rakudo with spesh disabled it still fails those tests | 21:44 | ||
21:54
committable6 joined
21:55
committable6 joined
|
|||
lizmat | and another Perl 6 Weekly hits the Net: p6weekly.wordpress.com/2018/03/26/...ly-perl-6/ | 21:56 | |
timotimo runs a stresstest with the fixed version of optimize_unbox | 22:10 | ||
22:15
brrt joined
|
|||
jnthn | timotimo++ # nice blog post | 22:34 | |
timotimo | thanks :3 | ||
22:41
undersightable6 joined
22:52
undersightable6 joined
|