Dit is de opdracht flowgrind die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
flowgrind - geavanceerde TCP-verkeersgenerator voor Linux, FreeBSD en Mac OS X
KORTE INHOUD
stroomgrind [OPTIE] ...
PRODUCTBESCHRIJVING
stroomgrind is een geavanceerde TCP-verkeersgenerator voor het testen en benchmarken van Linux,
FreeBSD- en Mac OS X TCP/IP-stacks. In tegenstelling tot andere prestatiemeetinstrumenten is het
heeft een gedistribueerde architectuur, waar doorvoer en andere statistieken worden gemeten
tussen willekeurige flowgrind-serverprocessen, flowgrind-daemon stroomgrindd(1).
Flowgrind meet naast goodput (throughput), de interaankomsttijd van de applicatielaag
(IAT) en retourtijd (RTT), blockcount en netwerktransacties/s. In tegenstelling tot de meeste cross-
platformtesttools, flowgrind verzamelt en rapporteert de TCP-statistieken die worden geretourneerd door de
TCP_INFO-socketoptie, die meestal intern is voor de TCP/IP-stack. op Linux en
FreeBSD omvat onder andere de schatting van de kernel van de end-to-end RTT, de grootte
van het TCP-congestievenster (CWND) en de drempel voor langzame start (SSTHRESH).
Flowgrind heeft een gedistribueerde architectuur. Het is opgesplitst in twee componenten: de flowgrind
demon, stroomgrindd(1) en de stroomgrind controleur. Met behulp van de controller, stromen tussen
elke twee systemen waarop de flowgrind-daemon draait, kunnen worden ingesteld (tests van derden). op regulier
intervallen tijdens de test verzamelt en toont de controller de meetresultaten van:
de demonen. Het kan meerdere stromen tegelijk uitvoeren met dezelfde of verschillende instellingen en
iedereen individueel plannen. Test- en besturingsaansluiting kan optioneel worden omgeleid naar:
verschillende interfaces.
Het genereren van verkeer zelf is ofwel bulkoverdracht, snelheidsbeperkt of geavanceerd
verzoek/antwoord testen. Flowgrind gebruikt libpcap om automatisch verkeer te dumpen voor
kwalitatieve analyse.
OPTIES
Het zijn twee belangrijke groepen opties: controlleropties en stroomopties. Zoals de
naam doet vermoeden, controlleropties zijn wereldwijd van toepassing en hebben mogelijk invloed op alle stromen, terwijl
stroomspecifieke opties zijn alleen van toepassing op de subset van stromen die zijn geselecteerd met de -F optie.
Verplichte argumenten bij lange opties is verplicht voor korte opties.
Algemeen opties
-h, --help[=WAT]
help weergeven en afsluiten. Optioneel WAT kan ofwel 'socket' zijn voor hulp bij socket
opties of hulp bij het genereren van verkeer
-v, --versie
versie-informatie afdrukken en afsluiten
Controller opties
-c, --toon-dubbelpunt=TYPE[,TYPE] ...
toon tussentijdse interval rapportkolom TYPE in uitvoer. Toegestane waarden voor
TYPE zijn: 'interval', 'through', 'transac', 'iat', 'kernel' (alle standaard weergegeven),
en 'blokken', 'rtt', 'vertraging' (optioneel)
-d, --debuggen
uitgebreidheid van debuggen vergroten. Optie meerdere keren toevoegen om de breedsprakigheid te vergroten
-e, --dump-voorvoegsel=PRE
prepend prefix PRE om bestandsnaam te dumpen (standaard: "flowgrind-")
-i, --rapport-interval=#.#
rapportage-interval, in seconden (standaard: 0.05 s)
--log-bestand[=FILE]
schrijf uitvoer naar logbestand FILE (standaard: flowgrind-'timestamp'.log)
-m rapporteer doorvoer in 2**20 bytes/s (standaard: 10**6 bit/s)
-n, --stromen=#
aantal teststromen (standaard: 1)
-o bestaande logbestanden overschrijven (standaard: niet doen)
-p print geen symbolische waarden (zoals INT_MAX) in plaats van getallen
-q, --stil
wees stil, log niet in op het scherm (standaard: uit)
-s, --tcp-stack=TYPE
bepaal niet automatisch de eenheid van bron-TCP-stacks. Forceer eenheid naar TYPE, waarbij
TYPE is 'segment' of 'byte'
-w schrijf uitvoer naar logbestand (zelfde als --log-bestand)
Stroom opties
Alle stromen hebben twee eindpunten, een bron en een bestemming. Het onderscheid tussen bron
en bestemmingseindpunten hebben alleen invloed op het tot stand brengen van verbindingen. Bij het starten van een stroom wordt de
bestemmingseindpunt luistert op een socket en het broneindpunt maakt er verbinding mee. Voor de
daadwerkelijke test maakt dit geen verschil, beide eindpunten hebben exact dezelfde mogelijkheden.
Gegevens kunnen in beide richtingen worden verzonden en veel instellingen kunnen afzonderlijk worden geconfigureerd voor
elk eindpunt.
Sommige van deze opties nemen het stroomeindpunt als argument, aangegeven met 'x' in de optie
syntaxis. 'x' moet worden vervangen door 's' voor het broneindpunt, 'd' voor de
bestemmingseindpunt of 'b' voor beide eindpunten. Om voor elk verschillende waarden op te geven
eindpunten, scheid ze door komma's. Bijvoorbeeld -W s=8192,d=4096 stelt de geadverteerde in
venster naar 8192 bij de bron en 4096 bij de bestemming.
-A x minimale responsgrootte gebruiken die nodig is voor RTT-berekening
(hetzelfde als -G s=p,C,40)
-B x=# stel de gevraagde verzendbuffer in, in bytes
-C x stop de stroom als het lokale congestie ervaart
-D x=DSCP
DSCP-waarde voor type-of-service (TOS) IP-headerbyte
-E bytes in payload opsommen in plaats van nullen te verzenden
-F #[,#] ...
stroomopties die op deze optie volgen, zijn alleen van toepassing op de opgegeven stroom-ID's. Nuttig in
combinatie met -n om specifieke opties voor bepaalde stromen in te stellen. Nummering begint
met 0, dus -F 1 verwijst naar de tweede stroom. Met -1 kan naar alle stroom worden verwezen
-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]
activeer het genereren van stochastisch verkeer en stel parameters in volgens de gebruikte
verdeling. Zie voor meer informatie de sectie 'Optie voor het genereren van verkeer'
-H x=HOST[/CONTROL[:PORT]]
testen van/naar HOST. Optioneel argument is het adres en de poort voor de CONTROL
verbinding met dezelfde host. Een eindpunt dat niet is opgegeven, wordt verondersteld te zijn
localhost
-J # gebruik willekeurig seed # (standaard: lees / Dev / urandom)
-I eenrichtingsvertragingsberekening inschakelen (geen kloksynchronisatie)
-L bel connect() op test socket onmiddellijk voordat u begint met het verzenden van gegevens (late
aansluiten). Indien niet gespecificeerd, wordt de testverbinding tot stand gebracht in de voorbereiding
fase voordat de test begint
-M x dump verkeer met libpcap. stroomgrindd(1) moet als root worden uitgevoerd
-N shutdown () elke socketrichting na teststroom
-O x=OPT
zet socket optie OPT op test socket. Voor meer informatie zie sectie
'Socket-opties'
-P x herhaal select() niet om door te gaan met verzenden als de blokgrootte dat niet deed
voldoende om de verzendwachtrij te vullen (opdringerig)
-Q alleen samenvatten, er worden geen tussentijdse intervalrapporten berekend (stil)
-R x=#.#(z|k|M|G)(b|B)
verzenden met gespecificeerde snelheid per seconde, waarbij: z = 2**0, k = 2**10, M = 2**20, G =
2**30, en b = bits/s (standaard), B = bytes/s
-S x=# stel blokgrootte (bericht) in, in bytes (hetzelfde als -G s=q,C,#)
-T x=#.#
ingestelde stroomduur, in seconden (standaard: s=10,d=0)
-U # set applicatiebuffergrootte, in bytes (standaard: 8192) kapt waarden af indien gebruikt met
stochastische verkeersgeneratie
-W x=# stel de gevraagde ontvangerbuffer in (geadverteerd venster), in bytes
-Y x=#.#
stel de initiële vertraging in voordat de host begint te verzenden, in seconden
VERKEER GENERATION OPTIE
Via optie -G flowgrind ondersteunt het genereren van stochastisch verkeer, wat het mogelijk maakt om
naast normale bulk ook geavanceerde snelheidsbeperkte en request-response gegevensoverdrachten.
De optie voor het genereren van stochastisch verkeer -G neemt het stroomeindpunt als argument, aangeduid met
door 'x' in de optiesyntaxis. 'x' moet worden vervangen door 's' voor de bron
eindpunt, 'd' voor het eindpunt van de bestemming of 'b' voor beide eindpunten. Let echter op:
dat bidirectionele verkeersgeneratie tot onverwachte resultaten kan leiden. Om anders te specificeren
waarden voor elk eindpunt, scheid ze door komma's.
-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]
Stroomparameter:
q verzoekgrootte (in bytes)
p responsgrootte (in bytes)
g interpacket gap aanvragen (in seconden)
Uitkeringen:
C constante (#1: waarde, #2: niet gebruikt)
U uniform (#1: min, #2: maximaal)
E exponentieel (#1: lamba - levenslang, #2: niet gebruikt)
N normaal (#1: mu - gemiddelde waarde, #2: sigma_square - variantie)
L lognormaal (#1: zeta - gemiddeld, #2: sigma - std dev)
P pareto (#1: k-vorm, #2: x_min - schaal)
W weibull (#1: lambda - schaal, #2: k - vorm)
Geavanceerde distributies zoals weibull zijn alleen beschikbaar als flowgrind is gecompileerd
met libgsl-ondersteuning.
-U # specificeer een limiet voor de berekende waarden voor verzoek- en responsgroottes, nodig
omdat de geavanceerde gedistribueerde waarden onbegrensd zijn, maar we moeten de weten
buffergrootte (niet nodig voor constante waarden of uniforme verdeling). Waarden
buiten de grenzen worden herberekend totdat een geldig resultaat optreedt, maar maximaal 10
keer (dan wordt de grenswaarde gebruikt)
SOCKET OPTIE
Met Flowgrind kunnen de volgende standaard en niet-standaard socket-opties via optie worden ingesteld:
-O.
Alle socketopties nemen het stroomeindpunt als argument, aangegeven met 'x' in de optie
syntaxis. 'x' moet worden vervangen door 's' voor het broneindpunt, 'd' voor de
bestemmingseindpunt of 'b' voor beide eindpunten. Om voor elk verschillende waarden op te geven
eindpunten, scheid ze door komma's. Bovendien is het mogelijk om hetzelfde herhaaldelijk door te geven
eindpunt om meerdere socket-opties te specificeren.
Standaard stopcontact opties
-O x=TCP_CONGESTION=ALG
stel congestiecontrole-algoritme ALG in op test-socket
-O x=TCP_CORK
zet TCP_CORK op test-socket
-O x=TCP_NODELAY
nagle-algoritme uitschakelen op test-socket
-O x=SO_DEBUG
zet SO_DEBUG op test socket
-O x=IP_MTU_DISCOVER
stel IP_MTU_DISCOVER in op test-socket als dit niet al standaard is ingeschakeld door het systeem
-O x=ROUTE_RECORD
zet ROUTE_RECORD op test socket
Niet-standaard stopcontact opties
-O x=TCP_MTCP
zet TCP_MTCP (15) op test-socket
-O x=TCP_ELCN
zet TCP_ELCN (20) op test-socket
-O x=TCP_LCD
zet TCP_LCD (21) op test-socket
Voorbeelden
stroomgrind
testen van localhost IPv4 TCP-prestaties met standaardinstellingen, hetzelfde als flowgrind -H
b=127.0.0.1 -Ts=10,d=0. De flowgrind-daemon moet worden uitgevoerd op localhost
stroomgrind -H b=::1/127.0.0.1
hetzelfde als hierboven, maar het testen van localhost IPv6 TCP-prestaties met standaardinstellingen
stroomgrind -H s=host1,d=host2
bulk TCP-overdracht tussen host1 en host2. Host1 fungeert als bron, host2 als
eindpunt van de bestemming. Op beide eindpunten moet de flowgrind-daemon worden uitgevoerd. De
standaard stroomopties worden gebruikt, met een stroomduur van 10 seconden en een datastroom
van host1 naar host2
stroomgrind -H s=host1,d=host2 -T s=0,d=10
hetzelfde als het bovenstaande, maar in plaats daarvan met een stroom die gegevens gedurende 10 seconden verzendt van host2 naar
host1
stroomgrind -n 2 -F 0 -H s=192.168.0.1,d=192.168.0.69 -F 1 -H s=10.0.0.1,d=10.0.0.2
stel twee parallelle stromen in, eerste stroom tussen 192.168.0.1 en 192.168.0.69, tweede
stroom tussen 10.0.0.1 tot 10.0.0.2
stroomgrind -p -H s=10.0.0.100/192.168.1.100,d=10.0.0.101/192.168.1.101 -A s
stel één stroom in tussen 10.0.0.100 en 10.0.0.101 en gebruik 192.168.1.x IP-adressen
voor gecontroleerd verkeer. Minimale respons activeren voor RTT-berekening
stroomgrind -i 0.001 -T s = 1 | egr ^S | knuppel -volharden -e 'verhaal "-" gebruik 3:5 Met lijnen
titel "Doorvoer" '
stel één flow over loopback-apparaat in en plot de gegevens van de afzender met de hulp
van gnuplot
stroomgrind -G s=q,C,400 -G s=p,N,2000,50 -G s=g,U,0.005,0.01 -U 32000
-G s=q,C,400: gebruik een constante verzoekgrootte van 400 bytes
-G s=p,N,2000,50: gebruik normaal verdeelde responsgrootte met gemiddelde 2000 bytes en
variantie 50
-G s=g,U,0.005,0.01: gebruik uniform verdeelde interpacket gap met min. 0.005s en
en max 10ms
-U 32000: blokgroottes afkappen op 32 kbytes (nodig voor normale distributie)
VERKEER SCENARIO'S
De volgende voorbeelden laten zien hoe het verkeer van Flowgrind kan worden gegenereerd:
gebruikt. Deze zijn verwerkt in verschillende tests voor flowgrind en zijn bewezen
zinvol. Aangezien het internetverkeer divers is, is er geen garantie dat deze
passend in elke situatie.
Aanvraag antwoord Style (HTTP)
Dit scenario is gebaseerd op het werk in
http://www.3gpp2.org/Public_html/specs/C.R1002-0_v1.0_041221.pdf.
stroomgrind -M s -G s=q,C,350 -G s=p,L,9055,115.17 -U 100000
-M s: verkeer dumpen aan de kant van de afzender
-G s=q,C,350: gebruik constante verzoeken met een grootte van 350 bytes
-G s=p,L,9055,115: gebruik lognormale verdeling met gemiddelde 9055 en variantie 115 voor
responsgrootte
-U 100000: antwoord afkappen op 100 kbytes
Voor dit scenario raden we aan om ons te concentreren op RTT (lagere waarden zijn beter) en Netwerk
Transacties/s als metrisch (hogere waarden zijn beter).
Interactief Sessie (Telnet)
Dit scenario emuleert een telnet-sessie.
stroomgrind -G s=q,U,40,10000 -G s=q,U,40,10000 -O b=TCP_NODELAY
-G s=q,U,40,10000 -G s=q,U,40,10000: gebruik uniform gedistribueerd verzoek en antwoord
grootte tussen 40B en 10kB
-O b=TCP_NODELAY: stel socket-opties TCP_NODELAY in zoals gebruikt door telnet-applicaties
Voor dit scenario zijn RTT (lager is beter) en netwerktransacties/s nuttige meetwaarden
(hoger is beter).
tarief Beperkt (streamen) Gemiddelde)
Dit scenario emuleert een overdracht van een videostream met een bitsnelheid van 800 kbit/s.
stroomgrind -G s=q,C,800 -G s=g,N,0.008,0.001
Gebruik normaal verdeelde interpacket gap met gemiddelde 0.008 en een kleine variantie
(0.001). In combinatie met verzoekgrootte 800 bytes een gemiddelde bitsnelheid van ongeveer 800
kbit/s wordt bereikt. De variantie wordt toegevoegd om een variabele bitrate te emuleren zoals het is
gebruikt in de videocodecs van vandaag.
Voor dit scenario zijn de IAT (lager is beter) en minimale doorvoer (hoger is beter)
interessante statistieken.
OUTPUT COLUMNS
Stroom/eindpunt identifiers
# stroomeindpunt, ofwel 'S' voor bron of 'D' voor bestemming
ID numerieke stroomidentificatie:
beginnen en einde
grenzen van het meetinterval in seconden. De getoonde tijd is de verstreken tijd
tijd sinds ontvangst van het RPC-bericht om de test te starten vanaf het daemons-punt van
view
Aanvraag lagen metriek
door
het doorgeven van goodput van het stroomeindpunt tijdens dit meetinterval,
gemeten in Mbit/s (standaard) of MB/s (-m)
transactie
aantal succesvol ontvangen responsblokken per seconde (we noemen het netwerk
transacties/en)
verzoek/resp
aantal verzoek- en antwoordblok verzonden tijdens dit meetinterval (kolom
standaard uitgeschakeld)
IAT inter-aankomsttijd blokkeren (IAT). Samen met de minimum en maximum de
rekenkundig gemiddelde voor dat specifieke meetinterval wordt weergegeven. Als er geen blok is
ontvangen tijdens meldinterval, wordt 'inf' weergegeven.
DLY en RTT
1-way en 2-way block delay respectievelijk de block latency en de block round-trip
tijd (RTT). Voor beide vertragingen de minimum en maximum gevonden waarden daarin
meetinterval worden samen met het rekenkundig gemiddelde weergegeven. Indien geen blok,
respectievelijk blokbevestiging is binnengekomen tijdens dat rapportinterval, 'inf' is
weergegeven. Zowel de 1-weg als 2-weg blokvertraging zijn standaard uitgeschakeld (zie
optie -I en -A).
pit metriek (TCP_INFO)
Alle volgende TCP-specifieke metrische gegevens worden verkregen uit de kernel via de TCP_INFO
stopcontact optie bij de einde van elk rapportinterval. De bemonsteringsfrequentie kan worden gewijzigd via
optie -i.
cwnd (tcpi_cwnd)
grootte van TCP-congestievenster (CWND) in aantal segmenten (Linux) of bytes
(FreeBSD)
sst (tcpi_snd_sshtresh)
grootte van de drempel voor langzaam opstarten in aantal segmenten (Linux) of bytes (FreeBSD)
uack (tcpi_unacked)
aantal momenteel niet-erkende segmenten, dwz aantal segmenten in vlucht
(FlightSize) (alleen Linux)
zak (tcpi_sacked)
aantal selectief bevestigde segmenten (alleen Linux)
verloren (tcpi_lost)
aantal verloren veronderstelde segmenten (alleen Linux)
terug (tcpi_retrans)
aantal niet-bevestigde opnieuw verzonden segmenten (alleen Linux)
trakteren (tcpi_retransmits)
aantal hertransmissies getriggerd door een time-out voor hertransmissie (RTO) (alleen Linux)
Fack (tcpi_fakets)
aantal segmenten tussen SND.UNA en de hoogste selectief bevestigd
volgnummer (SND.FACK) (alleen Linux)
reor (tcpi_reordering)
statistiek voor het opnieuw ordenen van segmenten. De Linux-kernel kan herordenen detecteren en verwerken
zonder noemenswaardig prestatieverlies als de afstand die een segment verplaatst, dat doet
de herschikkingsstatistiek niet overschrijden (alleen Linux)
RTT (tcpi_rtt) en rttvar (tcpi_rttvar)
TCP-retourtijd en de variantie gegeven in ms
RTO (tcpi_rto)
de time-out voor herverzending gegeven in ms
bkof (tcpi_backoff)
aantal RTO-backoffs (alleen Linux)
ca staat (tcpi_ca_state)
interne status van de TCP-congestiecontrolestatusmachine zoals geïmplementeerd in de
Linux-kernel. Kan een van zijn open, wanorde, rij, na een training or uit (alleen Linux)
Openen is de normale toestand. Het geeft aan dat er geen dubbele bevestiging (ACK) is
ontvangen en geen enkel segment wordt als verloren beschouwd
Wanorde
wordt ingevoerd bij ontvangst van de eerste opeenvolgende duplicaat-ACK of
selectieve erkenning (SACK)
CWR wordt ingevoerd wanneer een melding van Expliciete Congestiemelding (ECN)
is ontvangen
Herstel
wordt ingevoerd wanneer drie dubbele ACK's of een equivalent aantal SACK's zijn
ontvangen. In deze staat congestiecontrole en verliesherstelprocedures zoals:
Fast Retransmit en Fast Recovery (RFC 5861) worden uitgevoerd
Verlies wordt ingevoerd als de RTO verloopt. Opnieuw congestiecontrole en verliesherstel
procedures worden uitgevoerd
SMS-berichten en pmtu
afzender maximale segmentgrootte en pad maximale transmissie-eenheid in bytes
Intern stroomgrind staat (enkel en alleen ingeschakeld in debug bouwt)
toestand toestand van de stroom binnen flowgrind voor diagnostische doeleinden. Het is een tupel van twee
waarden, de eerste voor verzenden en de tweede voor ontvangen. Idealiter de staten van
zowel de bron- als de bestemmingseindpunten van een stroom moeten symmetrisch zijn, maar aangezien
ze zijn niet gesynchroniseerd, ze kunnen niet tegelijkertijd veranderen. De mogelijke waarden
zijn:
c Richting voltooid verzenden/ontvangen
d Wachten op initiële vertraging
f Foutstatus
l Actieve status, nog niets verzonden of ontvangen
n Normale activiteit, sommige gegevens zijn verzonden of ontvangen
o Flow heeft geen duur in die richting, er worden geen gegevens uitgewisseld
AUTEURS
Flowgrind is oorspronkelijk gestart door Daniel Schaffrath. De gedistribueerde meting
architectuur en geavanceerde verkeersgeneratie werden later toegevoegd door Tim Kosse en
Christelijk Samsel. Momenteel wordt flowgrind ontwikkeld en onderhouden door Arnd Hannemann en
Alexander Zimmerman.
Gebruik flowgrind online met onworks.net-services