diff --git a/20210514/bs-20210514.txt b/20210514/bs-20210514.txt new file mode 100644 index 0000000000000000000000000000000000000000..c11bfa49d1a3347fa18970cb973512926af2c5a5 --- /dev/null +++ b/20210514/bs-20210514.txt @@ -0,0 +1,130 @@ +Projektideen, 14.05.2021, 11:39:44 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Janus WebRTC + - Warum brach am 10.5.2021 die Bildübertragung per Janus + bei ca. 130 Teilnehmenden zusammen? + - Was kann man dagegen tun? + - Zum Testen: Pool-Rechner + + * Streaming + - Problem: WebRTC (Echtzeit) überlastet die Server. + - Mögliche Lösung: Echtzeit-Bildschirm "abfilmen" und streamen + - Ziel: Online-Konferenzsystem, + bei dem ein Teil des Publikums aktiv teilnehmen kann + (in Echtzeit, ca. 50 Teilnehmende) + und alle anderen (1000+) per Streaming (mit leichter Verzögerung) + zumindest passiv zuschauen und zuhören können + - Software: z.B. IceCast + - Zum Testen: Pool-Rechner + + * Mumble-Web-Interface + - Problem: Das Mumble-Web-Interface überlastet den Server. + - Ursache: + Der Web-Client spricht nicht direkt mit Mumble, + sondern per WebSocket mit seinem Server. + Der Server muß dann zwischen dem WebSocket und Mumble vermitteln. + + * VNC-Web-Interface + - Problem: Es hat funktioniert, aber es war langsam. + - Ursache: + Der Web-Client spricht nicht direkt mit VNC, + sondern per WebSocket mit seinem Server. + Der Server muß dann zwischen dem WebSocket und VNC vermitteln. + + * Mögliche Lösung: effizienteres websockify + - Aktuelle Implementierungen: python, node.js + - Idee: In C programmieren. + https://github.com/mittorn/websockify-c - ohne SSL, + aber um SSL kümmert sich ja der Web-Server (Proxy) + - Idee: node.js-Version verwenden. + node.js ist nur um den Faktor 1.5 langsamer als C, python ca. 10mal + https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html + + * Weitere Lösungsideen + - auf mehrere Server verteilen + ? TigerVNC: effizienter gestalten: Scroll-Algorithmus + ? x11vnc: effizienter gestalten: Scroll-Algorithmus + ? noVNC: effizienter gestalten: WebAssembly + ? noVNC: effizienter gestalten: Scroll-Algorithmus + +Daten zu PULT-Nutzung, 14.05.2021, 11:51:32 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Mumble-Web-Interface: websockify python-3 + websockify auf main-0: 3% CPU-Last pro Instanz am 10.5.2021 + websockify auf main-0: 2.5% bis 4.0% CPU-Last pro Instanz am 14.5.2021 + +VNC-Web-Interface: websockify python-2.7, TigerVNC + websockify auf streaming: 1% CPU-Last pro Instanz am 10.5.2021 + websockify auf streaming: 2.5% CPU-Last pro Instanz am 14.5.2021 + TigerVNC auf streaming: 50% bis 64% CPU-Last mit 13 Instanzen am 14.5.2021 + TigerVNC auf streaming: 40% bis 45% CPU-Last mit 7 Instanzen am 14.5.2021 + TigerVNC auf streaming: 90% bis 97% CPU-Last mit ~120 Instanzen am 14.5.2021 + +Von der Anwendung bis zum Kernel: libc, 14.05.2021, 14:17:04 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ gcc -Wall -O -g3 hello-1.c -o hello-1 +$ gdb -tui ./hello-1 +(gdb) b 5 # setze Breakpoint vor printf()-Aufruf +(gdb) run +(gdb) step # springe in die aufgerufene Funktion hinein +(gdb) directory libc/glibc-2.28/libio # Verzeichnis für Quelltext mitteilen +--> _IO_puts() +(gdb) next # 1 Zeile ausführen +--> _IO_sputn() # springe in die aufgerufene Funktion hinein +--> IO_validate_vtable() # In dieser Funktion landen wir stattdessen. +--> return vtable; +--> "Hello, world!\n" erscheint auf dem Bildschirm. +--> ??? + +_IO_sputn() ist keine Funktion, sondern ein Präprozessor-Makro, +der _IO_XSPUTN() aufruft. + +_IO_XSPUTN() ist keine Funktion, sondern ein Präprozessor-Makro, +der JUMP2() aufruft und zusätzlich __xsputn +als ersten Parameter übergibt. + +JUMP2() ist keine Funktion, sondern ein Präprozessor-Makro, +der die Funktion _IO_JUMPS_FUNC(THIS)->FUNC() aufruft +und zusätzlich THIS als ersten Parameter übergibt. +FUNC hat hierbei den Wert __xsputn, und +THIS hat den Wert FP, also die Datei, hier also stdout. + +_IO_JUMPS_FUNC() ist keine Funktion, sondern ein Präprozessor-Makro, +der ... + +# define _IO_JUMPS_FUNC(THIS) \ + (IO_validate_vtable \ + (*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS) \ + + (THIS)->_vtable_offset))) + +... prüft, ob die virtuelle Methodentabelle (vtable) in Ordnung ist +und einen Zeiger darauf zurückliefert. +Anschließend kann JUMP2() die tatsächliche Funktion __xsputn() aufrufen. + +Gesamtergebnis: + +_IO_sputn() ist eine virtuelle Methode der Datei. +THIS hat den Wert der Datei, hier also stdout. + +... +--> return vtable; +--> _IO_new_file_xsputn() +# --> _IO_OVERFLOW (f, EOF) +# --> IO_valudate_vtable() # Aufruf einer virtuellen Methode +# --> _IO_new_file_overflow() +# --> _IO_do_write (f, ...) # Präprozessor-Makro für ... +# --> _IO_new_do_write (f, ...) +_IO_default_xsputn (f, ...) +--> _IO_OVERFLOW (f, EOF) +--> IO_valudate_vtable() # Aufruf einer virtuellen Methode +--> _IO_new_file_overflow() +--> _IO_do_write (f, ...) # Präprozessor-Makro für ... +--> _IO_new_do_write (f, ...) +... Schleife ... +Datei fileops.c, Zeile 791 +--> _IO_new_do_write (f, ...) +--> new_do_write (f, ...) +--> _IO_SYSWRITE (fp, ...) +--> __libc_write() +Datei sysdeeps/unix/sysv/linux/write.c, Zeile 26 +--> return SYSCALL_CANCEL (write, fd, buf, nbytes); diff --git a/20210514/hello-1.c b/20210514/hello-1.c new file mode 100644 index 0000000000000000000000000000000000000000..b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac --- /dev/null +++ b/20210514/hello-1.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int main (void) +{ + printf ("Hello, world!\n"); + return 0; +} diff --git a/20210514/hello-2.c b/20210514/hello-2.c new file mode 100644 index 0000000000000000000000000000000000000000..b767f77cd3a7328e5f45b60e674d32a647386509 --- /dev/null +++ b/20210514/hello-2.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int main (void) +{ + puts ("Hello, world!"); + return 0; +} diff --git a/20210514/hello-3.c b/20210514/hello-3.c new file mode 100644 index 0000000000000000000000000000000000000000..e94ca36ea31d1cda0d9f38d132cf59fc21c08fb8 --- /dev/null +++ b/20210514/hello-3.c @@ -0,0 +1,12 @@ +extern int puts (char *s); + +void printf (void) +{ + puts ("Hello, world!"); +} + +int main (void) +{ + printf (); + return 0; +} diff --git a/20210514/verbinde-video-1.txt b/20210514/verbinde-video-1.txt new file mode 100644 index 0000000000000000000000000000000000000000..aa25ed6cbcadb114bdbde3aa6b6b5de580a6bdd0 --- /dev/null +++ b/20210514/verbinde-video-1.txt @@ -0,0 +1,30 @@ +streaming/home/pult/vnc6> DISPLAY=:6 HOME=`pwd` xwininfo -root -children + +xwininfo: Window id: 0x394 (the root window) (has no name) + + Root window id: 0x394 (the root window) (has no name) + Parent window id: 0x0 (none) + 20 children: + 0x1600088 (has no name): ("ssvncviewer" "Ssvnc") 1920x1080+0+0 +0+0 + 0x12003df "janus-1 Camera 0": ("display-im6.q16" "Display-im6.q16") 480x360+1440+720 +1440+720 + 0x20012a "Xpdf: /home/pult/vnc6/vnc-testbild.pdf": ("win" "Xpdf") 1920x1080+0+0 +0+0 + 0x12009ba "Pan Icon": ("display-im6.q16" "Display-im6.q16") 96x72+960+960 +960+960 + 0x12008c4 "Magnify 3X": ("display-im6.q16" "Display-im6.q16") 256x256+960+960 +960+960 + 0x12007c5 (has no name): ("display-im6.q16" "Display-im6.q16") 1x1+960+960 +960+960 + 0x12006cb (has no name): ("display-im6.q16" "Display-im6.q16") 1x1+960+960 +960+960 + 0x12005d1 "Commands": ("display-im6.q16" "Display-im6.q16") 134x410+960+670 +960+670 + 0x12001f3 (has no name): ("display-im6.q16" "Display-im6.q16") 96x72+960+960 +960+960 + 0x1600081 "chat": ("chat" "Ssvnc") 410x359+0+0 +0+0 + 0x600251 (has no name): () 1x1+3+2 +3+2 + 0x3a2 (has no name): () 100x100+0+0 +0+0 + 0x20013f "Xpdf: Print": ("printDialog_popup" "Xpdf") 5x5+0+0 +0+0 + 0x20013e "Xpdf: Find": ("findDialog_popup" "Xpdf") 5x5+0+0 +0+0 + 0x200130 "Xpdf: About": ("aboutDialog_popup" "Xpdf") 450x300+0+0 +0+0 + 0x200116 (has no name): () 5x5+0+0 +0+0 + 0x20010e "Xpdf: Password": ("passwordDialog_popup" "Xpdf") 5x5+0+0 +0+0 + 0x400001 (has no name): () 10x10+-100+-100 +-100+-100 + 0x200002 (has no name): () 1x1+0+0 +0+0 + 0x200001 "xpdf.real": ("xpdf.real" "Xpdf") 1x1+0+0 +0+0 + +streaming/home/pult/vnc6> DISPLAY=:6 HOME=`pwd` xdotool windowraise 0x12003df +streaming/home/pult/vnc6>