
Ich habe ein Perl Programm geschrieben um tcp Durchsatz zu messen: https://fex.belwue.de/fstools/tcpbm.html tcpbm funktioniert als Client oder als Server, je nachdem wie man es aufruft. Hier die Verwendung als Client am Beispiel: root@fex01:~# tcpbm -a flupp.belwue.de Testing 129.143.254.24 with local ip 129.143.254.25 sent: 18616 MB in 10 s = 1861 MB/s received: 21219 MB in 10 s = 2121 MB/s Testing 2001:7c0:0:254::24 with local ip 2001:7c0:0:254::25 sent: 18892 MB in 10 s = 1889 MB/s received: 18604 MB in 10 s = 1860 MB/s Ich moechte nun gerne die Client Funktionalitaet in Python neu implementieren. Meine Python Kenntnisse sind aber nur rudimentaer. Ich wuerde nun gerne vorab wissen, wie aufwaendig/kompliziert das wird. Konkret: - DNS IPv4 und IPv6 Abfrage - HTTP POST und GET (optional ueber Proxy) - Dummy-Daten verschicken bzw lesen -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Am 08.06.19 um 21:29 schrieb Ulli Horlacher:
Ich wuerde nun gerne vorab wissen, wie aufwaendig/kompliziert das wird.
Wenn man sich mit den Begrifflichkeiten von TCP, UDP und HTTP auskennt, wahrscheinlich nicht sehr.
- DNS IPv4 und IPv6 Abfrage
Wenn es nur darum geht, einen Hostnamen aufzulösen: https://docs.python.org/3/library/socket.html#socket.getaddrinfo Wenn es komplizierter wird: http://www.dnspython.org/
- HTTP POST und GET (optional ueber Proxy)
https://2.python-requests.org/en/master/user/quickstart/ https://2.python-requests.org/en/master/user/advanced/#proxies
- Dummy-Daten verschicken bzw lesen
https://faker.readthedocs.io/en/master/ ? Hdh, Chris

Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
Ich habe ein Perl Programm geschrieben um tcp Durchsatz zu messen:
https://fex.belwue.de/fstools/tcpbm.html
Ich moechte nun gerne die Client Funktionalitaet in Python neu implementieren. Meine Python Kenntnisse sind aber nur rudimentaer.
Ich wuerde nun gerne vorab wissen, wie aufwaendig/kompliziert das wird.
War gar nicht so schwer :-) Zuerst nochmal die original Perl Version: framstag@fex:~/python: tcpbm localhost sent: 49414 MB in 10 s = 4941 MB/s received: 50528 MB in 10 s = 5052 MB/s Dann die Neuimplementation in Python: framstag@fex:~/python: ./tcpbm.py localhost sent: 49847 MB in 10 s = 4984 MB/s received: 49618 MB in 10 s = 4961 MB/s Also fast gleich schnell. Interessant nun der Vergleich zu Standard tools in C, also nativem binary: ^^^^^^^^^ framstag@fex:~/python: iperf -s -N >/dev/null & sleep 1; iperf -c localhost -f M -t 10 ------------------------------------------------------------ Client connecting to localhost, TCP port 5001 TCP window size: 2.50 MByte (default) ------------------------------------------------------------ [ 3] local 127.0.0.1 port 42880 connected with 127.0.0.1 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 37925 MBytes 3792 MBytes/sec ^^^^^^^^^^^^^^^ framstag@fex:~/python: wget -O /dev/null http://localhost:591/tcpbm/20000.dd --2019-06-22 10:13:58-- http://localhost:591/tcpbm/20000.dd Resolving localhost (localhost)... 127.0.0.1, ::1 Connecting to localhost (localhost)|127.0.0.1|:591... connected. HTTP request sent, awaiting response... 200 OK Length: 20971520000 (20G) [application/octet-stream] Saving to: '/dev/null' /dev/null 100%[====================================================================================>] 19.53G 2.04GB/s in 9.7s 2019-06-22 10:14:07 (2.01 GB/s) - '/dev/null' saved [20971520000/20971520000] ^^^^^^^^^ framstag@fex:~/python: curl http://localhost:591/tcpbm/20000.dd >/dev/null % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19.5G 100 19.5G 0 0 3418M 0 0:00:05 0:00:05 --:--:-- 3425M ^^^^^ Python ist, was den tcp Durchsatz angeht, deutlich schneller als typische C Programme! Erstaunlich! Und das wo ich sicherlich ein schlechterer Programmierer bin als diejenige die iperf, wget und curl geschrieben haben. Ich hab zum Test hier localhost verwendet, um zu verhindern, dass ein langsamer Router das Ergenis verfaelscht. Wer sich fuer den Sourcecode interessiert: https://fex.rus.uni-stuttgart.de/fop/f7YRRMqd/tcpbm.py Ist sicherlich noch verbesserungsfaehig, ich bin Python Anfaenger :-) -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
Ich habe ein Perl Programm geschrieben um tcp Durchsatz zu messen:
https://fex.belwue.de/fstools/tcpbm.html
Ich moechte nun gerne die Client Funktionalitaet in Python neu implementieren. Meine Python Kenntnisse sind aber nur rudimentaer.
Ich wuerde nun gerne vorab wissen, wie aufwaendig/kompliziert das wird.
War gar nicht so schwer :-)
Wer sich fuer den Sourcecode interessiert:
Was ich noch vergessen habe zu erwaehnen: Damit kann jeder seine Internetanbindung testen, ganz egal wo er ist und ohne Klckibunti. Einfach aufrufen: framstag@juhu:/tmp: python3 tcpbm.py Testing tcpbm.belwue.de:591 with local ip 31.47.86.160 received: 30 MB in 10 s = 3130 kB/s sent: 3 MB in 10 s = 351 kB/s Da ich kein Windows habe, waere fuer mich interessant, ob tcpbm.py auch damit funktioniert. -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Am Sa Juni 22 2019, 08:25:20 schrieb Ulli Horlacher:
Python ist, was den tcp Durchsatz angeht, deutlich schneller als typische C Programme! Erstaunlich!
Ich weiss nicht woran das liegt, aber ich bin sicher, dass es dafür eine natürliche Erklärung gibt ;)
Und das wo ich sicherlich ein schlechterer Programmierer bin als diejenige die iperf, wget und curl geschrieben haben.
Vielleicht arbeiten die üblichen Verdächtigen mit kleineren Blöcken oder zusätzlichen Checks oder was auch immer -- bei gleichen Bedingungen sollte Python im Idealfall gleich schnell oder eine Idee langsamer sein. Also nicht gleich abheben... obwohl: https://xkcd.com/353/
participants (3)
-
Christopher Arndt
-
Peter Otten
-
Ulli Horlacher