PerfUG #11 : Network Quizz

Raphael Luta

Question 0

What is this ?

Question 1

Quel bénéfice moyen représente pour un Hedge Fund une diminution de latence de 1ms entre Londres et New York ?

  • $10 M
  • $100 M
  • $1 B
  • $10 B

Réponse 1

  • $100 M
  • Financement du Hibernian Express à hauteur de 300 M$
  • Tarif d’interconnexion 50x plus cher que câble actuel
  • Livraison prévue fin 2014-début 2015

Question 2

Comment est-ce possible de faire 22,5 Moctets de transfert par seconde sur une interface à 100 Mb/s ?

Conf. 1/3

                        $ ethtool eth0
Settings for eth0:
Speed: 100Mb/s
Duplex: Full

Conf. 2/3

$ ifconfig eth0
Eth0 Link encap:Ethernet HWaddr 4c:72:b9:67:21:75
inet addr:5.135.179.200 Bcast:5.135.179.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Conf. 3/3

$ ab -n 1000 -c 1 http://5.135.179.200:8000/
Benchmarking 5.135.179.200 (be patient)
Document Path: /
Document Length: 42012 bytes

Concurrency Level: 1
Time taken for tests: 18.349 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 422860000 bytes
HTML transferred: 420120000 bytes
Requests per second: 544.98 [#/sec] (mean)
Time per request: 1.835 [ms] (mean)
Time per request: 1.835 [ms] (mean, across all concurrent requests)
Transfer rate: 22504.84 [Kbytes/sec] received

Réponse 2

  1. Ethernet bypass sous Linux
  2. Comportement comme interface lo mais différente
    • Ne réagit pas aux paramètres lo
    • Ne réagit pas aux paramètres eth0
  3. Exemple possible sur shaping, etc…
  4. Sous Mac OS X, comportement différent :
$ netstat -rn
Destination Gateway Flags Refs Use Netif Expire
default 192.168.1.254 UGSc 18 0 en1
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 6 502225 lo0
192.168.1 link#5 UCS 6 0 en1
192.168.1.101 127.0.0.1 UHS 0 0 lo0

Question 3

Je veux envoyer un fichier DivX (600 Mo) à un ami qui habite à 1000 m.
Quel est le moyen d’envoi le plus rapide ?

  • ADSL2
  • 4G
  • clé USB

Réponse 3

  1. ADSL -> upload = 768 kbps
    • Transfert au mieux : 1h50
  2. 4G -> upload moyen 8 Mbps
    • Transfert au mieux : 11mn
  3. USB -> écriture 5 MBps, lecture 7 MBps, Marche 6 km/h, Bandwith infinie
    • Transfert au mieux : 120s + 10mn + 90s = 14mn

Réponse 3 bis

Question 4

Le proxy TCP ci-dessous fonctionne mais les performances sont catastrophiques. Comment l’améliorer ?


def srvDst = args[0],b
def bufferSize = 128 * 1024  // 128 kB

def server = new ServerSocket(4444)
server.setReceiveBufferSize(bufferSize)

while(true) {
    server.accept { socket ->
        socket.setTcpNoDelay(true)
        def client = new Socket(srvDst,8080)
        client.setTcpNoDelay(true)
        client.setSendBufferSize(bufferSize)
        socket.withStreams { sinput, soutput ->
            client.withStreams { cinput, coutput ->
                while ((b = sinput.read()) >= 0) coutput.write(b)
            }
        }
        client.close()
    }
}
            

Réponse 4

  • Réactiver Nagle
  • [ou] Buffer des écritures sur une taille ~ MSS
  • [et/ou]
  • Impact SENDBUF