24.08. TCP veiktspēja

Pēdējais mainījis Administrator 2011-06-06 17:16

24.08. TCP veiktspēja

1980-to gadu vidū publicētie skaitļi parādīja, ka TCP #term("caurlaidspēja", "throughput") uz Ethernet'a ir apmēram 100,000 līdz 200,000 baitu sekundē (17.5.nodaļa grāmatā [Stevens 1990] citē šos avotus). Kopš tā laika daudz kas ir mainījies. Ir parasts, ka plaša patēriņa aparatūra (darbstacijas un ātrākie personāldatori) var nodrošināt 800,000 un vairāk baitus sekundē.

Ir noderīgi veikt aprēķinu, lai noskaidrotu teorētisko maksimālo caurlaispēju, ko varētu novērot ar TCP uz 10 Mbits/sec Ethernet'a [Warnock 1991]. Šī aprēķina pamatā esošie skaitļi apkopoti #picref("f_24_9.gif", "24.9.attēlā"). Šis attēls parāda kopīgo apmainīto baitu skaitu pilna izmēra datu segmentam un ACK.

#pic("f_24_9.gif", "300")
24.9.attēls: Lauku izmēri Ethernet'a teorētiskā maksimuma caurlaidspējas aprēķinam

Mums jāsarēķina #term("virstēriņš", "overhead"): preambula, PAD baiti, ko pievieno apstiprinājumam (ACK), CRC un minimālā starppakešu sprauga (9.6 mikrosekundes, kas ir 12 baiti pie 10 Mbits/sec).

Vispirms pieņemam, ka sūtītājs nosūta cieši blakus divus pilna apjoma datu segmentus, un tad saņēmējs nosūta ACK šiem diviem segmentiem. Maksimālā caurlaidspēja tad ir:

throughput1.gif

Ja TCP logu atver līdz maksimālajam izmēram (65535, neizmantojot loga mērogošanas opciju), tas atļauj logu ar 44 1460-baitu segmentiem. Ja saņēmējs nosūta ACK'u sūta ik pēc katra 22.segmenta, tad aprēķins kļūst šāds:

throughput2.gif

Tā ir teorētiskā augšējā robeža, kas īstenojas ar dažiem pieņēmumiem: saņēmēja sūtītais ACK nesaduras Ethernet'a tīklā ar vienu no sūtītāja segmentiem; sūtītājs var pārsūtīt divus segmentus ar minimālo Ethernet'a atstatumu. Par spīti šo skaitļu optimismam [Warnock 1991] mērījumi uzrādīja ilgtspējīgu 1,075,000 baiti/s ātrumu Ethernet'ā ar standartu daudzlietotāju darbstaciju (lai gan tā bija ātra darbstacija). Tas iznāk 90% no teorētiski iespējamās vērtības.

Pārejot uz ātrākiem tīkliem, piemēram, FDDI (100 Mbits/s), [Schryver 1993] norāda, ka trīs komerciālie piegādātāji ir uzrāījuši TCP pa FDDI ātrumu starp 80 un 98 Mbits/sec. Ja pieejams vēl lielāks #term("joslas platums", "bandwidth"), [Borman 1992] ziņo par līdz pat 781 Mbits/sec starp diviem Cray Y-MP datoriem, lietojot 800 Mbits/sec ātro HIPPI kanālu, un 907 Mbits/sec starp diviem procesiem, izmantojot #term("atcilpas", "loopback") interfeisu uz Cray Y-MP.

Ikvienu reālu scenāriju skar šādi ierobežojumi [Borman 1991].

  1. Nevar iet ātrāk par vislēnākā datuposma ātrumu.
  2. Nevar iet ātrāk nekā ļauj #term("atmiņas joslas platums", "memory_bandwidth") uz vislēnākās mašīnas. Pieņemam, ka jūsu implementācija veic tikai vienreizēju datu aplūkošanu. Ja tā nav (t.i. jūsu implementācija vienreiz aplūko datus, lai tos pārkopētu no lietotāja apgabala uz kodola apgabalu, pēc tam otrajā datu aplūkošanā rēķina TCP kontrolsummu) ātrums būs vēl mazāks. [Dalton et al. 1993] apraksta veiktspējas uzlabojumus standarta Bērlija izejas tekstos, kuri samazina datu kopēšanu skaitu līdz vienai. [Partridge and Pink 1993] lietoja to pašu "kopēšana+kontrolsumma" pieeju priekš UDP, kas kopā ar citiem uzlabojumiem, paātrināja UDP veiktspēju par apmēram 30%.
  3. Nevar iet ātrāk kā saņēmēja piedāvātā loga izmērs dalīts ar #term("aprites", "round_trip") ceļa laiku. (Tas ir mūsu joslas platuma un aizkavēšanas reizinājuma vienādojums, kas izsaka loga izmēru kā joslas platuma un aizkavēšanas reizinājumu, un tad atrisina šo vienādojumu priekš dotā joslas platuma.) Ja izmantojam maksimālo loga mēroga reizinātāju 14 no 24.4.nodaļas, tad mums ir loga izmērs ar 1 gigabaitu, to izdalot ar RTT iegūstam joslas platuma augšējo robežu.
Kopsaucējs visiem šiem skaitļiem ir tāds, ka īsto TCP ātruma augšējo ierobežojumu nosaka TCP loga izmērs un gaismas ātrums. Kā secināts darbā [Partridge and Pink 1993], daudzas protokolu veiktspējas problēmas ir implementāciju nepilnības nevis pašu protokolu ierobežojumu rezultāts.

Tagi:
Izveidojis Kalvis Apsītis 2008-05-15 10:59
    
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 6.4 - Documentation