summary of recherche regarding synchronisation and performance aspects

This commit is contained in:
Fischlurch 2026-07-24 18:23:19 +02:00
parent 506cca77c9
commit 8fd1555955

View file

@ -57,8 +57,7 @@
hab dafür zwar keinen Beleg (jenseits von ein paar Videos), aber ich nehme hier den Namen »Alexandrescu« in Gebrauch, um etwas — für sich selbst plausibles — auch mit Autorität sagen zu können
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<node CREATED="1784566823896" ID="ID_1457616626" MODIFIED="1784566828803" TEXT="Unterscheidung in...">
<node CREATED="1784566829625" ID="ID_283682996" MODIFIED="1784566831091" TEXT="Skills"/>
<node CREATED="1784566831655" ID="ID_1320868791" MODIFIED="1784566834042" TEXT="Judgement"/>
@ -357,8 +356,7 @@
Ich folge dem gleichen Ansatz, gehe aber mit der Linux-Kernelentwicklung mit...
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1753133430386" ID="ID_1664746007" MODIFIED="1753133453392" TEXT="Eine Know-how-Sektion auf der Lumiera-Website aufbauen"/>
<node CREATED="1784566437312" ID="ID_695370992" MODIFIED="1784566442736" TEXT="nebenbei: Umgang mit KI"/>
@ -395,8 +393,7 @@
Damit meine ich, ob der Ansatz mit symbolisch repr&#228;sentierten externen F&#228;higkeiten &#252;berhaupt aufgeht, und ob es tats&#228;chlich gelingt, ein Werkzeug-Paradigma auf der Basis von Placements zu schaffen. Und, last but not least, ob ich Leute finden, die mich unterst&#252;tzen und sich diese Vision aneignen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
</node>
</node>
@ -414,8 +411,7 @@
ich habe zur Vorbereitung meine anf&#228;nglichen Ideen in einer Konversation mit Claude validiert....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#708a96" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="-431;-21;" ID="Arrow_ID_986847518" STARTARROW="None" STARTINCLINATION="-642;52;"/>
<node CREATED="1784562590322" ID="ID_1398084830" MODIFIED="1784562600328" TEXT="demnach liegt das eigentliche Thema beim Compositor"/>
<node CREATED="1784562603832" ID="ID_648874975" MODIFIED="1784562621419" TEXT="man hat die Wahl, ob das buffer-flip blockend / nichtblockend ist"/>
@ -962,13 +958,407 @@
Ich verf&#252;ge &#252;ber vertieftes Wissen und einiges an Erfahrung in diesen Bereichen, sollte aber meine Kenntnisse &#252;berpr&#252;fen und festigen, um auch auf Fragen eingehen zu k&#246;nnen. Im Besonderen zu Kernel-nahen Themen wei&#223; ich ehr wenig.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
<node CREATED="1784562287819" ID="ID_1068288733" MODIFIED="1784562292010" TEXT="Kontext-Switches"/>
<node CREATED="1784562292542" ID="ID_1603052289" MODIFIED="1784562294752" TEXT="Kernel-Calls"/>
<node CREATED="1784562295882" ID="ID_1400086239" MODIFIED="1784562305846" TEXT="Cache/Pipeline"/>
<node CREATED="1784562308304" ID="ID_1632264826" MODIFIED="1784562316059" TEXT="Locking/Barriers"/>
<node CREATED="1784562308304" ID="ID_1632264826" MODIFIED="1784562316059" TEXT="Locking/Barriers">
<node CREATED="1784597020131" ID="ID_246135215" MODIFIED="1784597022117" TEXT="Begriffe">
<node CREATED="1784597025507" ID="ID_1545286772" MODIFIED="1784597032928" TEXT="Barrier vs. Memory Barrier vs Fence">
<node CREATED="1784599247555" ID="ID_1445290198" MODIFIED="1784599258517" TEXT="Fence und Barrier ist im allgemeinen synonym"/>
<node CREATED="1784599259921" ID="ID_592274590" MODIFIED="1784599269499" TEXT="kann auf verschiedenen Ebenen sitzen">
<node CREATED="1784599271052" ID="ID_1057609140" MODIFIED="1784599273771" TEXT="Hardware"/>
<node CREATED="1784599274465" ID="ID_1950423301" MODIFIED="1784599279400" TEXT="Compiler instruction reordering"/>
</node>
<node CREATED="1784599287789" ID="ID_756195091" MODIFIED="1784599304567" TEXT="machmal wird auch unterschieden zwischen synchronisation barrier und memory barrier"/>
</node>
<node CREATED="1784600731066" ID="ID_1114913802" MODIFIED="1784600735725" TEXT="Ursprung der Begriffe">
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784903431103" ID="ID_1723854173" MODIFIED="1784905020234" STYLE="fork" TEXT="Claude sieht drei Urspr&#xfc;nge">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1784903450919" ID="ID_657261671" MODIFIED="1784905020228" TEXT="1. Hardware/ISA level">
<node CREATED="1784903498677" ID="ID_1041458587" LINK="https://de.wikipedia.org/wiki/Industry_Standard_Architecture" MODIFIED="1784905020228" TEXT="Industry Standard Architecture (ISA)"/>
<node CREATED="1784903604215" ID="ID_1994086427" MODIFIED="1784905020228" TEXT="ARM Manuals use the term &quot;barrier&quot;"/>
<node CREATED="1784903616247" ID="ID_821194885" MODIFIED="1784905020228" TEXT="Intel/AMD uses &quot;fences&quot; and has fence-Instructions"/>
<node CREATED="1784903638786" ID="ID_499701429" MODIFIED="1784905020228" TEXT="Power hat sync-Instruktionen (werden im Handbuch als synchronisation barriers) beschrieben"/>
</node>
<node CREATED="1784903476009" ID="ID_688864045" MODIFIED="1784905020228" TEXT="2. The four-way taxonomy">
<node CREATED="1784903693418" ID="ID_1045852271" MODIFIED="1784905020228" TEXT="stammt aus dem SPARC-Umfeld">
<node CREATED="1784903717049" ID="ID_1030627846" MODIFIED="1784905020228" TEXT="Sparc hat instruktionen mit einer Barrier-Bitmask"/>
<node CREATED="1784903736845" ID="ID_1408029632" MODIFIED="1784905020228" TEXT="LoadLoad, StoreStore, LoadStore, StoreLoad."/>
</node>
<node CREATED="1784903749579" ID="ID_114135406" MODIFIED="1784905020228" TEXT="aufgegriffen f&#xfc;r Java-5">
<node CREATED="1784903760129" ID="ID_1989117356" MODIFIED="1784905020228" TEXT="das war die erste Mainstream-Sprache mit einem Memory-Model"/>
<node CREATED="1784903786078" ID="ID_1216686049" LINK="https://gee.cs.oswego.edu/dl/jmm/cookbook.html" MODIFIED="1784905020228">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Doug Lea's &quot;<b>JSR-133 Cookbook for Compiler Writers</b>&quot;
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1784903807771" ID="ID_904190729" MODIFIED="1784905020229" TEXT="Adve &amp; Gharachorloo, &quot;Shared Memory Consistency Models: A Tutorial&quot; (1996)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
Gilt als Quelle f&#252;r Doug Lea
</p>
</body>
</html>
</richcontent>
<node CREATED="1784904506202" ID="ID_511399832" LINK="https://www.cs.cmu.edu/afs/cs/academic/class/15740-f18/www/papers/ieeemicro96-adve-consistency.pdf" MODIFIED="1784905020229" TEXT="Scan einer Publikation 1996">
<node CREATED="1784904643053" ID="ID_1228994940" LINK="https://web.archive.org/web/20260121164830/https://www.cs.cmu.edu/afs/cs/academic/class/15740-f18/www/papers/ieeemicro96-adve-consistency.pdf" MODIFIED="1784905020229" TEXT="A"/>
</node>
<node CREATED="1784904536322" ID="ID_1489665899" LINK="Rice University ECE Technical Report 9512" MODIFIED="1784905020229" TEXT="PDF (kopierbar) &#x2022; Rice University ECE Technical Report 9512 &#x2022; September 1995">
<node CREATED="1784904767253" ID="ID_402738850" LINK="https://web.archive.org/web/20250125204437/https://www.cs.unc.edu/~prins/Classes/633/Readings/MemoryConsistencyModelsTutorial.pdf" MODIFIED="1784905020229" TEXT="A"/>
</node>
</node>
</node>
<node CREATED="1784903888398" ID="ID_863086016" MODIFIED="1784905020229" TEXT="Common names">
<node CREATED="1784903888399" ID="ID_12480073" MODIFIED="1784905020229" TEXT="LoadLoad read-read fence">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
loads before must complete before loads after
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1784903888399" ID="ID_296525436" MODIFIED="1784905020229" TEXT="StoreStore write-write fence">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
stores before must become visible before stores after
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1784903888399" ID="ID_655305278" MODIFIED="1784905020229" TEXT="LoadStore read-write fence">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
loads before must complete before stores after
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1784903888400" ID="ID_636786121" MODIFIED="1784905020229" TEXT="StoreLoad write-read fence">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
stores before must become visible before loads after
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node CREATED="1784903486937" ID="ID_689347133" MODIFIED="1784905020229" TEXT="3. C++ standard">
<node CREATED="1784905049390" ID="ID_1252554036" LINK="https://en.cppreference.com/cpp/atomic/memory_order" MODIFIED="1784905137346" TEXT="std::memory_order">
<node CREATED="1784905152608" ID="ID_566957216" MODIFIED="1784905162786" TEXT="ist eine hardware-unabh&#xe4;ngige Abstraktion"/>
<node CREATED="1784905163542" ID="ID_295092916" MODIFIED="1784905176027" TEXT="wird vom Compiler f&#xfc;r jede Plattform passend umgesetzt"/>
</node>
<node CREATED="1784905073150" ID="ID_524344347" LINK="https://en.cppreference.com/cpp/atomic/atomic_thread_fence" MODIFIED="1784905144999" TEXT="std::atomic_thread_fence"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784904925694" ID="ID_1668338633" MODIFIED="1784905006895" STYLE="fork" TEXT="Fromulierungs-Vorschlag von Claude">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<node CREATED="1784904935445" ID="ID_1352377610" MODIFIED="1784905006877">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
&quot;barrier/fence is hardware vocabulary for a specific machine instruction; memory_order is C++'s hardware-independent vocabulary for a guarantee; the compiler's job is to translate one into the other &#8212; and 'fence' in the standard specifically means the standalone
<p>
<code http-equiv="content-type" content="text/html; charset=utf-8" class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">atomic_thread_fence</code>, not a synonym for <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">memory_order</code>.&quot;
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1784908320566" ID="ID_1732195522" MODIFIED="1784908327105" TEXT="Reactor / Proactor">
<node CREATED="1784908328417" ID="ID_1472819180" LINK="https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture" MODIFIED="1784908462711">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<a rel="mw:WikiLink" href="https://en.wikipedia.org/wiki/Douglas_C._Schmidt" title="Douglas C. Schmidt">Douglas C. Schmidt</a><br /><u>Pattern-Oriented Software Architecture Volume 2</u>:<br />Patterns for Concurrent and Networked Objects
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1784908524543" ID="ID_1085065643" LINK="https://www.researchgate.net/publication/215835789_Pattern-Oriented_Software_Architecture_Patterns_for_Concurrent_and_Networked_Objects_Volume_2" MODIFIED="1784908532546" TEXT="online auf ResearchGate.net">
<node CREATED="1784908575496" ID="ID_981331086" MODIFIED="1784908579812" TEXT="Proactor: S.181"/>
</node>
</node>
</node>
<node CREATED="1784905507376" ID="ID_1003026788" MODIFIED="1784905516883" TEXT="Unterscheidung: Synchronisation / Memory barrier">
<node CREATED="1784905550523" ID="ID_46753921" MODIFIED="1784905564533" TEXT="synchronisation: a rendevous point"/>
<node CREATED="1784905569032" ID="ID_601678647" MODIFIED="1784905583378" TEXT="memory barrer: not blocking on itself">
<node CREATED="1784905602745" ID="ID_1645902351" MODIFIED="1784905612758" TEXT="visibility regime"/>
<node CREATED="1784905587190" ID="ID_1714821702" MODIFIED="1784905602160" TEXT="ordering guarantee always holds"/>
<node CREATED="1784905613970" ID="ID_616950822" MODIFIED="1784905800237" TEXT="but is only useful when paired with a (edge) observation"/>
<node CREATED="1784905714197" ID="ID_1563515485" MODIFIED="1784905719560" TEXT="man bindet an eine Flag">
<node CREATED="1784905720466" ID="ID_1613902659" MODIFIED="1784905720943" TEXT="Release = StoreStore + LoadStore, placed before the flag store"/>
<node CREATED="1784905728611" ID="ID_201116957" MODIFIED="1784905729215" TEXT="Acquire = LoadLoad + LoadStore, placed after the flag load"/>
</node>
</node>
<node CREATED="1784905763758" ID="ID_515518167" MODIFIED="1784905772088" TEXT="C++ Standard: synchronizes-with"/>
<node CREATED="1784905829373" ID="ID_1029060555" MODIFIED="1784905832642" TEXT="usage pattern">
<node CREATED="1784905836661" ID="ID_1106405339" MODIFIED="1784905840592" TEXT="spin loop"/>
<node CREATED="1784905840892" ID="ID_351410280" MODIFIED="1784905844349" TEXT="CAS retry loop"/>
<node CREATED="1784905865424" ID="ID_1584320750" MODIFIED="1784905872076" TEXT="pattern match trail"/>
</node>
</node>
<node CREATED="1784905913607" ID="ID_760903381" MODIFIED="1784905925301" TEXT="x86 memory model : TSO (Total Store Order)">
<node CREATED="1784906050870" ID="ID_1735111195" MODIFIED="1784906102565" TEXT="StoreStore, LoadLoad, LoadStore : automatically guaranteed"/>
<node CREATED="1784906107472" ID="ID_311784766" MODIFIED="1784906116199" TEXT="StoreLoad must be enforced">
<node CREATED="1784906130273" ID="ID_1293987900" MODIFIED="1784906139736" TEXT="Store can sit in the Store buffer"/>
<node CREATED="1784906140344" ID="ID_151207131" MODIFIED="1784906152185" TEXT="another Load is satisfied from Cache"/>
<node CREATED="1784906168264" ID="ID_641921488" MODIFIED="1784906181563" TEXT="only relevant for sequentially_consistent"/>
</node>
<node CREATED="1784906198381" ID="ID_1790908983" MODIFIED="1784906267764">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ABER: gemeinsamer Speicherzugriff <b>kostet immer</b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784906659191" ID="ID_59883588" MODIFIED="1784906668665" TEXT="&#xbb;cache coherence protocol traffic&#xab;"/>
<node CREATED="1784906746716" ID="ID_1799583572" MODIFIED="1784906767217" TEXT="typischerweise mehr als der Store-Buffer-flush f&#xfc;r seq_cst">
<icon BUILTIN="clanbomber"/>
</node>
</node>
<node CREATED="1784906268926" ID="ID_66218233" MODIFIED="1784906290776">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
ABER: der Compiler kann auch <b>umordnen</b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node COLOR="#435e98" CREATED="1784906855164" ID="ID_301489633" MODIFIED="1784906865587">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Bezug zu <b>liburing</b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
<node CREATED="1784906876690" ID="ID_698949310" MODIFIED="1784906877398" TEXT="io_uring_smp_store_release() / io_uring_smp_load_acquire()"/>
<node CREATED="1784906878482" ID="ID_786453150" MODIFIED="1784906887132" TEXT="verwendet acquire / release-Semantik"/>
<node CREATED="1784906895393" ID="ID_388911767" MODIFIED="1784906905154" TEXT="braucht keine sequentielle Konsistenz"/>
</node>
<node CREATED="1784907052250" ID="ID_1271354149" MODIFIED="1784907068596" TEXT="Operationskosten vs. tats&#xe4;chliche Kosten">
<node CREATED="1784907070048" ID="ID_1700979751" MODIFIED="1784907080731" TEXT="drei Situation / Regimes zu unterscheiden">
<node CREATED="1784907081695" ID="ID_8314744" MODIFIED="1784907094681" TEXT="Microbenchmark: hei&#xdf; und unter Druck">
<node CREATED="1784907141593" ID="ID_267156252" MODIFIED="1784907149370" TEXT="Zugriffe 3-5 x langsamer"/>
<node CREATED="1784907149877" ID="ID_248586022" MODIFIED="1784907156913" TEXT="niedrige 2-stellige Nanosekunden">
<node CREATED="1784907159045" ID="ID_1638111160" MODIFIED="1784907161960" TEXT="meine Beobachtung"/>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784907162385" ID="ID_1402937823" MODIFIED="1784907178100" STYLE="fork" TEXT="Claude hat im Netz gesucht und die Gr&#xf6;&#xdf;enordnung best&#xe4;tigt">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
</node>
<node CREATED="1784907202617" ID="ID_673513114" MODIFIED="1784907235721" TEXT="Kosten h&#xe4;ngen praktisch nicht von anderen Threads ab">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
weil die Benchmark-Thread(s) warm
</p>
<p>
&#160;gehalten werden
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1784907095381" ID="ID_1358858974" MODIFIED="1784907104877" TEXT="real call-chain yet hot cache">
<node CREATED="1784907242553" ID="ID_854501852" MODIFIED="1784907254508" TEXT="man sieht Cache-Miss-Kosten"/>
<node CREATED="1784907255224" ID="ID_191201973" MODIFIED="1784907288063" TEXT="LLC (low-levelCache) hit: mitlere 2-stellige ns"/>
<node CREATED="1784907289483" ID="ID_30976624" MODIFIED="1784907303133" TEXT="Cache-to-DRAM : 100ns"/>
</node>
<node CREATED="1784907105569" ID="ID_498759870" MODIFIED="1784907119046" TEXT="real call-chain with cold or even sleeping partner">
<node CREATED="1784907337701" ID="ID_1773112651" MODIFIED="1784907348168" TEXT="kann bis in den &#xb5;s-Bereich kosten"/>
<node CREATED="1784907386622" ID="ID_55157951" MODIFIED="1784907408951" TEXT="Kontext-Switches via OS kosten 1.5 - 4&#xb5;s"/>
<node CREATED="1784907434040" ID="ID_1806367904" MODIFIED="1784907439211" TEXT="sleep-state wakeup latency">
<node CREATED="1784907446230" ID="ID_125187055" MODIFIED="1784907456006" TEXT="C1E state (leicht) : 10&#xb5;s latency"/>
<node CREATED="1784907459037" ID="ID_1079013280" MODIFIED="1784907468760" TEXT="C6 state (deper) : 130 &#xb5;s"/>
<node CREATED="1784907496160" ID="ID_1152415054" MODIFIED="1784907503846" TEXT="Rekonfiguration einer Core: ~10&#xb5;s"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784907639420" ID="ID_421389218" MODIFIED="1784907652689" STYLE="fork">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
&quot;A synchronization primitive's instruction-level cost is what a hot microbenchmark measures; its systemic cost &#8212; coherence traffic under contention, and blocking/wake latency when it isn't contended &#8212; is what your production tail latency measures, and the two can differ by two to four orders of magnitude.&quot;
</body>
</html>
</richcontent>
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784908696776" ID="ID_1195619223" MODIFIED="1784908716530">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
Verbindung zum <b>Proactor</b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="back"/>
<node CREATED="1784908718133" ID="ID_161622462" MODIFIED="1784908739198" TEXT="IO-dominiert &#x27f9; hei&#xdf;">
<node CREATED="1784908742591" ID="ID_1531538522" MODIFIED="1784908749941" TEXT="der Proactor schl&#xe4;ft nie"/>
<node CREATED="1784908768511" ID="ID_962776798" MODIFIED="1784908783059" TEXT="man zahlt nur acquire/release-Kosten und Cache-traffic"/>
</node>
<node CREATED="1784908784724" ID="ID_1308278739" MODIFIED="1784908793543" TEXT="CPU-dominiert &#x27f9; kalt">
<node CREATED="1784908801017" ID="ID_298423761" MODIFIED="1784908804553" TEXT="Proactor blockt"/>
<node CREATED="1784908805122" ID="ID_736379164" MODIFIED="1784908815372" TEXT="man zahlt zumindest Kontext-Switch"/>
<node CREATED="1784908815936" ID="ID_254573875" MODIFIED="1784908824651" TEXT="u.U sogar wakeup einer Idle-Core"/>
</node>
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1784909009687" ID="ID_388537598" MODIFIED="1784909032689" STYLE="fork" TEXT="Frage an Claude: Verh&#xe4;ltnis zur Backpressure">
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
<icon BUILTIN="wizard"/>
<icon BUILTIN="help"/>
<node CREATED="1784909034361" ID="ID_1332104626" MODIFIED="1784909049037" TEXT="Claude ordnet das ehr als &#xbb;Duty-cycle&#xab; ein"/>
<node CREATED="1784909107922" ID="ID_901244335" MODIFIED="1784909111887">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
<strong http-equiv="content-type" content="text/html; charset=utf-8">server-vacation</strong>&#160;model
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node CREATED="1784908878383" ID="ID_1154107045" MODIFIED="1784909008360" TEXT="Hinweis auf Submission SQPOLL">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
man kann einen Kernel-Thread konfiguieren, der die Submission-Queue pollt. Dort konfiguriert man eine Einschlafe-Periode. Wenn der Poller schl&#228;ft, setzt er ein Bit und mu&#223; von der Applikation explizit wieder reaktiviert werden.
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
<node CREATED="1784909413276" ID="ID_249945275" MODIFIED="1784909418755" TEXT="alte / andere IO-Modelle">
<node CREATED="1784909419840" ID="ID_468319825" MODIFIED="1784909424853" TEXT="poll/epoll">
<node CREATED="1784909439497" ID="ID_1084860008" MODIFIED="1784909467251" TEXT="alle beantworten: &quot;welchen von diesen N Sockets kann ich jetzt lesen?&quot;"/>
<node CREATED="1784909430431" ID="ID_1550519100" MODIFIED="1784909431498" TEXT="select">
<node CREATED="1784909493440" ID="ID_1776306601" MODIFIED="1784909501801" TEXT="die &#xe4;lteste L&#xf6;sung"/>
<node CREATED="1784909502349" ID="ID_2286932" MODIFIED="1784909521102" TEXT="man gibt dem Kernel eine Bitmask die interessante FildDescriptors markiert"/>
<node CREATED="1784909521832" ID="ID_1755337748" MODIFIED="1784909530992" TEXT="der Kernel setzt dort Bit"/>
<node CREATED="1784909532281" ID="ID_1850235470" MODIFIED="1784909544907" TEXT="man sieht dann selber welche FD-Nummer man anschauen sollte"/>
<node CREATED="1784909546095" ID="ID_242092869" MODIFIED="1784909559545" TEXT="limitiert durch die feste Bitmask-Gr&#xf6;&#xdf;e (1024)"/>
</node>
<node CREATED="1784909581226" ID="ID_486293840" MODIFIED="1784909582678" TEXT="poll">
<node CREATED="1784909583578" ID="ID_50149205" MODIFIED="1784909592869" TEXT="gleiches Prinzip, aber API mit einer flexiblen Liste"/>
<node CREATED="1784909594154" ID="ID_1802655092" MODIFIED="1784909599505" TEXT="jeder Call ist O(n)"/>
</node>
<node CREATED="1784909637914" ID="ID_92373023" MODIFIED="1784909639511" TEXT="epoll">
<node CREATED="1784909640259" ID="ID_507142615" MODIFIED="1784909645150" TEXT="Linux-spezifische L&#xf6;sung"/>
<node CREATED="1784909650811" ID="ID_1531049274" MODIFIED="1784909659550" TEXT="man registriert Interesse an bestimmten FDs"/>
<node CREATED="1784909660072" ID="ID_882314156" MODIFIED="1784909688207" TEXT="man bekommt per Kernel-Aufruf eine Liste der lesebereiten FDs"/>
<node CREATED="1784909688716" ID="ID_1964702359" MODIFIED="1784909707021" TEXT="ist O(1) da push vom Network-Stack"/>
</node>
</node>
<node CREATED="1784909736198" ID="ID_1140561950" MODIFIED="1784909738753" TEXT="im Detail">
<node CREATED="1784909739501" ID="ID_1315873664" MODIFIED="1784909745423" TEXT="das sind alles blockende Kernel-Calls"/>
<node CREATED="1784909751964" ID="ID_1277219779" MODIFIED="1784909761846" TEXT="nur werden die Daten intern bereits vorbereitet"/>
<node CREATED="1784909776690" ID="ID_988789751" MODIFIED="1784909785052" TEXT="Jeder Socket hat einen receive-Buffer"/>
<node CREATED="1784909814875" ID="ID_1511520490" MODIFIED="1784909824021" TEXT="dort kann man sich in eine wait-queue registrieren"/>
<node CREATED="1784909824946" ID="ID_943421877" MODIFIED="1784909849298" TEXT="beim Eintreffen von Daten wird der aktuelle Thread auf &quot;aktiv&quot; markiert"/>
<node CREATED="1784909851798" ID="ID_890255483" MODIFIED="1784909865847" TEXT="beim n&#xe4;chsten Scheduler-Turn wird er auf eine core gemapped"/>
</node>
<node CREATED="1784909882722" ID="ID_898978088" MODIFIED="1784909894254" TEXT="es gibt eine Unix-Signal-basierte Variante">
<node CREATED="1784909895312" ID="ID_1380240825" MODIFIED="1784909906371" TEXT="die wird aber extrem selten genutzt"/>
<node CREATED="1784909920762" ID="ID_409154508" MODIFIED="1784909936575" TEXT="ist kniffelig: man wei&#xdf; nicht f&#xfc;r welchen FD man signalisiert wurde"/>
</node>
<node CREATED="1784909970894" ID="ID_467441062" MODIFIED="1784910002009" TEXT="Achtung: lokale Files nicht f&#xfc;r poll/epoll geeignet">
<node CREATED="1784910003130" ID="ID_1349981115" MODIFIED="1784910020372" TEXT="sie implementieren nicht den &quot;readiness-contract&quot; des VFS-Layers"/>
<node CREATED="1784910020816" ID="ID_1067149107" MODIFIED="1784910030490" TEXT="sie haben keinnen Buffer-leer-Status"/>
<node CREATED="1784910033854" ID="ID_245837866" MODIFIED="1784910044737" TEXT="insofern &#xbb;erscheinen&#xab; sie immer &quot;ready&quot;"/>
<node CREATED="1784910045236" ID="ID_1620698915" MODIFIED="1784910058118" TEXT="aber der Lese-Aufruf blockt dann u.U. doch"/>
<node CREATED="1784910062689" ID="ID_637014950" MODIFIED="1784910077818" TEXT="Abhilfe: asio und File-Handles im DIRECT-Modus"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1784910098946" ID="ID_1349516830" MODIFIED="1784910117028" TEXT="selbst das Reactor-Modell braucht stets einen Kernel-Call">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1784910118219" ID="ID_560621411" MODIFIED="1784910129209" TEXT="das ist der wichtigste Vorteil von IO_URING"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1519001955679" ID="ID_65625223" MODIFIED="1779386731937" TEXT="Demo-Inhalte">
@ -1910,8 +2300,8 @@
</node>
<node CREATED="1783902798597" ID="ID_599725786" MODIFIED="1783902800007" TEXT="eglSwapInterval">
<node CREATED="1783902800007" ID="ID_1393441883" MODIFIED="1784562583608" TEXT="damit kann man wohl das Verhl&#xe4;tnis zu VSync steuern">
<linktarget COLOR="#347acc" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="288;0;" ID="Arrow_ID_707364611" SOURCE="ID_1990712475" STARTARROW="None" STARTINCLINATION="140;12;"/>
<linktarget COLOR="#708a96" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="-431;-21;" ID="Arrow_ID_986847518" SOURCE="ID_1448869178" STARTARROW="None" STARTINCLINATION="-642;52;"/>
<linktarget COLOR="#347acc" DESTINATION="ID_1393441883" ENDARROW="Default" ENDINCLINATION="288;0;" ID="Arrow_ID_707364611" SOURCE="ID_1990712475" STARTARROW="None" STARTINCLINATION="140;12;"/>
</node>
</node>
<node CREATED="1783904509744" ID="ID_1126395932" MODIFIED="1783904513706" TEXT="X11 / Wayland">
@ -2891,8 +3281,7 @@
ffplay -f rawvideo -pixel_format rgb24 -video_size 1200x675 -framerate 50 demovideo-1200.raw
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
<node CREATED="1784226921919" ID="ID_1975886749" MODIFIED="1784562062109" TEXT="vlc">
@ -2905,8 +3294,7 @@
vlc --demux rawvideo --rawvid-width=1200 --rawvid-height=675 --rawvid-fps=50 --rawvid-chroma=RV24 --vout=opengl demovideo-1200.raw
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="wizard"/>
</node>
</node>