
Vanwege die pots laatst over de documentaire "America's most hated family" over de Westboro Baptist Church (aanrader), en dacht eens terug aan de tijd dat er nog flink gebraat werd.
Is daar anno nu eigenlijk nog animo voor?
Ik kan me niet herinneren of het de afgelopen tijd nog eens aan de orde is gekomen, hoe dan ook, ik dacht van misschien is het aardig om een appje te schrijven dat 1000 verbindingen tegelijk kan leggen om dan flink te gaan braaten. Dat is gelukt. Ik zeg het maar even. Het was eigenlijk vooral een experiment in multi-threading voor .NET, voor de wortelbroeken onder u. Ik heb het project Braatstaal gedoopt.
Is daar anno nu eigenlijk nog animo voor?
Ik kan me niet herinneren of het de afgelopen tijd nog eens aan de orde is gekomen, hoe dan ook, ik dacht van misschien is het aardig om een appje te schrijven dat 1000 verbindingen tegelijk kan leggen om dan flink te gaan braaten. Dat is gelukt. Ik zeg het maar even. Het was eigenlijk vooral een experiment in multi-threading voor .NET, voor de wortelbroeken onder u. Ik heb het project Braatstaal gedoopt.
fishbowl: Kan iemand me mailen als deze post van de FP af is?...
gronk: Ik dacht eerst dat 't een paspop was waar ze een ko...
dM, namens Likoed Cali: Bah, nee echt, gatverdamme. Veel te veel make-up, o...
Der Webmeister: Als ik zoiets zou doen zouden er mínstens 15 perso...
dM, namens Likoed Cali: Wat een zonnebankbimbo. Nee, dank je.
Geenszins Joling: En beneden is links? Want dán zit ik beneden.
gronk: Soms doet dit demissionaire kabinet dan ook weer go...
Geenszins Joling: Ook dit is weer blof (met streepje door de o)!
Jack Random: JAAA, bij Deaf op de boerderij in Zeeland kamperen,...
Geenszins Joling: En dat was @ gronk natuurlijk
Totaal aantal: 1875
Waaronder de leden:
Puh! lewax DDWW, Steampimp. Flappie, weerman van die Witjoekel Vilmer fishbowl DuffCut JaNeetoch trekpet Ahmed baby! Tralala Nisses Plug WitPaard dM, namens Likoed Cali Swanfeather DrSooz Wildplasser, beroepsweig Tha KinGuiN- arrogante R Sarcastro cspr, drukt van zich af TheStef teringbibber Monade - category B trai gronk Der Webmeister koffieverkeerd ngh pedigree Wanko
Puh! lewax DDWW, Steampimp. Flappie, weerman van die Witjoekel Vilmer fishbowl DuffCut JaNeetoch trekpet Ahmed baby! Tralala Nisses Plug WitPaard dM, namens Likoed Cali Swanfeather DrSooz Wildplasser, beroepsweig Tha KinGuiN- arrogante R Sarcastro cspr, drukt van zich af TheStef teringbibber Monade - category B trai gronk Der Webmeister koffieverkeerd ngh pedigree Wanko

Aantal posts: 133
Aantal reacties: 3615
Aantal posts: 3
Aantal reacties: 305
Aantal posts: 17
Aantal reacties: 851
Nu heb je natuurlijk tegenwoordig veel meer captcha's dan vroeger, en die maken dit soort spul een stuk lastiger. Maar goed, wie zegt dat het slecht is voor een webserver om eens flink getest te worden? Google Chrome heeft in de developer tools, onder Network, een tijdlijn die weergeeft hoe lang het duurt om iets te laden. Het wordt dan wel heel makkelijk om te zien dat het grootste .png bestand op een bepaalde website bijvoorbeeld 100 kB is en 3 seconden duurt om te laden. Ik noem maar wat.
Verder heb ik het lokaal getest, met een simpel webservertje (SimpleServer:WWW van AnalogX) en die gaat in 3 seconden uit de lucht. Maar dat is zonder fysieke netwerkverbinding, rechtstreeks van socket tot socket, met 40 MBps. Toch aardig om te weten dat dit de limiet van je server is, iedere webhoster behoort dat te weten over zijn servers nietwaar?
Aantal posts: 34
Aantal reacties: 2112
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 45
Aantal reacties: 4304
/Als je dit trouwems met 1000 threads hebt gedaan en het was geen CSP-taal zoals Erlang verdien je het om keihard geslagen te worden. 1000 non-blocking sockets met één select() loop is ruim dan voldoende.
Aantal posts: 356
Aantal reacties: 20050
Aantal posts: 40
Aantal reacties: 11546
Een single-threaded select() met nonblocking sockets kan iedere huiskamerload/feed aan. De enige blocking die er overblijft is dan pagefaults en disk-IO. Het bevrijdt je bovendien van de verplichting om overal mutexes omheen te zetten.
Maar: dit soort programmaatjes zijn altijd handig om bij de hand te hebben als basismateriaal voor stresstesten enzo.
En on-topic: braaten was leuk. Maar het is voorbij. Want verboden, want dDOS-attack.
Het aanbod van braatbare slachtoffers (SPAMHOEREN) lijkt ook te zijn afgenomen. Behalve dan wat oost-europese bruiden enzo.
Aantal posts: 17
Aantal reacties: 851
Je hebt gelijk dat de threads overbodig, te zwaar en zinloos zijn voor waar ik ze hier voor gebruik en ik zou dan ook de programmeur van iedere serieus bedoelde applicatie die dit werkelijk doet om de oren slaan. Aan de andere kant kan ik deze code gebruiken om mijn eigen wget-versie te maken bijvoorbeeld. HTTrack is leuk maar soms gewoon net niet wat ik zoek.
Dus. Hoe dan ook, het was een experiment en ik zou nooit serieus overwegen het ergens voor productie code toe te passen.
Aantal posts: 17
Aantal reacties: 851
@Monade: Ik moet opbiechten dat ik totaal geen ervaring heb met CSP. Is Erlang een goede taal om hier meer over te leren? Of heb je een betere suggestie voor iemand die verder wel met meer algemene productietalen overweg kan?
Aantal posts: 90
Aantal reacties: 10860
/worteljurk
Je kunt ook gewoon 1000 threads met 1 socket/thread doen. Helemaal geen locks nodig in dat geval en al helemaal geen select. Als je poll/select gebruikt heb je bij voorbaat de performance-race al verloren.
Aantal posts: 17
Aantal reacties: 851
De enige communicatie die de threads doen, is wanneer ze naar een list schrijven hoeveel downloads er gedaan zijn per thread, en een list met exceptions er opgetreden zijn. Om te kijken wat de server aan het doen is. Er wordt bijna niks gelockt.
Het geheugengebruik is wel bizar hoog, ergens las ik dat het om ongeveer 1 MB per thread gaat. Waarom is dat eigenlijk? Wat kan er nou zoveel geheugen in beslag nemen? Ik begrijp dat iedere thread zijn eigen geheugenruimte heeft maar zoveel is er niet nodig voor een WebClient object en wat variabelen.
Aantal posts: 394
Aantal reacties: 14946
Aantal posts: 293
Aantal reacties: 11946
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 45
Aantal reacties: 4304
De problematiek speelt zich achter de schermen af. Een thread krijgt typisch 1 tot 4 MiB toegewezen om privé-variabelen op te slaan (stack), elke socket heeft zowel een in- als een uitbuffer van 8 - 64 kiB, etc., en voor je het weet praten we over serieuze hoeveelheden geheugen. Verder zitten er aan de rokende serverkant 1000 sockets op je te wachten, en misschien ook wel 1000 threads of processen.
En dat alleen maar om 1000 keer "This side is top" te plempen.
Ik moet opbiechten dat ik totaal geen ervaring heb met CSP. Is Erlang een goede taal om hier meer over te leren?
Ik heb me vergist, ik was weer eens te slordig. Ik had het over Communicating Sequential Processes, maar Erlang gebruikt het alternatieve Actor model om concurrentie te modelleren. Actor model is hip.
Maar goed, ik kan je de taal sterk aanraden. Het is open source, robuust, heeft veel documentatie, het draait op Windows en Unices, je kunt er gelijk bruikbare dingen in maken, en tenslotte het heeft een leesbaar boek. Samengevat een ideale taal en omgeving om een betere software developer mee te worden. En je kunt er ook werk in vinden bij serieuze bedrijven.
/Alien
Aantal posts: 41
Aantal reacties: 4975
Aantal posts: 17
Aantal reacties: 851
Voor de grap laat ik ze allemaal tegelijk starten zodra de threads zich gereed gemeld hebben - bijna instant natuurlijk, maar ik laat ze wachten op een startsein omdat het kan.
Een toegevoegd probleem is de router, die gaat natuurlijk ook over z'n nek van zoveel TCP verbindingen. UDP is daar meer geschikt voor, maar HTTP draait nu eenmaal niet over UDP.
Aantal posts: 40
Aantal reacties: 11546
Besef je dat er van die 1000 threads er 995 niks doen; geblockt zitten op input, daarbij elk 1MB aan geheugen vasthoudend ?
Aantal posts: 394
Aantal reacties: 14946
Aantal posts: 90
Aantal reacties: 10860
Erlang steent. Echt. Functioneel (...) en je kunt er nog wat mee ook!
@Merv: HTTP kan prima over UDP - het is meer dat de webserverts dat niet accepteren. Natuurlijk wordt het er zo betrouwbaar van; je gaat ongetwijfeld (veel) dingen kwijtraken enz enz - maar dat ligt absoluut niet aan HTTP.
Aantal posts: 17
Aantal reacties: 851
@marjolein: Snap ik, je wil geen halve HTML pagina en als je refresht alleen de tweede helft, ofzo. Daar heeft niemand wat aan. Ik ga Erlang eens bekijken, dat kent toch meer praktische toepassingen dan Brainfuck...
Aantal posts: 90
Aantal reacties: 10860
Say hello.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.
Aantal posts: 40
Aantal reacties: 11546
Maar om te stress-testen is dit wel een geschikte vorm van mishandeling, ja.
Aantal posts: 17
Aantal reacties: 851
En zo ook met programmeren, Ook! en Whitespace zijn mind benders, niets meer dan sudokus met een output. Wel een goeie oefening, in de "kijken of het lukt" zin.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Ik vind UDP voor HTTP-dinges helemaal niet zo gek eigenlijk. Vooral de combinatie jumbo-packets en AJAX. Als bijvoorbeeld omeBlues mij een refresh stuurt van de "U zei", dan past dat vast wel in een UDP-packet. Scheelt een hoop ping-pong.
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 90
Aantal reacties: 10860
@SO_REUSEADDR ... volgens mij zit je daar helemaal mis mee WildP. SO_REUSEADDR is bedoeld voor server sokkits - dat je meerdere luisteraars (accept(3)) op hetzelfde poortnummer kunt hebben. Wie dan de incoming connectie krijgt is dan maar de vraag. Kan tot 'interessante' resultaten leiden. SO_REUSEADDR heeft - in principe - volgens mij echt geen reet met open & sluiten van connecties te maken.
Als je REUSEADDR op client sokkits gebruikt zitten ze alleen in de weg als je bind(3) aan een port waar ook al een server op zit te luisteren - dan gooi je alles in de war. Niet aan te bevelen.
Aantal posts: 40
Aantal reacties: 11546
[uit m'n hoofd; ik ga nu met Comer in de tuin zitten; er is nog net genoeg licht om het na te zoeken ...]
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
@Merv: netstat -a geeft ook de socket state, IIRC.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Kwa packet sniffer: ik heb ooit een TCP-relay gefabriekt (locale listen sokkit, doet actieve open(s) naar eigenlijke remote socket) EN LOGT ALLES. (iets soortgelijks schijnt ook met netcat te kunnen)
Toen wist ik nog niet dat packetsniffers bestonden, of ze waren er nog niet. Toch een uiterst leerzame exercitie, dat jongleren met een handvol netwerk-connecties.
Aantal posts: 45
Aantal reacties: 4304
@Merv,
Dus per thread, als je het dan zo wil doen, is het best efficiënt.
De kernel alloceert die 1 MiB adresruimte per thread, en misschien vanwege performanceredenen ook daadwerkelijke geheugenpagina’s. Je zit dus het virtual memory systeem aardig te belasten. Met een beetje pech raak je op een 32-bit systeem zelfs aan je maximale geheugenruimte (31-bit of 32-bit). De netwerk sockets krijgen hun bufferruimte uit een pool in de kerneladresruimte, dus die ben je sowieso kwijt. 1000 client threads op 1 webserver is dus never nooit niet efficiënt.
Klopt, het verschil is te zien als je het aantal threads opvoert, op een gegeven moment gebeurt er dan niks extra meer.
Die threads komen gewoon niet meer aan de beurt of de benodigde resources (sockets en file handles) raken voortijdig op.
@Wildplasser,
De socket timeout heeft inderdaad niets met SO_REUSEADDR te maken. Zie W.R. Stevens "Unix Network Programming Vol 1" Ch 7.5 p 194-197 voor een buitengewoon heldere uitleg.
@marjolein,
Als je poll/select gebruikt heb je bij voorbaat de performance-race al verloren
We hadden het meer over de client niet uit de lucht blazen, maar je verplaatst het wake-up probleem alleen maar. Ik heb het niet getest, maar ik verwacht dat een userland thread-wakeup duurder is dan select collision in kernel mode.
/Gaat weer verder met zijn Grolsch
Aantal posts: 40
Aantal reacties: 11546
mbt Marjolein's rant versus select/poll ben ik het wel met je eens denk ik.
De problemen bij select/poll zijn dat je eerst een heel grote FD_SET moet bevolken (en steeds kopieeren), en dat de kernel hem bij iedere select() syscall moet kopieren naar een soortgelijke struktuur in kernelland. Dat vergt enkele lineaire passes door een N=1000 array. Op zich niet zo erg; het wordt pas erg als select() iedere keer returnt voor een readable filedescriptor. Dan kom je uit op twee syscalls (waarvan een heel duur) voor iedere te lezen buffer.
Er zijn wel trucjes (meer dan een fd_set, de actieve fds apart houden), maar het blijft behelpen.
Poll() is aan de userspace-kant iets vriendelijker, maar aan de binnenkant gebeurt er feitelijk precies hetzelfde.
Ik heb ooit een keer met SIGIO gespeeld, maar dat impliceert dat je alles moet mutexen en continu met sigprocmask aan het flipperen bent. Malloc() in een signalhandler is bijvoorbeeld niet zo'n goed idee, zodat je moet prealloceren. En die pool moet ook weer gemutexed worden, etc. Wel een leuke sport, dat dan weer wel.
Aantal posts: 45
Aantal reacties: 4304
Dát is oud. Mijn exemplaar is van 19/11/1998. Mijn god, alweer 13 jaar geleden! Retecool bestond toen nog niet eens.
Ik ben sinds 2005 niet meer echt met dit soort dingen bezig, maar volgens mij is C10K nog steeds de beste bron voor basis informatie over high-performance socket programming.
En @Merv, ik zou eens kijken naar thttpd for Windows. Fantastisch hufterproof webserver voor statische pagina’s.
Aantal posts: 40
Aantal reacties: 11546
c10K is inderdaad the way to go, als je de limieten wilt opzoeken.
Aantal posts: 90
Aantal reacties: 10860
De loonix scheduler loop op 100Hz (=10ms)(*) en als je een blocking select/poll met timeout doet word het aanroepende proces in de wachtrij gezet en op z'n vroegst 10ms later verherevalueerd of er iets te runnen valt. Zelfs als een timeout van 1ms hebt ingesteld.
Vaker komt het voor dat je pas na twee timeslots (20ms later dus) weer aan de beurt komt.
(*) ja dat is wel aan te passen maar dan krijg je weer te veel contextswitches en gaat daar je performance down the drain.
Aantal posts: 40
Aantal reacties: 11546
Volgens mij is dat minstens een timeslot wachten strikt genomen niet waar, kzal het straks op m'n werk even nazoeken in de src. Dat bij return-from-syscall de scheduler kan toeslaan is duidelijk.
Aantal posts: 45
Aantal reacties: 4304
Dat klopt, maar dat wachten is niet zo erg omdat select() blocked totdat er iets te schrijven of te lezen valt. Zolang kun je toch niets doen met die connecties. Zoals @Wildplasser zegt, beïnvloedt dit voornamelijk de latency, en niet direct de daadwerkelijke throughput.
Een userland threadswitch is vele malen sneller (orden van ns op Solaris en FreeBSD), maar ik zou zo niet weten wat er met de scheduling van een proces gebeurt als één van zijn threads lang blocked in een system call. (Ik heb het materiaal wel liggen, maar ik ga dit nu niet uitzoeken als je het niet erg vindt.)
/man 8 alien
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Het meeste schedulen vindt plaats net voor de return_from_systemcall. Dat is het goedkoopste: de machine zit toch in ring0, en moet toch terug naar userspace; het enige wat ie hoeft te doen is returnen naar een *ander* userprocess; wel met de juiste context. Systemcalls komen zodanig vaak voor (duizenden per seconde) dat de preemption alleen maar optreedt voor processen die alleen maar rekenen en geen systemcalls plegen.
Aantal posts: 17
Aantal reacties: 851
Voor maximale bandbreedte is het makkelijk genoeg: vind een paar grote bestanden met de developer tools in je browser, en dan flink downloaden. Zit je zo aan de maximale snelheid voor dat systeem. Zo kwam ik tot ongeveer 20 of meer MBps voor de SimpleServer:WWW, ik weet dat het een onstabiele server is en dat kon ik nu dus mooi bewijzen.
Je zou ook een hybrid kunnen bouwen waar verschillende taken tegelijk worden uitgevoerd.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 45
Aantal reacties: 4304
De context-switch is op zich wel gegarandeerd, maar het is niet-deterministisch. MSD-DOS is niet real-time; het kan niet eens fatsoenlijk de tijd bijhouden.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 394
Aantal reacties: 14946
Het zou mij niets verbazen als een ongetunede apache ook onderuit gaat bij 1000 requests in een piek. Kijk maar naar al die sites die 'geslashdotted' zijn.
Aantal posts: 45
Aantal reacties: 4304
Neu. Apache krijgt bij een piek geen vrije poorten meer vanwege de lingering close, zoals eerder gemeld door @Wildplasser, maar hij valt niet om. De PoeHP en database dingeses kunnen misschien omvallen, maar dat heb ik nooit getest.
Aantal posts: 394
Aantal reacties: 14946
Afgezien daarvan, ik heb met apache onder windows al het genot mee mogen maken van een apache die crasht op een foutje in httpd.conf.
Aantal posts: 45
Aantal reacties: 4304
/En je kunt apache zeker laten crashen, zeker de 2.x generatie, toen de linuxmannetjes zich met het ontwerpen(FSLVO) en programmeren begonnen te bemoeien.
Aantal posts: 40
Aantal reacties: 11546
Dat levert dus een gevaar op, dat continue op de loer ligt: systemcalls zijn relatief duur (1K tot 10K clocks) dankzij alle cache en TLB invalidatie (nog te zwijgen over locks en barriers), en er is dus het risico dat een select() met een fd_set van een paar duizend maar een readable (of writable) fd oplevert. Dat is dan een heel duur blok wat je gelezen hebt.
Ik heb trouwens geen bewijs kunnen vinden voor Marjolein's latency-claim. Volgens mijn korte inspectie doen select()s internals precies een sweep over de fd's en worden alle fds gerapporteerd die (op dat moment) leesbaar/schrijfbaar zijn. (If any; anders wordt er gewacht)
De return is dan onmiddelijk, en dus niet op de metronoomslag.
Hij is wel op de metronoomslag indien er timeout plaatsvindt. (de timing is trouwens in linux veranderd, rond 2.6.30 ofzo)
Hij is niet op de metronoomslag als er een signal optreedt.
Aantal posts: 394
Aantal reacties: 14946
Definitiegezeur.
Aantal posts: 45
Aantal reacties: 4304
t = 0: kan naar geen enkele fd schrijven: yield.
[contextswitch naar n andere processen]
t = n*10 ms: kan schrijven naar fd’s: doe dit.
Latency = delay over het kanaal + n * 10 ms.
On dit te testen moet je aan de ontvangende kant spelen met delayed ACKS en dergelijke.
Definitiegezeur.
Nee, want door alles maar crashen te noemen maak je het concept zinloos. Een crash is een ontwerp- of een programmeerfout. Procesterminatie vanwege limietoverschrijding is een administratieve beslissing.
/Waarom weet ik dat allemaal nog?
Aantal posts: 40
Aantal reacties: 11546
Max_requests_per_worker (of hoe die ook heet) is een gore hack, maar wel redelijk effectief tegen lekkage.
Aantal posts: 17
Aantal reacties: 851
Op zich kan ik het wel volgen dat als CPU core 2 een thread uitvoert die wil schrijven naar een gelockt object vanwege een thread op core 1, dat het niet gaat en moet wachten op de volgende switch. De kernel zorgt er dan voor dat dit allemaal een beetje in de pas blijft lopen, nietwaar? Op die manier verspil je wel veel tijd natuurlijk, je bent beter af als je verschillende processen hebt met elk meer geheugen om hun eigen zaakjes beter te kunnen afhandelen. Minder vaak schrijven naar gezamelijke objecten.
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Doel: kopieer stdin naar stdout met maximale latency ;-)
Aantal posts: 45
Aantal reacties: 4304
Huilen met de pet op. Gemaakt om mij te pesten.
Vandaar dat ik je een taal als Erlang aanraadt om mee te spelen.
Aantal posts: 40
Aantal reacties: 11546
User processen mogen zelf weten wat ze aanrotzooien, meestal wordt dat een beetje door de taal of de "omgeving" gefaciliteerd.
Aantal posts: 17
Aantal reacties: 851
Maar Erlang klinkt als iets dat de moeite waard is om gewoon even te proeven, het concept te begrijpen. Lijkt me best interessant.
Aantal posts: 394
Aantal reacties: 14946
OTOH, waarom dat gemiereneuk? De test van merv was 'of je webserver na x seconden uit de lucht is'. Een setup met wat extra logica die automagisch je apache restart kan net zo goed een simpleserver herstarten.
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 45
Aantal reacties: 4304
ik heb geprobeerd een proof-of-concept programmaatje te schrijven voor Marjolein’s latency-dinges.
Je moet aan de ontvangende kant spelen met ACKS en window sizes. Daar bestaan vast en zeker nog steeds testtooltjes voor.
waarom dat gemiereneuk?
Omdat je de juiste oorzaak wil weten. Zoals ik al schreef kun je met het grootste gemak een service uit zijn resources laten lopen, bijvoorbeeld geen beschikbare netwerkpoorten of onvoldoende werkgeheugen. Daar kan een service op crashen omdat daar geen rekening mee is gehouden, of van zichzelf terugschalen (graceful recovery) of zichzelf termineren, of door het os worden getermineerd. Drie verschillende redenen.
Ik haat met grote haat Windows en MacOSX omdat zij fault discovery buitengewoon moeilijk maken.
"Er ging iets mis." "Joh!"
Aantal posts: 40
Aantal reacties: 11546
(als het mag van de baas)
Gracefull discovery is gewoon moeilijk. De OOM-killer is not fair!
Bij een deadlock-detected in DBMS kan je nog een cost-based afweging maken (de transactie die al de meeste resources heeft gebruikt mag blijven leven, of de jongste moet dood) Maar er zijn altijd uitzonderingen.
Aantal posts: 17
Aantal reacties: 851
Een collega van mij had er jaren geleden de grootste moeite mee, en zelf heb ik er nooit genoeg tijd voor genomen om te kijken hoe de communicatie werkt, locking van objecten, dat soort zaken. Van dit experiment heb ik geleerd waar sommige limieten zitten, wat praktisch is, en "en passant" heb ik een applicatie waar ik wellicht ooit nog wat mee kan. En daar ben ik best tevreden mee.
Aantal posts: 86
Aantal reacties: 2026
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 86
Aantal reacties: 2026
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 40
Aantal reacties: 11546
De tijd verstookt inside select() is 10 tot 30 us, dit bij een fd_set size van 50, bij returnvalue>0, dus zonder timeout of error. Af en toe ietsje hoger (~100us, waarschijnlijk door een spinlock) en Zeer zelden 10 of 20 ms, kennelijk door een concurrerend proces in de runqueue.
This myth is debunked.
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 17
Aantal reacties: 851
Aantal posts: 17
Aantal reacties: 851
Ik heb mijn systeem weer bootende - de partitie wilde echt niet meer starten, geen fixboot of fixmbr die daar wat aan kon doen. Heb toen XP SP3 maar gewoon vers geïnstalleerd. Vanavond kan ik dus teh codes online plempen voor hullie! Begrijp wel dat ik schrijf in VB.NET, dus het is niet sexy om te zien.
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 45
Aantal reacties: 4304
Aantal posts: 40
Aantal reacties: 11546
Aantal posts: 90
Aantal reacties: 10860
Helaas lijkt'ie waarschijnlijk helemaal niet op de situatie waarin ik die waarneming gedaan heb. Ik denk dat de situaties dermate ongelijk zijn dat ik met geen mogelijkheid kan zeggen wie er nu representatief is.
In mijn geval was dat sowies met een Linux 2.4 kernel, multithreaded applicatie en werkelijk netwerkverkeer (remote host ipv via het loopback device).
Aantal posts: 40
Aantal reacties: 11546
Hier op mijn HubertStation-2 is ie nog sneller, trouwens: 1 tot maximaal 6 us, voor resp ca 10 tot bijna 100 fds returned.
1us is 1000 clocks bij een 1GHz clock, en dat is dus echt afgrijselijk snel voor een systemcall.
[ HS-2 is 3.2 GHz, geloof ik, maar meestal is dat 4*800 MHz, waarbij die vier de pijplijn-factor is, en de 800 de echte clocktick. Boerenbedrog aka "muziekvermogen". ]
Kan goed zijn dat 2.4 slomer was, of langer dan strikt noodzakelijk in de systemcall bleef.
Aantal posts: 40
Aantal reacties: 11546
echoputcascadepoepen is trouwens alleen maar een hack om een hele trits sockets te openen en er aktieve fd_sets mee te bevolken. Ik betwijfel of een miltithreaded variant significant sneller zal zijn, het aantal systemcalls is gelijk, en waarschijnlijk zullen de in-kernel mutexes het gedrag omvormen tot bijna-singlethreaded.
Aantal posts: 0
Aantal reacties: 179