Skip to content
Snippets Groups Projects
Commit aacc5be0 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Notizen und Beispiele 14.5.2021

parent 1d7d3e37
No related branches found
No related tags found
No related merge requests found
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);
#include <stdio.h>
int main (void)
{
printf ("Hello, world!\n");
return 0;
}
#include <stdio.h>
int main (void)
{
puts ("Hello, world!");
return 0;
}
extern int puts (char *s);
void printf (void)
{
puts ("Hello, world!");
}
int main (void)
{
printf ();
return 0;
}
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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment