01:48 ilbot3 joined 05:11 geekosaur joined 05:35 domidumont joined 05:39 domidumont joined 06:02 domidumont joined 08:34 harrow` joined 08:36 psch_ joined
domidumont Weird, arm64 tests pass on a qemu chroot, but hangs on real arm64 HW 08:40
The hangs involve precompilation phase. It hangs only when the precompiled files are missing. See paste.debian.net/864333/ 08:41
When the test hang, the CPU is idle
HTH
brrt good * #moarvm 08:42
that definitely sounds like a deadlock too me 08:43
domidumont: ^
domidumont brrt: I've seen similar symptoms on qemu/arm64 chroot before this fix github.com/MoarVM/MoarVM/commit/17...a347920a64 08:46
brrt I'm puzzled as to why that should make a difference 08:47
domidumont it may be a mix of different issues. We also had test failure on armhf. As far as I know, only arm64 lead to tests hang 08:49
08:49 dalek joined, flaviusb joined, synopsebot6 joined, JimmyZ joined, BinGOs joined
domidumont Hmm, test don't hang with MVM_SPESH_DISABLE=1 08:55
anything else I should try ? 08:56
10:36 FROGGS joined 11:12 cygx joined
cygx o/ 11:12
another fun Unicode issue: github.com/MoarVM/MoarVM/issues/427
jnthn Yup, they went and added prepends...
Only a problem since Unicode 9 11:13
cygx and forgot to give a sensible update for the definition of base char
jnthn Not sure on ord yet
Question is if we want ord($c) and ords($c)[0] to be different 11:14
But as for deriving character properties, it's fairly clear we don't want to base *those* on the prepend
Same for the tc/lc/uc/fc 11:15
cygx keeping .ord as an alias for .ords[0] sounds ok to me (assuming a replacement like .base gets added) 11:17
jnthn .base is taken :)
I could probably go with changing .ord also
cygx .base-char, .unibase, .first-non-prepend-char ;)
jnthn I don't think we promised .ord and .ords[0] equivalence anywhere 11:18
docs.perl6.org/routine/ord#(Str)_routine_ord says "base char" :) 11:20
cygx then, all good ;)
jnthn aye :) 11:21
Talking of good things...lunch :) &
11:31 stmuk_ joined 12:49 zakharyas joined
cygx jnthn: in my long tradition of throwing out half-baked ideas, here's another one on how to deal with synthetics representing denormal and compatibility input: github.com/cygx/p6-newio/blob/master/synth32.h 13:00
13:12 ilmari joined
timotimo i'm watching Nicholas Ormrod's talk on "std::string at facebook" and they (in their fbstring) and clang (in their std::string) both have a representation of strings where short strings can live directly in the space that used to be for pointer, size, and capacity 13:54
we don't actually have a capacity value, so we'd have to make do with only 2/3rds as much space for "small strings"
though perhaps the member that'd usually encode what kind of storage we're using can become a part of this mess
oh, and of course their characters are probably 8bit
ok, i think this approach is not right for us. 13:55
they replaced std::string with fbstring and measured a 1% performance win across all of www.facebook.com 13:57
cygx well, we do special case ASCII strings, and for those, inlining the data into the MVMStringBody might be a win 14:03
depending on architecture and whether we want to cache the hash code or not, there's place for 10+ chars
timotimo we *do* special case them ... but we don't have any code that deals with ascii strings, if i'm not mistaken 14:04
like, i don't think a single 8-bit-per-char string is alive in any moar instance out there
especially since we still have to turn every string into a flat MVMGrapheme32 string in order to calculate hashes 14:05
cygx we do get a fwe special cases in strings/ops.c
*few
timotimo OK
ideally we'd be using the grapheme iterator api for everything
cygx or go the opposite direction: always use 32-bit codepoints, but flag the range (ascii-only, latin-1, 16-bit single-codepoint graphemes, 32-bit single codepoint graphemes) 14:08
[Coke] github.com/perl6/doc/pull/964/files#diff-0 - that's not a twigil.
... wrong window
cygx we could also put those into a flexile array mamber to reduce the number of allocations 14:09
*member
timotimo i'm not sure what you mean by that
you mean "this string never contains anything outside of 0..127" for example? 14:10
cygx yes
could be used for various optimizations
timotimo it'll allow us to fast-fail for same-length strings where one contains silly characters and the other doesn't and we want to eq them 14:11
cygx or encoding ASCII-only to UTF-8
timotimo mhm
cygx a flexible array member might not be a win if we then have to move the string contents around during GC 14:13
timotimo i don't know what "a flexible array member" is?
cygx struct { size_t size; uint32_t codes[]; } 14:15
pre C99, you used zero-length array for that
timotimo oh 14:16
we can't have that kind of thing yet
our GC doesn't understand that
cygx the GC does not support variable-sized objects? 14:17
where does the size live - the STable?
timotimo let me stop speaking about this and have a look before i embarass myself :)
the size actually lives at the end of the header of the object 14:18
jnthn The object's size can't change during its lifetime, but the size is stored in the header. But it's not intended you'll allocate large arrays directly into the nursery.
(The size is actually stored in 16 bits)
timotimo the only examples i know where we can have different sizes for object building is p6opaque and cstruct 14:19
in p6opaque, we allocate st->size bytes for the object
cygx I see
timotimo the thing about putting a string's body (or the same for arrays) inside the object itself is that it's only worth it if it's sufficiently small 14:20
on the other hand, that technique is usually combined with the fact that the objects are often allocated on the stack
cygx what could be tried is this: always have 32-bit units in regular strings but mark the range and embed short latin-1 strings directly 14:21
timotimo so you don't have to go from stack to heap at all, whereas we currently always allocate on the heap
cygx you could reserve a couple of bytes for that purpose at the end of the structure
arnsholt Putting the characters in the body of the string would save you a level of indirection though
cygx you would end up with regular 32-bit strings of RANGE_FULL, RANGE_ASCII, RANGE_LATIN1, RANGLE_BASIC16, RANGE_BASIC32, strands and embedded short latin-1 strings instead of the current variants GRAPHEME_32, GRAPHEME_ASCII, GRAPHEME_8, STRAND 14:24
might be a loss if there are a lot of long-ish
... GRAPHEME_ASCII, GRAPHEME_8 strings
timotimo i had a bit of code lying around for caching strings that are a single grapheme
it didn't seem to make a noticable difference when i was combing through a large string
jnthn The point of the ASCII/_8 variants is largely for people doing processing of really long but ASCII-based strings
e.g. bio-inf folks 14:25
timotimo maybe in the benchmark i was using all those strings were actually strands-based rather than actually containing the storage. maybe that's why the cache didn't get hit? 14:26
cygx is the grammar engine able to/supposed to be able to deal with such byte strings? 14:27
jnthn Well, the grammar engine just uses string ops
So "provided the ops support it"
timotimo the regex engine will always run "flattenropes" first, which currently forces a string into the grapheme32 storage format
jnthn We'll need to finish decouploing hash from flattening strings though
timotimo yes, very.
jnthn Once *that* is done, then a flat 8-bit string is fine for the hash
uh 14:28
for the regex engine
And it'll only be strandy things that need the flattening
cygx if byte-sized strings are supposed to become first class, they should stick around 14:31
MVMStrings.h also speculates about byte strings with synthetics - that would require the introduction of string-specific synthetic table (or rather tables for translation to the global one), correct? 14:33
jnthn No
More than in reality there'll probably not be that many synthetics 14:34
But perhaps it's better to just always go 32-bit once there are
Since if you do have synthetics, you'll probably have other non-8-bit things too
I suspect GRAPHEME_8 might want to go away
There was some thinking that you could do ASCII + use the negatives to compactly represent other codepoints 14:35
timotimo yeah, that'd totally be possible
jnthn So, for example, you can store something alphabetic like Russian in an 8-bit string
timotimo there'd have to be measurements
jnthn Which would be cool but...that's an optimization for some years into the future :) 14:36
14:39 ilmari joined
timotimo jnthn: could it be the cross thread write log has some trouble staying threadsafe? 15:04
gist.github.com/timo/a586bda606528...5370b66d8c 15:05
15:06 FROGGS joined
timotimo i'm not sure about the lifecycle of this stuff 15:07
FROGGS o/
timotimo why was spesh_graph_destroy freeing something that bytecode_finish_frame was allocating? 15:08
jnthn That's odd indeed 15:09
timotimo oh
here's a check that's probably bitrotted
jnthn I thought initial instrumentations took place under lock
timotimo "frees handlers array if different from the static frame"
if (!g->cand && g->handlers != g->sf->body.handlers) 15:10
probably wants to learn about not-yet-fully-decoded static frames?
or perhaps the first place we ask for the handlers from has to cause the sf to be fully decoded 15:11
dalek arVM: c1ada4b | timotimo++ | src/instrument/crossthreadwrite.c:
include debug_name in crossthreadwritelog

shows what type of object has been acted upon
15:24
timotimo i'd also like to give a bit more info on the operation performed. like what attribute name was accessed for example 15:25
FROGGS @all: is here somebody who has an arm system where rakudo compiles? 16:25
(and I'm not talking about a qemu system) 16:26
(nor a chroot) 16:27
(which would be qemu)
17:31 domidumont joined
domidumont FROGGS: arm64 hang-up are getting weirder: github.com/MoarVM/MoarVM/issues/428 17:45
FROGGS domidumont: can you post the output of lsof of the time it hangs? 17:48
domidumont: another option would be to run the hanging command in gdb 18:08
so it would be: time gdb --args /usr/bin/moar --execname=./perl6-m --libpath=/usr/share/nqp/lib --libpath=/usr/lib/perl6 --libpath=. perl6.moarvm t/04-nativecall/02-simple-args.t 18:09
and when you ctrl+c, you should be in gdb IIRC and would be able to generate a backtrace
domidumont FROGGS: I've added the output of lsof in gh ticket 18:37
FROGGS: the test does not hand when run under gdb (timing issue ?) 18:38
s/hand/hang/ 18:39
FROGGS domidumont: I have no clue why it hangs :o( 18:47
domidumont can't I active a trace, logs, to have a better idea what going on when it hangs ? 18:48
FROGGS timotimo: do we have something suitable? 18:53
domidumont it blocks on epoll_pwait(5, 18:54
I can provide the whole strace output
FROGGS that'd be awesome
domidumont github won't like it :o) (~ 1800 lines) 18:56
FROGGS: done 18:57
FROGGS: I can send you a file by mail if it's more convenient for you 19:00
FROGGS no, got it in my editor
timotimo if you have a tc
you can "call MVM_dump_backtrace(tc)"
in all of your threads
FROGGS well, but it hangs
domidumont: does it help prepending "no precompilation;" to t/04-nativecall/CompileTestLib.pm ? 19:13
also, could you output "tree t/04-nativecall/.precomp/" after a hang? 19:14
(I' need to by an arm64 machine)
domidumont let me try (I'd guess yes, since the test does not hang once the precompilation has been done)
FROGGS I'd*
nwc10 FROGGS: geizhals.de/raspberry-pi-3-modell-b...00349.html -- Raspberry Pi 3 Modell B ab ā‚¬ 33,53 19:15
although to be fair, I think that only FreeBSD currently tries to run as 64 bit, and I don't know how stable it is 19:16
FROGGS nwc10: and 1GB ram is enough?
nwc10 Might need to swap more for 64 BIT
I think I had some swapping buidling on a Pi 2 (which is ARMv7, so only ever 32 bit) and 1G 19:17
I had an external drive for swap, to avoid wearing out the SD card
anyway, the disclaimer on this is "ā‚¬ 33,53" but might be more trouble than your time is worth to get it working
FROGGS I once tried to build rakudo on an old raspberry 1 b+ with 512mb ram, and it just froze when compiling core setting 19:18
domidumont: what type of machine do you have?
nwc10 took 24 hours on a 256MB early Pi 1 B, but with an external HD 19:19
that was over a year ago
FROGGS domidumont: what we also could do is to run the test when the env var RAKUDO_MODULE_DEBUG is set to 1 19:22
domidumont same result with "noprecompilation": it does hand (but not always) 19:25
I'm using this machine : db.debian.org/machines.cgi?host=asachi 19:27
I've posted .precomp content on github 19:29
is that normal that .precomp has file even if "no precompilcation" is specified ? 19:31
FROGGS no, should be empty I think 19:32
I end up with two files less when I prepend "no precompilation;" to said file 19:34
domidumont getting a hang with RAKUDO_MODULE_DEBUG is harder ... but I got one
FROGGS awesome 19:35
would should compare a success and a fail
domidumont do you need the full trace ?
FROGGS yes
domidumont sent on github. 19:44
And that's it for today. It's getting late ...
Let me know if you need more, I'll resume tomorrow 19:45
timotimo FROGGS: when something hangs, just ctrl-c it a few times and see where it travels 20:08
FROGGS well, it is not hanging on my box, sadly
timotimo damn 20:09
FROGGS and there seems to be no output after hitting ctrl+c 20:11
timotimo in gdb, of course? 20:14
ctrl-c should drop you to the prompt where you can go through the threads and print their backtraces
FROGGS it does not hang under gdb 20:18