github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
02:10 AlexDaniel joined 02:27 ggoebel joined 02:32 ggoebel left 03:53 Kaiepi left 04:35 Kaiepi joined 04:52 MasterDuke left 05:52 domidumont joined 07:28 zakharyas joined 08:47 brrt joined
brrt \o 09:12
nwc10 o/ 09:13
brrt I think the only thing left for FPR support is spare register selection, and maybe something for function calls 09:20
timotimo that doesn't sound like a terribly big amount of stuff! 09:29
brrt it's not 09:46
and the good thing is that this mostly falls out of treating register sets as bitmap consistently
timotimo nice. 09:47
MFW a process spends 20% self time in mvm_fixed_size_alloc, which is often called by MVM_exception_backtrace via MVM_repr_bind_key_o 10:09
the heck are all these backtraces
20% of the process' time is spent in run_gc, really? 10:12
10:12 domidumont left
jnthn o.O 10:14
timotimo this is htmlify.p6 in perl6-examples 10:15
though it's running on a machine that's low on ram
ugghhh i don't get any variables in gdb 10:16
No symbol "MVMThreadContext" in current context. 10:17
omfg
i wonder if it's literally running in a loop that does nothing but "throw exception, catch exception, retry" 10:18
jnthn --profile it? :) 10:19
timotimo i don't wanna start from the beginning :D
though a guess it's all the same
also, it doesn't finish running
a sampling profiler would be great here :P 10:20
cough cough
11:26 zakharyas left 11:38 domidumont joined 11:42 domidumont1 joined 11:45 domidumont left 11:51 ggoebel joined 12:43 brrt left 12:54 zakharyas joined 13:00 pamplemousse joined 13:29 sena_kun joined 13:57 Kaypie joined 13:58 dogbert17 joined 14:00 nebuchad` joined 14:01 klapperl_ joined, Woodi_ joined, scovit_ joined 14:06 Kaiepi left, dogbert11 left, klapperl left, jpf1 left, scovit left, Woodi left, nebuchadnezzar left 14:07 brrt joined 14:09 nebuchad` is now known as nebuchadnezzar 14:11 jpf1 joined 14:16 domidumont joined 14:18 domidumont1 left
brrt \o 14:35
pamplemousse o/ 14:39
timotimo o/ 14:41
brrt pamplemousse: not sure I told you yet, but if you do get yourself a blog, lizmat will be able to post it on the perl6 weekly 14:46
pamplemousse That's nifty. I'm going to try to get something written up on Friday about what I've done so far 14:51
15:00 domidumont left
pamplemousse I looked through the github issue notes. When I use gdb to step through things, an unhandled exception "Cannot find method 'name' on object of type Perl6::Metamodel::ClassHOW at gen/moar/BOOTSTRAP.nqp:3720" throws when it hits this line: github.com/rakudo/rakudo/blob/mast...ain.c#L392 15:02
Going through the valgrind output, I still think the invalid read traces to github.com/MoarVM/MoarVM/blob/mast...oop.c#L299
Stepping through, I can't get to that point in the code because it throws the unhandled exception, and I can't set a breakpoint there because gdb can't find eventloop.c, and I can't tell how it's being linked into ./install/bin/perl6
Any thoughts? 15:03
timotimo it completely refuses your breakpoint? 15:05
pamplemousse It says that there's no source file with that name and asks if I want to make a breakpoint pending on future shared library load. If I go ahead and make the breakpoint, it never hits it. 15:06
timotimo can you check what CFLAGS were used in moarvm's Makefile and rakudo's Makefile? 15:12
perhaps something is preventing the --debug from working right
pamplemousse Sure, can do. One sec 15:13
brrt pamplemousse; that commonly happens when moar isn't bootstrapped quite correctly 15:18
(there's a bunch of initialization to do)
my current, not-quite-foolproof solution is one of the following:
-- either I start gdb with --args, followed by the complete command line
- or I write a script, setting the correct directory, setting the args, setting the executable, and load that 15:19
I agree that's the line that is the invalid read, but I'm really confused where that should be freed
I don't think your problem is necessary the debug CFLAGS 15:20
in gdb, 'show args' 15:21
pamplemousse timotimo: The rakudo cflags includes -g3, and moarvm's includes DMVM_TRACING, DMVM_CGOTO, and DMVM_RDTSCP. Those are all the differences. 15:24
brrt: That's how I'm currently calling gdb 15:25
brrt hmmm
are you sure you are in the right directory?
that your working directory is correct
timotimo pamplemousse: would you be okay with giving us ssh access to your computer for co-operative tmux sessions or so? 15:27
brrt timotimo: even I don't know how to do that :-P
timotimo oh? 15:28
brrt presumably you do, though
timotimo it's super easy and potentially a fun team building exercise ;) ;)
it's like a trust fall
pamplemousse Sure, I'm not sure how to do that though
timotimo if you let someone onto your machine via ssh they could do *anything*! 15:29
brrt well, anything that account can do
timotimo OK, we'll need a whole bunch of prereqs, though
that's true. but who goes around making extra accounts for special situations like that!
brrt I would 15:30
timotimo you'll of course need to be running an sshd and give one of us access, ideally with ssh public keys, so that nobody can guess a password or so
brrt Not good at trust building exercises maybe
timotimo and have whatever port you're running the sshd on forwarded to the open internet
if you have an ipv6, there may not be a NAT in between you and the internet, so that could perhaps be easier 15:31
pamplemousse Do you have a tutorial you could point me to that could walk me through setting this up? 15:32
brrt ubuntu does: help.ubuntu.com/lts/serverguide/op...er.html.en 15:33
timotimo i'm actually going semi-afk now :o 15:38
brrt is going for dinner
timotimo but brrt, all you need to do to tmux cooperatively is "tmux a" from two terminals, and it should work immediately
brrt I see
15:43 brrt left
timotimo you can also specify the tmux socket path and chmod it so that both unix users have access 15:43
that's a little less dangerous, but the "guest" user can still open more windows and do nefarious things in the background 15:44
15:49 discord6 left, discord6 joined
pamplemousse I don't have a fixed IP and am behind multiple layers of NAT that I don't have rights to set up port forwarding 15:50
I have the sshd set up but I can't set up port forwarding 15:51
15:58 brrt joined
brrt that's going to be difficult then 16:02
brrt is thinking of a way out 16:04
so. I can't get it to trigger either 16:17
that's odd
timotimo pamplemousse: any ipv6 connectivity? 16:18
brrt oh, now it works 16:19
pamplemousse No, no ipv6 connectivity. 16:20
brrt I may have a theory... 16:27
timotimo why don't we set up a perl6 contributor VPN ...
pamplemousse: do you have ssh access to a server that has an open port that you're allowed to use?
pamplemousse timotimo: Possibly. I'll have to get back to you on that. 16:28
timotimo networking, y u so hard 16:30
brrt networking engineers get paid crazy money i'm told 16:32
pamplemousse I'll put in a request and it would probably take a bit of time, but could be possible in the future. 16:33
timotimo i would invite you onto my ssh server, but all that gets us is that you can work on your problem on my computer where the problem doesn't appear
what we could do if we were silly, which perhaps we are, is that you can connect to my ssh server, but only forward a port; the remote port would listen on my computer and connect to a port on your computer locally 16:34
hm. with socat we might be able to just set that up without ssh 16:35
brrt pamplemousse: the other thing you can do, of course, is to have a printf in the right place :-)
timotimo oh, huh, what are filan and procan
brrt This just looks much, much weirder than I thought it would 16:36
timotimo pamplemousse: can you install "socat"? let's try something wild 16:38
oh, food's herek 16:39
pamplemousse timotimo: I can, but the fun, wild solution may be more trouble than it's worth if my request winds up going through fairly quickly. 16:41
timotimo it'll be great, though! 16:43
i locally have socat TCP-LISTEN:5900 TCP-LISTEN:5901
you will have TCP:85.216.40.52:5900 TCP:localhost:22 16:44
i think 22 is the ssh port?
if you can run that real quick we can see if it works
pamplemousse: ^- ? :) 16:47
16:48 pamplemousse_ joined
timotimo ah! that's not the port i have forwarded! 16:48
pamplemousse_ Sorry, connection cut out.
timotimo TCP:85.216.40.52:4900 TCP:localhost:22
that is the command that should work 16:49
16:49 pamplemousse left, pamplemousse joined
timotimo hey, you're on an ipv6 now! 16:49
16:50 pamplemousse_ left
timotimo anyway, food's getting cold :o 16:50
pamplemousse You should go eat, sorry for keeping you from your food. I'll install socat and see if I can run the thing 16:52
timotimo i can look at the screen from the corner of my eye
of course when you made the connection nothing happens until i try to connect to my local thingie 16:54
omg i misread the port number *again*
it's actually 4009
pamplemousse Alright, I think I've made the connection 17:01
brrt \o/ 17:03
17:06 brrt left
timotimo OK, i tried to connect and it went unhappy 17:07
we'll try again after i eated 17:08
pamplemousse Alrighty
17:10 zakharyas left
timotimo OK, let's see what this is all about 17:18
launching socat with -d should give a bit of information. i also have -D but that seems to be mostly a lot of output that i don't know how to properly parse
pamplemousse My connection is being refused 17:24
timotimo let me try again
i'm running it. 4009, right? 17:25
pamplemousse Yep, 4009. I'll try again
timotimo wait, i might have put it the wrong way around again
try again please 17:26
pamplemousse Alright, it's hanging now, but it's not refusing the connection
timotimo that probably means it's connected
now i'm connecting ssh to it
nothing's happening tho :|
i'll kill my socat, tell me if your socat quits, too
with -d -d i get a message that it's listening 17:27
pamplemousse It's no longer hanging, but it didn't give me any message (I also used -d) 17:28
timotimo try two -d in a row
i wonder if it's necessary to switch the two arguments around on your end or if it makes no difference 17:29
oh, i should also ask, does the ssh server run already?
pamplemousse Yes, it does
timotimo if not we can fake a server with socat, too, though listening on port 22 requires root privs of course 17:30
17:31 robertle joined
timotimo does -d -d give any particular output? 17:32
aha!
2019/05/21 19:32:47 socat[27084] N accepting connection from AF=2 24.126.148.100:62526 on AF=2 192.168.0.73:4009
2019/05/21 19:32:47 socat[27084] N listening on AF=2 0.0.0.0:4010
The authenticity of host '[localhost]:4010 ([127.0.0.1]:4010)' can't be established. 17:33
ECDSA key fingerprint is SHA256:H0+q4e1oHapQB8EzjcKyJjDXWPTmRy+uJUtWM30ijTQ.
i expect that's your server
that's great
now all i need to do is give you my ssh public key so that you can put it into ~/.ssh/authorized_keys and you give me the username you did that for
pamplemousse Okay 17:35
timotimo github.com/timo.keys - the first one is the right one, i believe 17:36
yes, it is the right one 17:37
anyway, i started the socat thing up again 17:38
you'll also have to make your ~/.ssh and ~/.ssh/authorized_keys unreadable for anyone but your own user
i.e. chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys 17:39
at least i think that's right?
pamplemousse Okay, I'll let you know when I have that done 17:40
timotimo thanks
sorry it's such an arduous process, i thought it'd be easier :|
pamplemousse It's alright, thank you for walking me through it 17:42
17:46 Kaypie is now known as Kaiepi 18:15 sena_kun left 18:16 sena_kun joined 18:31 pamplemousse_ joined, pamplemousse_ left 18:33 pamplemousse_ joined
pamplemousse_ timotimo: I think I have everything set up now 18:33
18:34 pamplemousse left, pamplemousse_ is now known as pamplemousse
timotimo cool 18:35
i hope i'll actually be able to help at all, lol
pamplemousse Hopefully :) 18:37
timotimo OK, what's the username? 18:38
i see the connection
pamplemousse It's timotimo
18:38 sena_kun left
timotimo cool, i'm connected 18:38
though i shouldn't be connecting with -vvv, else it'll regularly spam my terminal with debug messages in the worst moments 18:39
18:39 sena_kun joined
timotimo ok, do we start a tmux session as "timotimo" or do i connect to a socket you make available to me? 18:39
i believe you'd "tmux -S /tmp/this-socket-belongs-to-everyone" 18:41
chmod the file it creates so timotimo can have it 18:42
pamplemousse Alright, I've done that 18:47
timotimo look, it's spooky action-at-a-distance 18:48
pamplemousse Are you connected? I can't see anything different. Do we need to be logged in as the same person? 18:51
This is my first time using tmux
timotimo i am connected
are you looking at the terminal you did the chmod in?
pamplemousse I see you now, thanks 18:52
Kaiepi iirc if you can't figure out how to exit tmux you just need to press <return><return><tilde><period>
i think it uses cu 18:53
timotimo that will at least kill an ssh session 18:54
pamplemousse: i'll try switching to a different window, tell me if it switches for you, too
Kaiepi i'm wrong, it has its own set of special commands
timotimo the prefix is ctrl-b and then you can do all the things, though of course ctrl-b can be changed 18:55
pamplemousse: the command is still with -e 'for ^2 { my $cmd = run Ā« echo 1 Ā», :out; $cmd.out.close }' ? 18:57
pamplemousse Yep, it is! I was double checking I had it right 18:59
timotimo OK, should we just try running it first?
pamplemousse Sure
timotimo is thath ow it usually breaks? 19:00
pamplemousse Yes
timotimo let's see if we can somehow breakpoint that
i see that's the only thing it prints 19:01
pamplemousse It happens when you try to execute this line, if that helps: github.com/rakudo/rakudo/blob/mast...ain.c#L392 19:03
timotimo i see the quality of debug symbols is kind oflacking
there isn't actually a -g in the CFLAGS 19:04
let's try running Configure.pl again
looks like the user we're sharing has no access here 19:05
if you run the tmux as the madeleine user we'll have shells that can access all that
i'll quit tmux right quick
pamplemousse Whoops, sorry about that. 19:06
timotimo no prob
actually i only detached from the tmux session i think? the socket file at least still exists in /tmp 19:08
pamplemousse Sorry, I'm a little lost. Should I remove the socket file? And then use the same command as earlier to start the tmux session? 19:11
timotimo that ought to work 19:12
is your user in the perl6_people group, too? you may have to chgrp the socket to that group for me to access it 19:14
dogbert17 hmm, just ran a profile on htmlify.p6 while generating the p6 docs 19:15
timotimo i hope it didn't crash? 19:16
dogbert17 not with MVM_SPESH_DISABLE=1
timotimo ow
dogbert17 it didn't crash with spesh enabled either but all memoey and swap was gobbled up
pamplemousse Yes, my user is. 19:17
dogbert17 anyway, the profile is 31 megs in size
timotimo that's not too bad for the sql-based profiler at least
pamplemousse: can you chgrp perl6_people /tmp/this-socket-*
dogbert17 if the numbers in the routine tab, sorted on exclusive time, is to be believed 99% of the time is spent in ThreadPoolScheduler.pm6 19:18
pamplemousse timotimo: done 19:19
lizmat dogbert17: that's an artefact of multi-threaded programs, afaik
timotimo dogbert17: yeah, it's probably some threads that are just waiting for work to appear
dogbert17 the wors offender is line 612 followed by 278 and 304 19:20
*worst
lizmat 612 is the scheduler loop 19:21
dogbert17 aha
timotimo pamplemousse: the -- in front of debug=3 were missing
it should probably spit out an error for something it doesn't recognize 19:22
lizmat dogbert17: the other two are the general worker started and the affinity worker starter
well, actually the code waiting for stuff to do
timotimo there's a big difference between wallclock and system/user time there, but i'm not sure how to measure that properly
pamplemousse: how many cores does that machine have? 19:23
dogbert17 isn't that a bit of a false positive then, i.e. the waiting? 19:24
timotimo it kind of is, but it is where it's spending time
pamplemousse timotimo: It has 1. It's a VM. I can change it and reboot the VM if needed 19:25
timotimo no need, would just make compiling moarvm faster
dogbert17 The profiled code did 12350 garbage collections. There were 17 full collections involving the entire heap. 19:28
timotimo pamplemousse: i see the thread it just switched to is still running code while the main thread is doing the gc_global_destruction 19:31
that's probably Very Badā„¢
pamplemousse That's doesn't sound very good, no 19:32
*That
timotimo i'm not sure why the Hello World only comes through once the main thread's IO loop is destroyed?
oh, the hello world doesn't belong to the program being run 19:33
that only does "echo 1"
pamplemousse No, I plugged that in to see if I was even getting that far before things failed out.
Sorry, misleading print statement
timotimo nah, i do that all the time, too
where does that print statement live? 19:34
pamplemousse It's at MoarVM/src/io/eventloop.c:293 19:35
timotimo the ssh connection has quite some delay from typing to seeing what's up, so i wouldn't want to browse the source over there
pamplemousse Sorry things are so slow. 19:36
timotimo are you from the US? :D
*in* the US 19:37
pamplemousse I am
Yes to both, I mean 19:38
The print statement is right before this line: github.com/MoarVM/MoarVM/blob/mast...oop.c#L293 19:39
timotimo IIUC, ISPs have divided up the US with fixed borders, so they don't have any competition at all and can be as awful as they like
i just tried it locally with valgrind 19:40
it looks like doing the uv_loop_close tries to use the instance->event_loop_wakeup while it's going through everything during the uv_loop_close thing
so it may be enough to move the MVM_free of instance->event_loop_wakeup to below the uv_loop_close 19:41
well, i say "enough", but really it'd only get rid of the first failure we can see
pamplemousse Yep, our connection is pretty darn slow most the time and at home, I only have one provider I can get internet through. Not really ideal. Most places only have one ISP. 19:43
timotimo i just made that change on your VM 19:44
the US of A is a joke :( :(
i think we only get the "cannot find method 'name'" error because the VM has only one core and it'd have to do a very lucky switch between the threads to explode in that other way 19:45
locally i see it exploding trying to gc_free a mutex inside a MVMConcBlockingQueue 19:46
i'm not sure which one it is, but it could very well be the job queue for the ThreadPoolScheduler 19:47
hah, i wanted to dump a backtrace from the other thread 19:48
but of course the instance is already half-destroyed
so it kind of can't
but yeah, one thread is in pthread_cond_wait on the mutex while the other is trying to uv_mutex_destroy it 19:49
the man page for pthread_destroy or whatever it uses says that leads to "undefined behaviour" which in this case is aborting it seems like
we could do something very bold and signal the condition variable before we destroy it 19:51
no, that just means another thread will immediately take the lock itself to do whatever
pamplemousse Sorry, I'm a little lost on where the gc_free that's making it explode is. 19:54
timotimo oh, i'm talking about the crash I get 19:55
let's see what valgrind says about the "cannot find method" one
19:56 robertle left
timotimo if you want to reboot the VM into two cores mode, it'll probably get the crash i'm talking about as well, though only sometimes i guess? 19:57
pamplemousse Okay, I can do that. One sec 19:58
20:07 Kaiepi left 20:08 Kaiepi joined
pamplemousse timotimo: I can see the same crash now 20:10
timotimo i started the socat again 20:15
20:16 sena_kun left
pamplemousse Alright, I'm connecting 20:16
timotimo the socket needs the chgrp again 20:17
pamplemousse Okay, done 20:19
timotimo i should probably point out that valgrind will not simulate multiple threads at the same time, so it won't be useful for this particular crash
pamplemousse Good to know 20:20
timotimo ctrl-b [ will turn on "scroll/copy/select mode" 20:21
which is what's on right now
you can tell by the thing in the top right, the [0/36]
oh, cool, it did get that crash even with valgrind
you can get out of that scrolling mode by pressing q 20:22
OK, i'm not sure what to do next
like, can we get cleaning up at the end to be safe without every code that uses mutexes to know about vm shutdown? 20:23
or is it perhaps enough to send a special "btw shut down now please" event to the event queue that the ThreadPoolScheduler listens to 20:25
pamplemousse I think that's a question for someone more familiar with things than I am. 20:28
timotimo right, i might even say "invoke the jnthn" 20:29
but moving the MVM_free for the eventloop_wakeup or what it was can probably go in already
pamplemousse Alright. I can commit that change and make a pull request 20:30
Thank you so much for all your help today
timotimo was this the task to get a start at the moarvm codebase?
pamplemousse Yes, it was
timotimo always happy to help contributors :)
jnthn At the end of the day, if we want to really get mutex cleanup right, I think we'd have to do as the JVM does and implement them ourselves. 20:34
timotimo can i say "ugh" :) :) :)
jnthn Basically, use a condvar per thread for it to be able to be suspended/awoken efficiently 20:35
And so we control the only real OS-level mutexes that exist
Yes, it's some work, and probably has its own cons, though do-able
timotimo hm, so when we signal any mutex we'd look through all threads to see if they are currently waiting on it? or something? 20:36
and then signal their condvar as a stand-in for the actual condvar that was signaled in the first place? 20:37
jnthn Pretty much 20:38
timotimo there's probably some documentation on how best to manage the "which thread is waiting on which mutex" data 20:39
so that if we have like a hundred threads we're not in trouble
also, we've got that mutex we have to lock if we want to go through the list of threads, too
20:51 MasterDuke joined 20:52 MasterDuke left, MasterDuke joined 21:06 sena_kun joined
Geth MoarVM: pamplemoussecache++ created pull request #1103:
Move freeing of event_loop_wakeup to after uv_loop_close
21:27
jnthn pamplemousse++ # first PR 21:38
21:55 pamplemousse left
ugexe github.com/MoarVM/MoarVM/commit/2f...07ddab9e62 this is where windows starts failing that test 23:01
timotimo i wonder if the mp_int types are different on the windows machine for some reason 23:03
MasterDuke what version of libtommath are we using? maybe there's a newer version
timotimo like, libtommath has support for changing the sizes of some of the datastructure parts with defines
but i don't think we do any of that on a per-platform basis
23:04 tobs left
MasterDuke git describe in 3rdparty/libtommath say v1.0-rc2-15-g289e346, but it looks like they have a v1.1 tag upstream 23:05
these two changes might be relevant github.com/libtom/libtommath/blob/...xt#L14-L17 23:06
23:06 sena_kun left
timotimo do we still have our own fork of libtommath that we include? 23:07
i think we might not actually be using the build system of libtommath
they have mp_set_double and mp_get_double in 1.1.0, we might have our own implementation of that feature that we could replace with something from libtommath 23:08
23:11 Kaiepi left 23:12 Kaiepi joined
MasterDuke i don't know how to updated submodules, but if someone creates a PR doing so for libtommath we can see if that fixes anything 23:12
ugexe wouldnt we first have to identify the non upstreamed changes?
timotimo you cd in, you git fetch the remote and git checkout the right commit, then you cd out and "git add" the submodule, then you commit
so pretend the whole folder is just one file, basically 23:13
except you can't just do changes in the submodule's files, then "git add"ing the changes from the outside repository
ugexe also you have to script those steps on windows 23:15
s/have to/can/
making the change in the rakudo repo wont work actually, because it needs an older rakudo to do this on appveyor 23:17
23:18 tobs joined 23:30 ggoebel left