Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-10-03

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

All times shown according to UTC.

Time Nick Message
00:01 divine-buildbot joined #divine
00:11 divine-buildbot Hey! build divine-nightly-release #14 is complete: Failure [finished]
01:01 divine-buildbot Hey! build divine-nightly-debug #14 is complete: Failure [finished]
01:48 ilbot3 joined #divine
01:48 Topic for #divine is now DIVINE: A Parallel LTL Model Checker (http://divine.fi.muni.cz) | http://irclog.perlgeek.de/divine/
08:07 mornfall a ano, source je bash-specific
08:14 yaqwsx joined #divine
08:38 yaqwsx joined #divine
08:39 yaqwsx std::exit je teda peklo...
08:46 mornfall jakto?
08:46 yaqwsx Dělá to spoustu věcí v daném pořadí a rozhodně to není implementace na 4 řády, jak jsems i myslel.
08:48 mornfall no, to se všechno realizuje nějakým atexit/destruktorama, ne?
08:49 yaqwsx +- ano, ale je to potřeba naimplementovat.
08:56 evenfall jakto?
08:56 evenfall teda co z toho?
08:56 evenfall můžou nefungovat globální destruktory, ale atexit je a testujeme ho
08:57 yaqwsx Ještě jsem to pořádně nedostudoval, jen jsem se původně chtěl podělit o mé zaskočení. Zatím to (snad) zvládnu vyřešit sám.
08:58 evenfall jako std::exit je alias na exit z libc
09:02 xstill_ mornfall: co ten patch na pthreadové inicializátory?
09:21 mornfall však už je pullnutej
09:22 mornfall jinak 'not new hack' je dost těžce pochopitelný
09:22 mornfall a missing bit initialization tracking taky
09:48 xstill_ nojo :-/
10:22 yaqwsx Jak se DIVINE staví/bude stavět k memory leakům z DiOSu? Momentálně se při zavolání exit neuvolní paměť pro argumenty mainu - je to třeba řešit?
10:24 mornfall yaqwsx: no, leaky ještě moc dořešený nemáme celkově, takže bych to zatím nechal
10:24 yaqwsx Ok
10:32 mornfall yaqwsx: jo, ten extern C bych u __dios_main nechal protože to je dost často vidět v backtrace
10:32 mornfall a spíš bych to přejmenoval na entry nebo tak něco
10:33 yaqwsx __dios_entry?
10:33 yaqwsx Ok, můžu změnit. Ten patch odebírající extern C máš pullnutý?
10:34 mornfall nevim a nemám
10:35 yaqwsx BTW: Už jsem se tím prokousal a zjistil jsem, že exit je nakonec triviální - všechno už je naimplementované, stačí to zavolat :)
10:35 mornfall jo, to jsem se zhruba snažil říct :)
10:35 yaqwsx ...já si na to musel přijít sám! :D
10:36 mornfall nevim jestli to náhodou nepojmenovat přímo _entry
10:36 mornfall to je takovej tradiční název
10:36 yaqwsx Ok, změním.
10:39 xstill_ podle mě kdyžtak __entry
10:40 xstill_ protože _entry je normáně validní název funkce kterou by někdo mohl chtít mít
10:41 mornfall jo, ono se to totiž jmenuje _start ne _entry
10:42 xstill_ ajo, mě se to zdálo divný
10:47 divine-buildbot Hey! build divine-next-debug #67 is complete: Failure [finished]
10:47 mornfall teď by to chtělo odkaz na log ještě :)
10:48 mornfall (ideálně plaintext kterej můžu rovnou curl-nout)
10:49 mornfall to buildbotový gui je fakt děsivý
10:55 mornfall to používá nějaký sqlite asi co? kdyby tomu šel nastavit postgres, tak by to asi bylo nej (autentizovat se kerberos heslem do API se mi moc nechce a mít to celý veřejný asi taky není žádný terno)
10:57 mornfall mám tady takovej super článek k recenzi... /o\
10:58 mornfall kdo by se chtěl pobavit, arke:/tmp/JSS-D-16-00377.pdf
11:15 yaqwsx Přeji příjemné čtení!
11:27 divine-buildbot Hey! build divine-next-debug #68 is complete: Failure [finished]
11:30 xstill_ no postgres tomu jde dát
11:30 xstill_ k čemu bys to chtěl? (krom toho, že to to sqlite časem přestane dávat)
11:32 mornfall abych si z toho mohl přečíst data jako člověk, hlavně
11:33 xstill_ fakt se ti to bude číst líp z postgresu než z webu jo?
11:34 mornfall no takhle, na webu ty buildy furt někam cestujou, když na něco kliknu tak se to 10 sekund rendruje a když se doklikám k logu tak nefugnuje pgup/pgdown protože to je v něajkým debilním vnitřním rámci s vlastním scrollbarem
11:35 mornfall (cestujou jakože ten dashboard nemá fixní layout, takže musim hledat ten build co mě zajímá)
11:35 xstill_ jo no, chtělo by to tu ten odkaz na raw verzi
11:36 mornfall nevim jakej smysl má načítat všechno ajaxem, když kliknu na build tak to vypadá že se to načetlo a nic tam není a po nějaký době tam naskáčou build steps kde je odkaz na log
11:44 xstill_ mě by asi stačilo kdyby se ten raw dal zobrazit v prohlížeči
11:47 mornfall to mi zrovna teď hází 404 nebo tak něco
11:48 xstill_ já bych to taky mohl updatovat toho buildbota
11:48 mornfall https://paradise.fi.muni.cz/api/v2/logs/1345/raw tohle asi není moc OK URL
11:49 mornfall (někde tam chybí /builds/ nebo něco)
12:23 mornfall xstill_: ty buildy běhají na pheme? je možný že tomu dochazí paměť?
12:24 mornfall na arke totiž ten test co ho buildbot zabije po 20 minutáhc skončí za necelých 10 minut
12:32 xstill_ hm, že bychom měli test kterému nestačí 16 GB?
12:32 xstill_ mornfall: co je to za test?
12:32 mornfall no, on to samozřejmě buildbot utne
12:32 mornfall ale počítám že ###       passed: [vanilla] cpp/thread-except.cpp 543
12:33 mornfall však to vidíš v logu že to timeoutuje ne?
12:33 mornfall nicméně ten test určitě není mrtvej, kdyby umřel divine tak to brick-shelltest po minutě ticha zabije sám
12:34 mornfall hm, po 10 minutách, ale to je jedno
12:34 mornfall asi není dobře že to buildbot zabíjí
12:36 xstill_ tak pokud to na arke doběhne za 10 minut tak to na pheme klině může běžet 20, ony jsou dost pomalý
12:36 xstill_ hm, ale v logu nevidím, na kterým to zdechlo
12:37 mornfall no protože buildbot to killne místo toho aby tomu třeba zkusil poslat SIGINT a zabil to až později
12:39 divine-buildbot joined #divine
12:39 xstill_ nastavil jsem timeout na 2 hodiny (ten co byl na 20 minut)
12:39 xstill_ je to timeout na nevyprodukování žádného výstupu
12:42 xstill_ ale pokud to trvá tak dlouho tak máme ty výjinky fakt pekelně pomalý
12:50 xstill_ bych to mohl nechat rebuildnout
12:51 xstill_ tak ten timeout v brick testech buď není nebo rozhodně není 10 minut
12:51 mornfall jakto?
12:51 xstill_ protože mi to tu měží dýl než 10 minut
12:51 mornfall a?
12:51 xstill_ tím pádem tam určitě není 10 minut timeout
12:51 mornfall však to furt píše progress
12:52 xstill_ jo to jo
12:52 xstill_ nebo teda když to jede na terminálu tak to píše ty sekundy
12:52 xstill_ ale do buildbotového logu asi ne, protože tam nejsou
12:52 mornfall ale ten timeout v bricks je na výstup
12:52 mornfall takže to že to běží deset minut neříká zhola nic
12:53 xstill_ jo tak; na pythia01 to skončilo za 401 sekund, takže je klidně možné že to běželo 20 minut na pheme
12:53 mornfall (a je to deset minut nejspíš protože předtím verify nic nepsalo než nedoběhlo, klidně by se to mohlo vrátit na tu minutu co je default)
12:53 mornfall [ 9:03] found 182524 states and 183120 edges in 8:45, averaging 347.2 states/s
12:53 mornfall to na debug build není zas tak zlý
12:54 mornfall z arke
12:55 xstill_ jo to je dobrý, jen ten test je obrovskej
12:56 xstill_ zkusím docpat do unwinderu nějak smysluplně masky
12:56 mornfall komentář v testu "not not disable ... this test, it is rather small"
12:56 xstill_ asi jsem to blbě zkoušel…
12:57 xstill_ aha jasně, já to zkoušel když tam byl ještě ten bug
12:57 xstill_ to je reálně jedinej test co najde ten bug co byl v libc++
12:59 xstill_ máme nějaké maskovací RAII?
12:59 xstill_ protože tohle maskování přes __vm_control vypadá hrozně
13:00 mornfall myslíš InterruptMask?
13:01 xstill_ jo
13:01 mornfall no, je furt tam kde bylo (dios.h)
13:04 xstill_ jo ten test na pheme běží 1218 vteřin…
13:05 xstill_ (v release u mě 13…)
13:09 xstill_ hm, jsem tam přidal masky a přidalo to 40 stavů
13:09 xstill_ ještě teda zbývají masky v raise
13:10 mornfall no, raii a unwinder asi moc kamarádit nebudou
13:11 xstill_ tam je spoustu věcí které nejsou unwind a dělaj docela dost cyklů a tak, ale překvapivě to nepomohlo
13:11 xstill_ jo, ale teď to pomohlo
13:11 xstill_ ještě to uklidím a zarecorduju
13:12 xstill_ nechal jsem běžet jen personality bez maksky a dostal jsem se na 3620 stavů (z 182524)
13:19 xstill_ ještě pustím všechny C++ testy
13:20 xstill_ ale jinak ten test teď běží v debugu 40 s
13:30 xstill_ i těm exception testům to dost pomohlo
13:30 xstill_ mornfall: můžeš pull
13:32 xstill_ jinak ad ten instalační skript, něco jsem spáchal, ale mám problém jak detekovat, že je to už nainstalované (hlavně u knihoven)
13:32 xstill_ zatím tam mám něco jako  echo 'int main() { }' | $CXX -x c - -o /dev/null -lcurses -ledit 2>&1 > /dev/null ale to není asi dostatečná aproximace
13:32 xstill_ může to selhat i v případech kdy to cmake najde
13:33 mornfall jakto?
13:33 xstill_ tak pokud by to našel v nějaké nestandardní lokaci, ne?
13:34 mornfall to by mohlo být skoro jedno ne?
13:39 mornfall není mi to s tím InterruptMask moc jasný
13:39 mornfall resp. acquireIfOwned vypadá dost nebezpečně
13:40 mornfall někde se volá release/acquire aniž by se vědělo jestli tahleta instance není movenutá někam jinam?
13:41 xstill_ no ne, to je jen kvůli tomu kdyby někdo vyhodil výjimku pod maskou
13:42 xstill_ (což se ale nejspíš stejně těžce rozbije)
13:42 xstill_ prostě pokud ta maska zamaskovala tak se odmaskuje, jinak neudělá nic
13:45 mornfall no, pokud se to vyhozením výjimky rozbije tak to není moc RAII
13:46 mornfall používá se ten move konstruktor vůbec někde?
13:47 xstill_ co? proč by se to mělo rozbít vyhozením výjimky?
13:47 mornfall teď jsi řekl že se to nejspíš těžce rozbije
13:48 xstill_ jde o to, že jseš pod maskou, voláš throw, throw teď celé běží pod maskou, pokud se unwinduješ až tak daleko, že přeskočíš to odmaskování tak jsi v háji
13:48 mornfall no to není vůbec dobře ale
13:48 xstill_ no to ale nemáš jak poznat, že přeskočíš odmaskování (pokud není přes InterruptMask
13:49 xstill_ pokud je přes InterruptMask tak to tam normálně unwindne a odtamtud jede rethrow už bez masky
13:49 mornfall no, takže to funguje
13:49 xstill_ jo funguje, pokud používáš RAII všude
13:49 xstill_ pokud ne tak máš smůlu, to jsem tím myslel
13:50 mornfall nicméně mi ta logika s tím move moc jasná není
13:50 xstill_ move v InterruptMask?
13:50 mornfall jediný kde se to nějak předává je v pthread-ech a tam je to referencí
13:51 xstill_ no pokud to movneš ten 'source' mask přestane cokoli dělat
13:51 mornfall však jo, ale k čemu?
13:51 xstill_ hlavně ten move tam celou dobu byl
13:51 mornfall lock_guard tohle taky nemá
13:52 xstill_ tak si ho deletni, já se ho ani nedotkl teď
13:52 mornfall no, přidáváš tam kusy kódu který existujou čistě kvůli tomu move
13:53 mornfall releaseIfOwned a acquireIfOwned nedělají nic jiného jen mění sémantiku acquire/release vůči move
13:53 mornfall (jedno assertuje a druhý nedělá nic)
13:53 xstill_ aha
13:53 xstill_ tak já to vyhodím
13:54 mornfall jinak bych se nad tím nepozastavoval, ale je to složitý jak rádio :)
13:54 mornfall a přitom to nic nedělá
13:54 xstill_ vyhodím move, jsem myslel, že _owns je něco jiného
13:54 xstill_ třeba  se nic nerozbije
13:54 mornfall no, ještě lepší :-)
13:54 yaqwsx joined #divine
13:57 mornfall xstill_: nepsal jsi ten kód náhodou ty? (podle annotate ho tam teda přidal yaqwsx, ale zdá se mi že to měl od tebe?)
13:57 xstill_ no jasně, on to potřebuje pthread totiž
13:57 xstill_ auto mask = pthreadBegin();
13:58 xstill_ protože copy-ellision není garantovaná
13:58 xstill_ každopádně ty *IfOwned jsou zbytečný
13:59 mornfall nj, jenže tam move není, zato je tam __always_inline__?
13:59 xstill_ a ten assert asi taky
13:59 xstill_ no move tam být nemusí, návhratová hodnota je rvalue sama o sobě
13:59 xstill_ no to je stejné jako auto x = InterruptMask()
14:00 xstill_ (to taky vyžaduje move konstruktor)
14:00 xstill_ je to takový trapný, ale bez C++17 to asi o moc líp nejde
14:03 mornfall no, jde, jen je to na trochu větši refactor
14:03 xstill_ jak? udělat z toho makro?
14:03 mornfall to _initialize je totiž zbytečný
14:03 mornfall klidně by to mohl volat _start
14:04 xstill_ to by mohl, a dokonce i měl
14:04 xstill_ nechce se mi ale teď hrabat na _start když to Honza bude měnit
14:04 mornfall pak se může tady celý tohle zlikvidovat a InterruptMask se může chovat stejně jako lock_guard
14:05 xstill_ pak to můžem udělat a vyhodit owns
14:05 mornfall jo, tak jen asi zlikviduj ty IfOwned, ono by to mělo fungovat stejně
14:05 yaqwsx Spravím testy, zarecorduji a pak se v tom může Vláďo hrabat jak je libo.
14:05 xstill_ jo provádím
14:05 xstill_ yaqwsx: tak jo
14:05 xstill_ teď mi to ale podezřele spadly testy
14:06 mornfall yaqwsx: nebo to taky můžeš rovnou udělat ;-)
14:07 yaqwsx Cože to přesně?
14:07 mornfall yaqwsx: zlikvidovat pthreadBegin a inicializacy pthreadů řešit v _start
14:08 mornfall eh
14:08 mornfall inicializaci
14:08 xstill_ místo pthreadBegin má být jen ta maska
14:08 yaqwsx pthreadů? Ok.
14:16 mornfall xstill_: nebylo by ještě lepší změnit __dios_unwind taky aby fungoval i pod maskou?
14:16 xstill_ to by musel mít argument navíc
14:16 mornfall xstill_: v principu by totiž to 'bool m' mohl dostat jako parametr, tak se mi zdá
14:17 xstill_ OK, provedu
14:17 mornfall (nový patch prosím, už jsem to pullnul)
14:17 yaqwsx Ode mě je také možno pullnout, pthready budou za chvíli.
14:19 mornfall ještě bych se teda zamyslel, jestli by nebylo k věci rozlišovat masky podle toho jestli zabezpečujou korektnost (atomicitu), nebo jsou tam kvůli optimalizaci
14:20 mornfall ty druhý možná i rozkategorizovat podobně jako simfail/nofail věci
14:20 mornfall někde to snad i bylo na tabuli (resp. něco v tom smyslu)
14:21 xstill_ zravna tady to neovlivňuje korektnost, protože unwinder je stejně náš (může to skrýt jedině chybu v unwinder)
14:21 mornfall myslel jsem to obráceně
14:21 mornfall v pthreadech když odděláš masky, tak se to rozbije
14:21 mornfall protože se používaj jako atomické sekce
14:22 mornfall tady to jen vygeneruje velkej stavovej prostor
14:22 xstill_ jo to jo, to bylo spíš k tomu, že nemá smysl tuhle vypínat
14:22 yaqwsx Je ok si do pthread.h přidat __pthread_{něco} funkce nebo je lepší si pro ně vytvořit vlastní hlavičku?
14:23 mornfall yaqwsx: co budou ty funkce dělat? :)
14:23 yaqwsx Je to třeba ta funkce init pro pthready
14:23 yaqwsx Teď nemá vypropagovanou hlavičku, protože se volá pouze v rámci pthread.cpp
14:23 mornfall mít deklaraci __něco ve veřejný hlavičce asi není nic proti ničemu
14:24 yaqwsx Ok
14:24 xstill_ potřeba asi je, alespoň u téhle implementace pthreadů
14:26 mornfall o tom že se to maskování týká jen interních unwind věcí nejsem úplně přesvědčen
14:26 xstill_ + metadat
14:27 mornfall nemůže to zakrýt problém kde ti jiný vlákno hrábne do zásobníku počas unwindu?
14:29 mornfall tady to teda trochu už naráží i na to, že v divinu vypadá zásobník jinak než v tom výsledným programu
14:32 mornfall pak až se bude likvidovat ten move z InterruptMask, tak je zvykem ty privátní metody pro C++ <11 neimplementovat
14:33 mornfall (to co se používalo místo = delete)
14:36 mornfall yaqwsx: bez toho DiOS out! se mi to líbilo víc ;-)
14:37 mornfall pravda, to DiOS started v _start je taky trochu matoucí
14:39 mornfall (tak si říkám, že lidi nemaj rádi haskell taky proto, že printf debugging tam funguje fakt mizerně)
14:40 yaqwsx Ok, dalším patchem zahodím tady (snad už zbytečné) debugovací hlášky. Může být?
14:40 mornfall může být :)
14:41 yaqwsx Resp. prohlédnu celý DiOS a zahodím i jiné neptořebné věci.
14:43 xstill_ mornfall: to by musel někdo z cizího vlákna hrabat na sloty
14:43 xstill_ no ani to ne, protože sloty se v unwinderu modifikují jen v SetGR a to se volá z personality
14:43 yaqwsx Pthready zarecordovány.
14:46 mornfall xstill_: možná, ale proto máme divine, abych se na to mohl zeptat model checkeru a nemusel složitě (a nejspíš blbě) vymýšlet jestli to může nebo nemůže nastat :-)
14:47 xstill_ do dobře, ale musí to být by-defaukl zamaskovaný
14:47 xstill_ a teda nevím jak bys to chtěl testovat, že se nehrabe špatně na zásobník
14:47 mornfall nemusí, ale asi by mělo :)
14:48 xstill_ muselo by se asi hrabat na frame pointer nebo pc aby se to mohlo rozbít
14:48 mornfall já to nechci testovat, jen chci možnost zeptat se, jestli tady ta čistě optimalizační maska nezakryla žádnej bug
14:49 xstill_ OK
14:49 mornfall stejně tak jako je dobrý mít možnost vypnout redukce když si člověk není stoprocentně jistý že nemůžou nic rozbít
14:50 mornfall maska v std::thread je třeba taková věc kde fakt nevim kterej default by byl lepší
14:50 mornfall tady je jasnej aspoň rozumnej default
14:52 mornfall (šance že to něco zakryje velmi malá, úspora velká... u toho std::thread je to trochu slabší... v dobře napsaným programu tam klidně být může, ale když máš dobře napsanej program tak divine už zase moc nepotřebuješ...)
14:54 yaqwsx Debugovací výpisy odebrány, patche u mě v homu
15:19 yaqwsx joined #divine
15:53 yaqwsx joined #divine
16:25 divine-buildbot Hey! build divine-next-debug #69 is complete: Success [finished]
18:51 xstill hm, a buildy 70 - 73 nic jo?
18:51 xstill je to krám
18:51 xstill aha ne
18:51 xstill to je záměr
18:55 xstill jinak nebylo by marný mít nějaký info mód diosu kdy by vytracoval nastavitelné přepínače (simfail, faulty) a jejich defaultní hodnoty, to by se pak mohlo volat z divine info (asi největší smysl by mi dávalo aby to byl samostatný mód diosu kdy udělá jen toto)
21:21 mornfall to by šlo asi lehce udělat tím, že se zavolá jen __boot a tady ty informace dostanou vlastní __vm_trace kategorii
21:21 mornfall pak se ani nemusí nic v diosu rozlišovat

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