Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2014-02-18

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
08:57 mornfall joined #divine
14:25 spito joined #divine
17:21 spito je tam chyba....
18:36 spito xstill: jsi tu?
19:02 xstill jo i tady
19:04 spito http://pastebin.dqd.cz/LKC8/
19:04 spito tohle by mělo bouchnout na assertu
19:04 spito řádek 75
19:05 spito ale nějak se to neděje, verifikace divinem, aktuální stav
19:12 xstill hm, ty voláš reset ten to nastaví na 0 a isZero vrátí false -> jde se na assert, ale mezi tím mohlo dojít k ++c. tím pádem se shared.counter zvýšil a už není 0, mělo by to asertovat. Chápu to dobře?
19:13 spito přesně tak
19:13 spito ale to se prostě nestane
19:13 xstill což je dost divný
19:13 spito taky bych řekl
19:17 spito stalo se ti to také?
19:17 xstill ještě jsem to nezkoušel
19:17 xstill ale zkusím
19:20 xstill hm platí, ale 14 stavů, to je skara málo
19:21 xstill i když vypadají celkem v pohodě
19:23 spito nechal jsem to běžet bez redukcí, tak uvidim, co se stane :D
19:25 xstill poběží to sto let typuju
19:27 xstill potřebovali bysme breakpointy v simulate
19:29 xstill hm. ovšem ten skok z pthread_create na pthread_join v hlavním vlákně se mi vůbec nelíbí
19:30 spito ale ono tam něco proběhne
19:30 spito a když to samé udělám s proměnnou typu int, tak to funguje dobře
19:31 xstill int místo čeho, toho atomicu?
19:31 xstill hlavně ten model skončí v livelocku. Ty dva thready čekaj v tom while a main v pthread_join
19:31 xstill jinak se nic neděje
19:33 spito hmm
19:34 spito jak poznáš livelock?
19:36 xstill v simulate. jsi ve stavu který má všechny potomky navštívený, ačkoli jsi se ještě na žádný nepodíval. (to asi nemusí být jen livelock, ale tímhle jsem si dost jistej)
19:39 xstill hm, tak můj atomic za to nemůže
19:41 xstill nebo že by přece změna
19:44 xstill hm, s normálním atomic je tam vidět reset ale přesto tam je livelock asi
19:45 xstill nicméně pořád tam není to ++c
19:45 spito no ale to by se mělo projevit
19:46 xstill nojo, protože local != 0 asi
19:47 xstill ne blbost
19:48 spito to právě všechno sedí
19:48 xstill hm, to je od divine hezký, že mi řekne <ApproximateCounter::isZero()> [ libcxx/std/atomic:580 ] [ this = 37:0 <...> ], ale zrovna ty tři tečky jsou to co mě zajímá
19:48 spito a pokud za to ++c dáš assert(c.isZero()), tak to správně lehne
19:48 mornfall xstill: to cos popsal není nutně livelock, může to být klidně x -> y, x -> z, y -> a, z -> a (dfs bude x, y, a, z -- z nemá nové následníky)
19:49 mornfall xstill: ty tři tečky jsou něco co najdeš už předtím, hledej 37:0
19:49 xstill jo našel jsem je tam 0
19:49 spito mornfall: tak jsem si myslel, že dneska něco udělám, a ono nic
19:49 xstill ano nemusí to být livelock
19:50 xstill ale tentokrát je to dokonce tak že je to smyčka (resp. 3)
19:50 xstill což mi řekl draw pořádně
19:50 xstill chtělo by to self-loop indikaci v simulate
19:54 xstill hm ovšem to že reset změnil shared.counter z 1 na 100000 je dost zrada, ono to vypadá, že ten reset + ++c se provede obojí v jednom kroku
19:55 xstill což vysvětluje proč ti dva chudáci pořád čekají
19:56 xstill mornfall: jsi si jistej že změny globálních proměnných jsou vyditelný?
19:56 spito no, ono jsem si totiž uvědomil, že je v divine chyba - ten operátor ++ u ApproximateCounter je blbě
19:57 spito má tam být to, co je v řádcích 37 až 41 v komntáři
19:57 spito řádek 42 tam nemá být vůbec
19:57 spito a když jsem si to chtěl ověřit, tak mi to prostě nešlo
19:59 xstill hm, i když je to lokální proměnná tak to pořád neasertí
20:02 xstill hm až teprve když vrazím __divine_interrupt() na začátek operator++ tak to asertí
20:06 xstill mornfall: asi tam máš bug
20:06 mornfall veselé
20:07 mornfall aj když tam je int a ne atomic jo?
20:07 xstill to nevím, ale i když je tam originál libc++ atomic
20:13 xstill s intem to funguje zdá se
20:14 mornfall jo, a máte to s -O0 nebo s -O2?
20:14 spito jo, přesně
20:15 spito a default je co?
20:15 xstill default + s intem to funguje (= asertí)
20:15 xstill což je dost vtipné
20:15 spito a default je -O0 nebo -O2?
20:15 mornfall počítám že 0
20:16 mornfall s O2 bych chápal kdyby se clang rozhodl trošku ty __divine_* přešoupat
20:16 xstill žádný O
20:16 mornfall v „našem“ atomicu
20:19 xstill hm, ovšem udělá __interrupt_unmask zároveň novej stav?
20:19 xstill protože pokud ne tak můj atomic je blbě a to tak, že dost
20:20 xstill (divine/llvm/usr-atomic.h:135)
20:21 mornfall jistě že neudělá :-)
20:21 xstill mornfall: + typuju, že atomické instrukce nejsou load ani store a tedy nejsou viditelné a proto libc++ atomic taky nefunguje
20:21 mornfall jo, to bude ten druhej problém
20:21 mornfall atomicrmw musí být visible
20:21 mornfall (a není)
20:21 xstill jo 2 bugy najednou
20:21 xstill jdu oprvit ten atomic.h
20:22 xstill a ty kdyžtak oprav ten atomicrmw ať je to co chce
20:22 mornfall no, to je load + něco + store v jedné instrukci
20:22 mornfall (read-modify-write)
20:23 xstill šikovná instrukce -- to jako bere parametrem co má udělat?
20:24 mornfall ne tak docela, jen se tak píše
20:24 mornfall atomicrmw xchg pointer value
20:25 mornfall atomicrmw add pointer value
20:25 mornfall atd.
20:25 mornfall ale de-facto je to pro každou operaci samostatná instrukce
20:26 xstill aha
20:26 mornfall hm, že já nemam BINFMT_ELF v tom kernelu... (!)
20:26 mornfall funguje to stejně jako icmp nebo fcmp
20:26 xstill ?
20:26 spito takže (a teď pro blbečky) je blbě atomic a ještě něco v llvm?
20:26 mornfall no, vyrobil jsem kernel co nejde nabootovat protože řekne že /init nejde spustit
20:26 xstill to s tím kernelem jsem nepochopil
20:27 xstill aha
20:27 mornfall buď to, nebo BINFMT_SCRIPT
20:27 xstill spito: blbě je usr-atomic.h protože je moc atomickej (až tak že to neudělá novej stav)
20:27 mornfall to je tak když člověk dělá allnoconfig
20:28 xstill + je blbě to že atomické instrukce (které usr-atomic.h nepoužívá) nejsou viditelné
20:28 xstill a co je BINFMT_ELF?
20:28 xstill jako že to podporuje ELF?
20:30 mornfall jo, že umí spustit ELF binárky
20:30 mornfall (ano, i dnes jde postavit kernel bez podpory ELFu :-)
20:31 xstill to je dost vtipný, co na tom pak můžeš dělat?
20:31 mornfall nevim :-)
20:31 mornfall ale tak můžeš tam nacpat BINFMT_AOUT třeba
20:32 xstill to nevím co je, ale to je asi jedno
20:32 mornfall no, COFF počítám
20:32 mornfall nebo něco v tom smyslu
20:33 mornfall hm, ne, a.out je asi ještě starší než coff
20:37 mornfall ifconfig: socket: Function not implemented
20:37 mornfall no, už to aspoň spustí init :-)
20:37 xstill o co se to pokoušíš?
20:37 mornfall vyrábím (relativně) minimální kernel na testování
20:39 xstill testování čeho?
20:40 mornfall kernelu :-) resp. nějakých dm věcí v něm
20:41 xstill to ses stal vývojářem kernelu?
20:41 mornfall ale ne, to by mi ještě chybělo
20:41 xstill :-D
20:44 spito ne každý má potřebu, aby si s ním vytírar Torvalds prdel.....
20:51 xstill to teda
20:51 xstill hm, a githubu se nějak seklo rss
21:30 xstill tak a jelikož jsem dneska už něco udělal tak jdu spát
21:44 mornfall :-)

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary