接下來(lái)我們反著看一下pps的計(jì)算方法,100Mbps / 8 / (64B+20B)=0.1488Mpps。如果我們使用的數(shù)據(jù)包大于64B會(huì)如何?假如是128B,那公式將會(huì)變成這樣。176Mbps / 8 / (128B+20B)=0.1488Mpps,但我們知道,百兆路由器的設(shè)計(jì)寬帶極限是100Mbps,不可能超過(guò)這個(gè)數(shù)值,所以如果計(jì)算百兆路由器的 128B數(shù)據(jù)包轉(zhuǎn)發(fā)率,結(jié)果應(yīng)該是100Mbps / 8 / (128B+20B)=0.08446Mpps。結(jié)果與0.1488Mpps相差甚遠(yuǎn),這說(shuō)明產(chǎn)生了傳輸瓶頸,瓶頸來(lái)自于百兆路由器的設(shè)計(jì)標(biāo)準(zhǔn),而非來(lái)自于包轉(zhuǎn)發(fā)性能。0.1488Mpps的這個(gè)極限值,對(duì)于百兆路由器來(lái)講,基本上是不可能達(dá)到的,原因很簡(jiǎn)單,路由器的性能不足。我們不妨反著使用一下pps的計(jì)算公式,pps * (64B+20B) * 8 = bps,如果pps很低,那kps也必然小得可憐。并且在測(cè)試中我們發(fā)現(xiàn),一般路由器的pps確實(shí)很低。因?yàn)閜ps很低,那我們可以適當(dāng)放大“64B”這個(gè)數(shù)值,也就是說(shuō),我們不使用小包,我們可以使用大包,只要最后的乘積bps不大于100Mbps就可以。因?yàn)橹灰淮笥?00Mbps,那傳輸瓶頸我們便可認(rèn)為不存在,此時(shí)的瓶頸應(yīng)該只來(lái)自于路由器的包轉(zhuǎn)發(fā)性能。
說(shuō)到這里,可能您會(huì)問(wèn)這樣一個(gè)問(wèn)題,路由器轉(zhuǎn)發(fā)100個(gè)小包是不是比轉(zhuǎn)發(fā)100個(gè)大包要省事呢?關(guān)于這點(diǎn),小新在網(wǎng)上找到一位前輩的文章,其中有這樣一段描述:
路由器在處理數(shù)據(jù)包時(shí),主要的時(shí)間花在處理包頭、包尾上,對(duì)不同大小的數(shù)據(jù)包,路由器每秒能處理的包數(shù)量差別不會(huì)太大。這就像郵局處理包裹,主要的時(shí)間是花在處理寄件人、收件人和物品信息以及檢查上,包裹重一點(diǎn)輕一點(diǎn)對(duì)處理速度影響不會(huì)太大。如128Byte包每秒能處理10000個(gè),并不能做到64 Byte包每秒處理20000個(gè),而是只比10000個(gè)略多一點(diǎn)點(diǎn),比如10100個(gè)。
我們按著這個(gè)思路,使用大包去測(cè)試一臺(tái)路由器的吞吐量,在我們得到Mbps之后,只要這個(gè)值不大于100Mbps,那我們就可以認(rèn)為,路由器的傳輸瓶頸是來(lái)自于性能,也就是pps,而非是設(shè)計(jì)帶寬。另外,由于路由器的性能瓶頸來(lái)自對(duì)包頭信息的處理,而非來(lái)自傳輸數(shù)據(jù)包本身,所以我們可以認(rèn)為,測(cè)試不同大小數(shù)據(jù)包,雖然Mbps結(jié)果會(huì)不同,但pps性能應(yīng)該是一個(gè)相對(duì)平均的數(shù)值。
接下來(lái)說(shuō)一下測(cè)試環(huán)境,搭建環(huán)境很簡(jiǎn)單,只要有兩臺(tái)電腦就可以了,當(dāng)然,電腦的性能越強(qiáng)越好。測(cè)試軟件使用 IxChariot,測(cè)試腳本采用High_Performance_Throughput,Pair數(shù)量為100。IxChariot是一款被普遍使用的網(wǎng)絡(luò)負(fù)載測(cè)試工具,對(duì)High_Performance_Throughput腳本進(jìn)行修改,我們可以得到不同大小的數(shù)據(jù)包,Pair數(shù)量被設(shè)定在 100是因?yàn)槲覀冊(cè)跍y(cè)試中發(fā)現(xiàn)一個(gè)現(xiàn)象,比如,我們?cè)跍y(cè)試1514B大小的數(shù)據(jù)包吞吐量時(shí),一個(gè)Pair可能只有20Mbps左右,但隨著Pair數(shù)量的增加,吞吐量也會(huì)隨之上升,并最終達(dá)到吞吐最大值,Pair繼續(xù)增加,吞吐量也不會(huì)出現(xiàn)大的變化。使用100Pairs還有另外一個(gè)效果,多Pair在 Netstat中看到的效果就是多TCP連接數(shù),在多連接數(shù)下,高強(qiáng)度的吞吐測(cè)試對(duì)路由器性能和穩(wěn)定性都是一個(gè)考驗(yàn)。
對(duì)于為什么路由器的吞吐表現(xiàn)會(huì)隨著Pairs的數(shù)量增加而增加,這個(gè)小新不是很明白,不過(guò)使用抓包不具,我們也許能看出一些原因。我們修改 High_Performance_Throughput腳本,讓Ixchariot產(chǎn)生1024B大小的數(shù)據(jù)包,使用1Pair從PC1發(fā)送數(shù)據(jù)包到 PC2,在抓包工具中我們可以看到,PC1每發(fā)送一個(gè)1024B大小的數(shù)據(jù)偵,PC2就會(huì)返回一個(gè)60B左右的數(shù)據(jù)偵,絕不會(huì)出現(xiàn)“不對(duì)稱(chēng)”的數(shù)據(jù)偵。小新的理解是,這是Ixchariot的確認(rèn)和計(jì)數(shù)機(jī)制,Ixchariot通過(guò)統(tǒng)計(jì)一個(gè)預(yù)定長(zhǎng)度和格式的腳本文件無(wú)差錯(cuò)地從一臺(tái)服務(wù)器傳送到另一臺(tái)服務(wù)器的時(shí)間來(lái)計(jì)算出路由器的Throughput??赡芤舱?yàn)檫@種計(jì)數(shù)、確認(rèn)機(jī)制,使PC1發(fā)送出一個(gè)數(shù)據(jù)包后必須要等待一段時(shí)間,雖然這個(gè)時(shí)間很短,待得到 PC2的回應(yīng)后,才會(huì)再發(fā)出下一個(gè)數(shù)數(shù)包。此時(shí)路由器的包轉(zhuǎn)發(fā)性能并沒(méi)有得到全部利用。如果我們使用多Pairs,那這一問(wèn)題就可以忽略不計(jì)了,在多 Paris下,路由器的轉(zhuǎn)發(fā)性能會(huì)得到最大的利用。
好,說(shuō)了這么多,希望您還沒(méi)有感到厭煩。下面我們以兩臺(tái)寬帶路由器的測(cè)試結(jié)果來(lái)深入說(shuō)明一下如何認(rèn)識(shí)路由器的性能。兩臺(tái)路由器同屬一個(gè)品牌,一款面向SOHO家用市場(chǎng),價(jià)位在100左右,另一款面向小型企業(yè)市場(chǎng),價(jià)位在1000元左右。
在討論測(cè)試結(jié)果之前,小新還要說(shuō)一下Ixchariot這個(gè)測(cè)試工具,Ixchariot本身是有損耗的,使用Ixchariot測(cè)得的 Throughput結(jié)果是有效數(shù)據(jù)負(fù)載,不包括TCP協(xié)議損耗、幀間隔、應(yīng)答和Ixchariot本身系統(tǒng)損耗,此部分典型損耗根據(jù)理論計(jì)算約6M,就是說(shuō)即使你測(cè)試的是一臺(tái)能線速轉(zhuǎn)發(fā)的交換機(jī),測(cè)出來(lái)的Throughput也只可能是94M左右,這是理論極限值,不可能大于這個(gè)值,當(dāng)然這是對(duì)百兆交換機(jī)而言。但這個(gè)損耗也是占用了路由器性能的,所以我們需要在測(cè)得的Throughput結(jié)果上加6Mbps。
我們分別測(cè)試64B、128B、256B、512B、1024B、1514B大小數(shù)據(jù)偵的傳輸表現(xiàn),對(duì)于測(cè)試結(jié)果,只要加上Ixchariot的傳輸損耗(6Mbps)沒(méi)有超過(guò)100Mbps這個(gè)極限值,我們便認(rèn)為,傳輸瓶頸是來(lái)自于包轉(zhuǎn)發(fā)性能,而不是路由器的帶寬標(biāo)準(zhǔn)。我們需要的,也正是路由器在出現(xiàn)轉(zhuǎn)發(fā)瓶頸時(shí)的數(shù)值。
使用Ixchariot測(cè)得的是Mbps,需要將其轉(zhuǎn)換為pps,轉(zhuǎn)換的方法在上面已經(jīng)說(shuō)過(guò),(Mbps + 6Mbps) / 8 / (64B、128B、256B…1514B +20B) = Mpps * 1000000 = pps。
下面我們來(lái)解讀上圖的測(cè)試結(jié)果。紅色曲線描繪的是bps (右側(cè)Y軸),可以看到,隨著數(shù)據(jù)包從64B至1024B,bps一路飆升,但在第一個(gè)1514B處幾乎停止了增長(zhǎng),再看一下此時(shí)的bps值,是 91.212Mbps,再加上6Mbps的損耗,已經(jīng)接近100Mbps極限,顯然在傳輸1514B數(shù)據(jù)包時(shí),瓶頸來(lái)自于百兆路由器的帶寬標(biāo)準(zhǔn),而非是包轉(zhuǎn)發(fā)性能。將bps換算為pps后,如上圖中的黃色曲線,從64B至1024B的傳輸表現(xiàn)基本保持在一個(gè)量級(jí),但在第一個(gè)1514B處大幅下降。pps下降而bps卻有小量增加,這也說(shuō)明,100Mbps的帶寬標(biāo)準(zhǔn)成為了轉(zhuǎn)輸瓶頸。
最后一個(gè)Mbps值,小新測(cè)試的是1Pair 默認(rèn)High_Performance_Throughput腳本,使用這一腳本跑出的數(shù)據(jù)最為好看,93.523Mbps,如果再加上6Mbps的損耗,已經(jīng)非常接近100Mbps了。
在這里說(shuō)一下High_Performance_Throughput這個(gè)腳本。我們使用Wireshark抓包軟件,所捕獲的Ixchariot最大數(shù)據(jù)偵為1514B,所以在數(shù)據(jù)偵遞增測(cè)試中,我們最后使用的是1514B。前面已經(jīng)說(shuō)過(guò),PC1每向PC2發(fā)送一個(gè)數(shù)據(jù)包,PC2必須要向PC1返回一個(gè)數(shù)據(jù)包后,PC1才會(huì)繼續(xù)發(fā)送下一個(gè)包,這是Ixchariot的確認(rèn)機(jī)制。PC2之所以要返回一個(gè)確認(rèn)信息,應(yīng)該是通知Ixchariot,本次傳輸完畢,請(qǐng)記錄下傳輸時(shí)使用的帶寬。但這里會(huì)有一個(gè)問(wèn)題,傳輸一個(gè)1514B大小的數(shù)據(jù)包,不會(huì)用滿所有路由器的帶寬,就是還沒(méi)有用到100Mbps這個(gè)數(shù)據(jù)就傳輸完了,但High_Performance_Throughput腳本默認(rèn)卻不是這樣的。默認(rèn)情況下 High_Performance_Throughput是每傳完10MB數(shù)據(jù)才會(huì)計(jì)數(shù)一次,傳輸10MB數(shù)據(jù)是需要一定時(shí)間的,這樣也會(huì)用滿路由器的全部帶寬,所以我們看到1Pair時(shí),High_Performance_Throughput的測(cè)試結(jié)果是93.523Mbps。
從上面的分析中我們可以看到,bps高pps一定也就高嗎?其實(shí)不然,相反的pps是一個(gè)比較穩(wěn)定的值,在傳輸大包時(shí),反而還會(huì)受到寬帶標(biāo)準(zhǔn)的制約。
百元路由器的pps測(cè)試結(jié)果就比較奇怪了,吞吐值是正常的,雖然峰值也只達(dá)到了43.633Mbps,這是性能決定的,畢竟價(jià)格只有千元路由器的十分之一。但它的pps曲線就太不正常了,如果按照之前的理論,pps應(yīng)該是一個(gè)波動(dòng)不大的值,可為什么這里的跨度從9346到3146?
這一問(wèn)題可能出在Ixchariot的6Mbps損耗上。我們?cè)跍y(cè)試小包吞吐量時(shí),bps成績(jī)是很小的,如上圖中,百元路由器的測(cè)試成績(jī)只有 0.281Mbps,如果加上6Mbps,那結(jié)果將會(huì)與千元的0.907Mbps加上6Mbps變得十分接近,顯然這是不對(duì)的。小新覺(jué)得,對(duì)于 Ixchariot的測(cè)試成績(jī),我們應(yīng)該盡量“弱化” 損耗(6Mbps)的影響。
我們可以想一下,損耗是怎么產(chǎn)生的。每一個(gè)數(shù)據(jù)偵從 PC1至PC2都會(huì)附帶產(chǎn)生一定的損耗,但如果測(cè)試結(jié)果(Mbps)非常低,那,這個(gè)損耗值還會(huì)是6Mbps嗎?小新認(rèn)為應(yīng)該就不會(huì)了。但同時(shí),吞吐率隨著數(shù)據(jù)包的增大而增大,數(shù)據(jù)包的增大其實(shí)是有效數(shù)據(jù)增大所至,而損耗是一個(gè)固定的值。所以我們可以參照大包吞吐測(cè)試的結(jié)果來(lái)推算包轉(zhuǎn)發(fā)率(pps),只要吞吐測(cè)試的成績(jī)加上損耗沒(méi)有超過(guò) 100Mbps。這樣便可以盡量“弱化”Ixchariot損耗(6Mbps)的影響
從上圖的百元路由器測(cè)試結(jié)果來(lái)看,小新認(rèn)為,這款路由器的包轉(zhuǎn)發(fā)性能應(yīng)該在4000-3000pps之間。在這個(gè)測(cè)試中,不存在帶寬(100Mbps)瓶頸的問(wèn)題,因?yàn)橥掏铝孔罡咭仓皇鞘褂?Pair High_Performance_Throughput腳本測(cè)到的43.633Mbps。
總結(jié)及測(cè)試中的一些事:
最后,我們總結(jié)一下路由器標(biāo)稱(chēng)帶寬(吞吐量)、實(shí)際吞吐量(bps)和包轉(zhuǎn)發(fā)率(pps)之間的關(guān)系。我們常說(shuō)的百兆路由器、千兆路由器,這指的就是路由器的標(biāo)稱(chēng)吞吐量,對(duì)于百兆路由器來(lái)講,達(dá)到100Mbps吞吐量其實(shí)并不是什么難事,只要使用大數(shù)據(jù)包,像那臺(tái)千元路由器,我們?cè)跍y(cè)試中使用的 1Pair High_Performance_Throughput腳本測(cè)出的結(jié)果,成績(jī)是非常好看的。但僅憑此,就能說(shuō)明路由器的性能很好嗎?顯然不能。
從千元路由器的測(cè)試結(jié)果中我們可以看出,包轉(zhuǎn)發(fā)率(pps)達(dá)到8000左右,傳輸大數(shù)據(jù)包,吞吐量就能達(dá)到100Mbps了,但此時(shí),小數(shù)據(jù)包的轉(zhuǎn)發(fā)性能其實(shí)也只有10000左右。試想一臺(tái)包轉(zhuǎn)發(fā)率為20000的設(shè)備,與包轉(zhuǎn)發(fā)率為10000的設(shè)備在轉(zhuǎn)發(fā)大數(shù)據(jù)包上,表現(xiàn)會(huì)有什么不同嗎?似乎不會(huì)有任何不同,因?yàn)闃?biāo)稱(chēng)帶寬(吞吐量)就只有100Mbps,這是上限。但兩者的區(qū)別會(huì)反應(yīng)在轉(zhuǎn)發(fā)小包時(shí)的效率上,在沒(méi)有到達(dá)標(biāo)稱(chēng)帶寬(吞吐量)之前,pps為20000的設(shè)備將比pps為10000的要設(shè)備快上一倍,當(dāng)然,這樣的設(shè)備價(jià)錢(qián)也會(huì)更高。我們關(guān)注的核心應(yīng)該是包轉(zhuǎn)發(fā)率(pps),而不應(yīng)是吞吐量,因?yàn)榘D(zhuǎn)發(fā)率高了,吞吐量必然高,而吞吐量高,包轉(zhuǎn)發(fā)率卻不一定高。
在實(shí)際應(yīng)用中,包轉(zhuǎn)發(fā)能力十分關(guān)鍵,比如網(wǎng)吧里經(jīng)常玩游戲,每操作一個(gè)游戲指令,每扣動(dòng)一個(gè)扳機(jī),轉(zhuǎn)發(fā)的全部是小包,這種情下,不存在標(biāo)稱(chēng)帶寬(吞吐量)瓶頸的問(wèn)題,考驗(yàn)的僅是路由器的包轉(zhuǎn)發(fā)能力。如果路由器包轉(zhuǎn)發(fā)能力不強(qiáng),就很難應(yīng)付大量小包轉(zhuǎn)發(fā)的需求,對(duì)于一些時(shí)延敏感的應(yīng)用,例如在線游戲,玩起來(lái)就會(huì)很不順暢。
千元路由器的包轉(zhuǎn)發(fā)率達(dá)到了10000pps左右,雖然距理論最大值148800pps相去甚遠(yuǎn),但這一表現(xiàn)到底有多強(qiáng)或有多弱,我們?nèi)绾闻袛唷1容^這兩個(gè)數(shù)字,單從數(shù)量級(jí)來(lái)看,千元路由器的包轉(zhuǎn)發(fā)性能確實(shí)夠差的,僅為理論值的1/14左右。包轉(zhuǎn)發(fā)率越高越好,但在實(shí)際應(yīng)用中我們真的需要那么高的包轉(zhuǎn)發(fā)率嗎?對(duì)于這點(diǎn),小新也沒(méi)有一個(gè)判斷標(biāo)準(zhǔn),不過(guò)講一個(gè)在測(cè)試中發(fā)生的現(xiàn)象,也許從側(cè)面能看出一些問(wèn)題。
使用多Pairs跑 Ixchariot腳本,Ixchariot會(huì)是一個(gè)非常吃機(jī)器性能的軟件,我們所有的測(cè)試使用的都是100Pairs,這對(duì)發(fā)包PC是個(gè)不小的考驗(yàn),在本測(cè)試中也就是PC1,CPU為P8400,1G內(nèi)存,后來(lái)發(fā)現(xiàn),內(nèi)存有些小。我們?cè)跍y(cè)試百元路由器時(shí),PC1 的CPU和內(nèi)存占用都不高,可以輕松應(yīng)付測(cè)試。這應(yīng)該是因?yàn)槁酚善靼D(zhuǎn)發(fā)率低的原因,因?yàn)镻C1在發(fā)出一個(gè)包之后,需要收到來(lái)自PC2的確認(rèn),才能再發(fā)送第二個(gè)包,如果路由器包轉(zhuǎn)發(fā)率不高,那PC1發(fā)出的包就少,PC1跑這個(gè)測(cè)試就會(huì)非常輕松。
問(wèn)題出現(xiàn)在測(cè)試千元路由器時(shí)。在測(cè)試中,Ixchariot幾乎將PC1拖垮。不過(guò)測(cè)試還是可以順利進(jìn)行的,只是感覺(jué)PC1明顯非常繁忙,CPU和內(nèi)存占用都非常高,PF使用率達(dá)到了2G以上。千元路由的包轉(zhuǎn)發(fā)性能要高出百元產(chǎn)品不少,“等待”少了,包發(fā)得多了,PC1也就受不了了。為了驗(yàn)證這點(diǎn),小新最后將PC1與PC2直接使用網(wǎng)線相連,跑同樣的測(cè)試,這下PC1徹底被托垮了,整個(gè)電腦無(wú)法操作,不一會(huì)居然出現(xiàn)了WINDOWS 98時(shí)代的經(jīng)典藍(lán)屏,反復(fù)測(cè)試,次次藍(lán)屏。這應(yīng)該說(shuō)明PC1發(fā)揮了性能的極限,然后“陣亡”了,而在測(cè)試千元路由器時(shí),PC1也是已經(jīng)非常接近極限了。
回到剛才所說(shuō)的問(wèn)題,10000pps幾乎拖垮了Intel P8400,在實(shí)際應(yīng)用中,路由器有機(jī)會(huì)承受這個(gè)量級(jí)的數(shù)據(jù)量嗎?這個(gè)問(wèn)題,小新無(wú)法回答,各位看官有什么看法,歡迎討論。 另外,對(duì)于文中的一些錯(cuò)誤之處,還望您指出,共同探討,共同學(xué)習(xí)。
聯(lián)系客服