日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elastic Sketch: Adaptive and Fast Network-wide Measurements

發布時間:2023/12/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elastic Sketch: Adaptive and Fast Network-wide Measurements 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《彈性sketch:一種自適應快速網絡測量方案》

sketch:可用于網絡測量的數據流算法

楊仝為第一作者,其他作者包括信息學院一名碩士研究生和三名本科生、李曉明教授,以及中國科學院先輩計算機體系研究中間黃群副研究員、南加州大學博士研究生繆睿和倫敦大學瑪麗女王學院Steve Uhlig教授。

楊仝等人旨在使用一種通用的概率算法解決復雜網絡環境下多種網絡測量題目,首次提出彈性網絡測量的研究方向和一種概率數據結構(即彈性sketch),可根據現有網絡帶寬、CPU(中間處理器)資源等,自適應地調整測量算法的速度、測量算法占用的CPU和網絡資源,從而最小化網絡測量義務對營業的影響。他們將彈性sketch實如今CPU單核、CPU多核、GPU(圖形處理器)、FPGA(現場可編程門陣列)、OVS(開放假造交換標準)以及P4Switch六個平臺上。與傳統算法不同,文中所提出的算法具有通用性,即用一種數據結構同時完成六種流量測量義務;與此同時,較現有的專用算法精度更高、速度更快。

作為網絡與通訊領域頂級會議和風向標,ACM SIGCOMM收錄的論文對學術界和工業界均具有向導性的影響,每年錄用的論文一樣平常少于40篇。此前,大陸高校和研究機構作為第一作者單位所發表的文章不超過10篇。

當網絡遇到擁塞、掃描攻擊、DDOS攻擊時,網絡測量就很重要。在這種情況下,包括可用帶寬、包速率和流量大小分布在內的流量特性變化很大,顯著降低了測量性能,因此提出了彈性草圖。它適應當前的流量特征。此外,它對測量任務和平臺是通用的。我們在P4、FPGA、GPU、CPU、多核CPU和OVS六個平臺上實現了彈性草圖,來處理六個典型的測量任務。實驗結果和理論分析表明,彈性示意圖能很好地適應流量特性。與最新技術相比,彈性草圖的速度提高了44.6-45.2倍,2.0-273.7較小誤差率。

背景

網絡測量為網絡運營、服務質量、容量規劃、網絡會計和計費、擁塞控制、數據中心和主干網中的異常檢測提供了不可或缺的信息。相對于采樣方法,由于高精度和速度,基于sketch的方法在網絡測量中被廣泛應用。

現有的測量解決方案主要集中在精度、速度和內存使用之間的權衡。最先進的大學還注重:一般性,即使用一個sketch來處理許多任務,并在這四個維度之間進行了良好的權衡。盡管現有工作有很大改進,但它們并沒有集中于一個基本需求:無論流量特性(包括可用帶寬、流量大小分布和包速率)如何變化,都能實現準確的網絡測量。當網絡出現問題時,測量尤其重要。

第一個流量特性是可用帶寬。在數據中心,管理員更關心整個網絡的狀態,而不是單個鏈路或節點,即全網測量。在數據中心,管理員可以部署許多測量節點,這些節點定期向收集器發送sketches。測量需要可用帶寬,這些帶寬與用戶流量共享相同的數據平面。在數據中心,經常網絡擁塞,它可以在一秒鐘內頻繁發生,并且可以達到網絡帶寬的一半以上。在這種情況下,測量對于擁塞控制和故障排除尤為重要。不能等到可用帶寬充足時才報告sketch,因為網絡問題應及時解決;另一方面,網絡測量不應妨礙網絡。一個好的解決方案是以較小的精度損失主動壓縮sketch從而減少帶寬使用。這在文獻中還沒有出現過。除了擁塞時的被動壓縮外,網絡運營商還需要主動控制測量任務。例如,為了在維護或故障期間保持服務層協議(SLA),運營商傾向于減少測度,為關鍵的用戶流量保留帶寬。

第二個特征是包到達率,它是變化的,有時變化劇烈。例如,提出了一些路由協議或機制來調整包發送速率以優化網絡性能。此外,當網絡受到攻擊(例如,網絡掃描或DDOS攻擊)時,數據包往往較小。在這種情況下,包到達率非常高,即使可用帶寬很重要。軟件平臺處理Sketches的速度根據包速率而定。因此,當數據包速率突然變得更高時,它不能很好地工作,很可能無法記錄重要的信息,例如攻擊者的IP地址。因此,在這種情況下,需要通過主動丟棄不重要的信息來加快處理速度。

第三個特征是流大小分布。眾所周知,大多數流都較小,被稱為鼠標流,而很少的流是大的,被稱為大象流。一個優雅的解決方案是準確地將大象流和鼠流分開,并使用不同的數據結構來存儲它們。但是流的大小分布不同。有人可能認為我們可以預先預測流量traffic并為sketch分配適當大小的內存。在一小時內預測大象的流量可能很容易,但在秒或毫秒的時間尺度上卻很難預測。因此,我們需要設計一個彈性(elastic)數據結構來動態地為象流分配適當的內存大小。

總結:sketch是可以改變的:要與帶寬、包到達率和流大小分布相適應。除此之外,測量還有三個其他要求:1)通用、2)快速和3)準確。首先,每個測量節點通常要執行多個任務。如果我們為每個任務構建一個數據結構,處理每個通信包需要更新所有的數據結構,這會占用時間和空間。因此,所有任務都需要一個通用的數據結構。第二個。為了快速,每個包的處理時間應該是小而恒定的。第三,準確意味著在使用給定的內存量時,錯誤率應該足夠小。在所有現有的解決方案中,沒有一個解決方案是彈性的,只有兩個已知的解決方案聲稱是通用的:UnivMon和FlowRadar。然而,我們在第7節中的實驗結果表明,UnivMon實際上并不精確,而FlowRadar則不具有有效記憶。

解決方法:

在本文中,我們提出一個新的sketch。也就是彈性sketch。它由兩部分組成:一重一輕。我們提出了一種分離技術,叫做“排斥法”,使大象流在重的部分,而鼠流在輕的部分。

為了使它“有彈性”,我們做以下的工作。1)為了適應帶寬,我們提出了壓縮和合并sketch的算法。首先,將sketch壓縮到適應當前可用帶寬的大小。然后,使用服務器來合并sketch,以減少帶寬使用。2)當包到達率較高時,更改處理方法:每個包只訪問重部分來記錄大象流的信息,丟棄鼠流的信息。這樣,我們可以以合理的精度下降為代價,獲得更快的處理速度。3)由于大象流的數量不同且未知,我們提出了一種動態增加重部分內存大小的算法。

為了使我們的解決方案“通用化”,我們執行以下操作。1)為了通用各種測量任務,保留每個包的必要信息,丟棄鼠流的ID,這是基于觀察到鼠流的ID消耗內存,但實際上是無用的。2)為了在平臺上通用,我們提出了彈性sketch的軟件和硬件版本,以使我們的sketch易于在軟件和硬件平臺上實現。考慮到這個平臺的流行,做了一個P4版本的彈性sketch。

由于分離和丟棄了不必要的信息,我們的sketch是準確和快速的:實驗結果表明,sketch比最先進的:UnivMon速度快446 45.2倍,誤差率小2.0~273.7。

主要內容

我們提出了一個新的網絡測量的sketch,即彈性sketch。與以往的工作不同,著重點在于sketch對帶寬、包速率和流大小分布的適應能力。具有通用性,快速性和準確性。我們提出了兩個關鍵技術,一個是分離鼠流和大象流,另一個是壓縮sketch

在P4、FPGA、GPU、CPU、多核CPU和OVS六個平臺上實現了sketch,來處理六種典型的測量任務。

實驗結果表明,sketch在所有平臺,六項任務中的每一項都顯著優于最先進的平臺。

背景和相關工作

在本節中,我們首先討論自適應測量的挑戰。第二,我們展示了如何實現通用性,最后,我們從文獻中介紹了最著名的網絡測量系統。

2.1適應性測量的挑戰

如上所述。當網絡不能很好地工作時,網絡測量尤為重要。在這種情況下,流通特性變化很大,給測量帶來了很大的挑戰

首先,根據可用帶寬以適當的大小發送測量數據是很困難的。當可用帶寬很小時,發送一個大的sketch將導致長的延遲,并影響用戶流量。所有現有的解決方案都會在開始測量之前調整內存大小。問題是如何使sketch大小小于可用帶寬,特別是當網絡不能正常工作時。一個簡單的解決方案是為相同的網絡流通構建不同大小的sketch,例如,可以構建兩個內存大小為m和m/2的sketch s1、s2,當可用帶寬很小時,在發送s2到收集器。一個更好的解決方案是只構建S1,然后快速地將其壓縮成一半。壓縮后的s1與s2達到相同的精度并不困難。然而,壓縮后的s1要比s2實現更高的精度是很有挑戰性的,也是本文的實際目標。

第二,使處理速度適應包速率是一個挑戰,在擁塞或攻擊期間,包速率可能會發生劇烈變化。現有的sketch通常具有恒定的處理速度,但處理一個數據包需要幾個甚至10個以上的內存訪問。設計目標是在包速率低的情況下對每個包進行2次內存訪問,在包速率高的情況下進行1次內存訪問。然而,當只使用一個內存訪問時,要保持高精度是很困難的。

第三,在真實的網絡流通中。流量大小分布是傾斜的、可變的。”歪斜意味著大多數流是鼠流,而少數流是大象流。為了實現內存效率,可以設法將大象流與鼠流分開。由于大象流通常比鼠流更重要,因此需要為大象流分配適當的內存大小。不幸的是,大象流的數量不能預知,很難預測,因此,動態地為大象流分配更多的內存是一個挑戰。

2.2通用測量方法

我們主要關注以下網絡測量任務,這些任務已經被廣泛研究過

流大小估計:為任何流ID估計流大小。流ID可以是5元組的任意組合,例如源IP地址和源端口,或者僅是協議。在本文中,將一個流的包數作為流的大小。這也可用于估計每個流的字節數:假設最小數據包為64字節,假設到來的數據包為120字節,我們將其視為2個數據包。

重擊檢測:報告大小大于預定義閾值的流。

重大變化檢測:報告兩個相鄰時間窗內流大小增加或減少超過預定閾值的流,以檢測異常流通。

流量大小分布估計:估計流大小分布。

熵估計:估計流大小的熵。

基數估計:估計流的數目。

通用性的解決方法是使用一種數據結構來支持所有這些測量任務。如果已經記錄了所有流的ID和大小,就可以處理這些任務。但是記錄所有流ID是困難的,需要高的內存使用。我們觀察到鼠流的流ID對于這些任務是不需要的。由于大多數流都是鼠標流,因此丟棄鼠標流的ID可以顯著節省內存和傳輸帶寬。為此,我們需要將大象流和老鼠流分開。為了解決這一問題,我們利用排斥的方法,提出了一種快速、精確的分離算法。最后,我們的sketch具有通用性和節省內存。

通用性的另一個含義是該算法可以在各種平臺上實現。對于小公司來說,流量速度可能不高,在CPU上測量是一個不錯的選擇。對于大公司來說,通信速度可能非常高,應使用硬件平臺進行測量,以趕上高速。因此,測量解決方案應該是通用的,可以在不同的平臺上進行良好的性能權衡。

2.3網絡測量系統

到目前為止,著名的測量系統包括UnivMon、Trumpet、openSketch、FlowRadar、SketchVisor、Marple、Pingmesh和Dream,其中,FlowRadar和UnivMon是通用的,因此是本文最相關的工作。

FlowRadar在Bloom過濾器和可逆Bloom查找表中記錄所有流的ID和大小。為了減少內存的使用,作者提出了一種優雅的全網譯碼解決方案。但與sketch相比,它的內存使用率要高得多。

UnivMon建立在關鍵方法universal streaming上,保證了精度。UnivMon是第一個具有通用性的工作成果,具備良好性能。然而,它沒有解決可變流量特性的問題。sketch是第一個依賴于單一數據結構的工作成果,它能夠適應帶寬、包速率和流量大小分布。

3彈性sketches

3.1 基礎版本

基本原理:需要將大象流與鼠流分離。我們將分離簡化為以下問題:給定一個高速網絡流,怎樣只使用一個桶來選擇最大的流?由于內存太小,不可能得到準確的結果,因此我們的目標是達到高精度。我們的技術在方法上類似于排斥。具體來說,每個bucket存儲三個字段:流ID、正投票數和負投票數。給定一個流ID是f1的傳入包,如果它與桶中的流相同,我們增加正投票。否則,我們會增加負票,如果負投票數正投票數≥λ,λ是預定義的閾值,取出bucket的流,放入f1.

3.1.1數據結構和方法

數據結構:如圖1所示,數據結構由兩部分組成:一部分是重的部分記錄象流,另一個是“輕的”部分記錄鼠流。重部分Η是Η與哈希函數h關聯的哈希表。重部分的每個桶記錄流的信息:流ID(鍵)、正投票數(vote+)、負投票數(vote-)和標志。vote+記錄屬于此流的數據包數(流大小)。vote-記錄其他數據包的數量。標志表明輕部分是否可能包含此流的正投票。

輕部分是一個CM sketch,一個CM sketch由d個數組組成(A1,A2,…Ad,)。每個數組與一個哈希函數相關聯,由w個計數器組成。給定一個傳入包,CM sketch提取流ID,計算d個哈希函數以定位每個數組中的計數器,并將d個計數器(d哈希計數器)增加1。查詢類似于插入:在獲得了d哈希計數器之后,發送最小值。

插入:給定一個流ID是f的傳入包,將其哈希到bucket Η[h(f)%B],其中b是重部分中的bucket數。假設桶存儲了(f1,vote+,,vote-,flag1),類似于排斥,如果f匹配f1,增加vote+,否則,我們增加vote-,然后根據兩個投票決定是否驅逐f1。有以下四種情況:

情況1:桶是空的。插入(f,1,F,0),其中F表示桶中沒有發生驅逐。插入結束。

情況2:f= f1,將vote+增加1

情況3:f ≠ f1且在vote-加1后vote-vote+<λ,在CM sketch中插入(f,1):哈希計數器加1

情況4:f ≠ f1且在vote-加1后vote-vote+≥λ

通過將bucket設置為(f,1,T,1)來取出流f,并將流f1取出到CM sketch:將映射的計數器增加vote+。此時,標志設置為T(true),因為在選擇f之前,流f的一些投票可以插入到輕部分中。

查詢:對于不在重部分中的流,輕部分(CM sketch)發送流大小。對于重部分中的任何流f,有兩種情況:1)f的標志為假。其大小為相應的vote+;2)f的標志為真。添加相應的vote+和CM sketch的查詢結果

3.1.2精度分析

彈性sketch中流的估計值有以下誤差范圍,報告中提供了詳細的證明。

定理3.1:讓向量f=(f1,f2,…,fn)表示流的大小向量,其中fi表示第i個流的大小。給定兩個參數?和δ,讓w=e?(e是歐拉數)和d=ln1δ。讓彈性的d(d是計數器數組的數目)和w(w是每個數組中計數器的數目)記錄f流。流i的彈性報告大小fi以

fi≤fi+?fl<fi+?f

為界,概率至少為1-δ,其中fl表示輕部分記錄的子流的大小向量。

根據定理3.1、彈性的估計誤差以fl為界,而不是Count-Min的f。事實上,流的大部分包都記錄在重的部分,fl通常明顯小于f。因此,當參數(d和w)相同時,彈性比Count-Min有更小的誤差范圍。

由于象流和鼠流的分離,大多數情況下彈性的精度都很高。1)重部分無誤差:對于標志為假的流,記錄的vote+是無誤差的流大小;對于標記為“真”的流,記錄的vote+是流大小的一部分,仍然沒有誤差,而另一部分有誤差的記錄在輕部分中。2)在輕的部分,不記錄流ID,只記錄鼠流的大小,因此可以使用許多小的計數器(如8位計數器),而傳統的sketch使用一些大的計數器(32位計數器)來容納大象流。因此,輕部分可以非常精確。總之,象流和鼠流的精度都很高。

在最壞的情況下—象流碰撞,彈性精度會下降:當兩個或多個象流被映射到同一個桶中時,一些象流會被驅逐到輕的部分,可能使一些鼠流大大超出估計。

大象碰撞率:定義為由多個象流映射的桶數除以桶總數。事實證明,映射到每個桶的象流數量遵循二項分布。下面是大象碰撞率Phc的公式:

Phc=1-Hw+1e-Hw

其中H是象流的數量,w是桶的數量。當Hw=0.1或0.01時,大象碰撞率分別為0.0046和0.00005。

大象碰撞的解決方案:顯然,降低哈希碰撞率可以降低大象碰撞率,因此,我們使用兩種經典方法:1)使用多個子表;2)在一個桶中使用多個鍵值對。

3.2 可用帶寬的自適應性

為了適應可用帶寬,要在發送sketch之前對其壓縮。大多數流是鼠流,因此輕部分的內存大小通常比重部分大得多。在本節中,將展示如何壓縮和合并輕部分-CM sketch,之前也未有人做過壓縮sketch。

3.2.1 sketch的壓縮

為了壓縮一個sketch,關鍵思想是首先將計數器分組,然后將同一組中的計數器合并到一個計數器中。

分組:如圖2所示,給定一個大小為zw'*d的sketch A(寬度w=zw’,深度d,z是表示壓縮率的整數)。分組方法如下:1)將A z等分。每個分區的大小是w’* d 。2)構建一個w’*d大小的sketch B。3)分區中具有相同索引的計數器(Aik[j]k=1, …,z)在同一組中,因此可以設置Bij=OPk=1zAik[j](1≤i≤d,1≤j≤z),其中op是合并運算器(例如max或sum)。為了查詢sketch B,只需要將哈希函數hi(.)%w更改為hi(.)%w%w’,引理如下。

引理3.2:給定一個任意整數i,兩個整數w和w',如果w可被w’整除,則(i%w)%w’=i%w’。

合并:我們提出兩種合并方法。第一種方法是對每組中的計數器進行匯總,Bij=k=1zAik[j]。將此方法命名為和壓縮(SC),如第2節所述,為了適應可用帶寬,可以構建兩個內存大小為m和m/2的CM sketches s1和s2。更好的解決方案是將s1壓縮到一半。使用SC,壓縮后的s1與s2具有相同的精度,且SC不使用s1記錄的信息。第二種方法是最大壓縮(MC)。使用“最大值”而不是“求和”,

Bij=maxAi1j,Ai2j,Ai3j,,,Aiz[j]。

與SC相比,MC中的求和運算使用了S1中很多的信息,因而具有更好的精度。

最大壓縮誤差范圍(MC):給出一個大小為d*zw的CM sketch,用MC把它壓縮成d *w的大小。給定一個任意小的正數?和一個任意流fj;,最大壓縮后sketch的絕對誤差是有以下范圍:

其中nj是fj的實際大小,nj是fj的估計大小,N是數據包的總數。

關于SC和MC,有以下結論:1)在和壓縮后,CM sketch的誤差范圍不變,而在最大壓縮后,誤差范圍更緊。2)MC使壓縮后的CM sketch有過估計誤差,但沒有欠估計誤差。3)壓縮速度快,實驗結果表明,使用單指令多數據SIMD后壓縮速度加快了5到8倍。4)不需要解壓。5)壓縮不需要額外的數據結構。

3.2.2 sketch的合并

圖3:網絡范圍的測量。當網絡很大時,服務器可以用來合并sketches

如圖3所示,可使用服務器來節省帶寬。每個服務器收到許多來自測量節點sketches,然后合并,將它們發送到收集器。為了合并,需要對所有sketch使用相同的哈希函數。如果sketch有共同的流ID,使用一個簡單的方法---和合并;否則,使用一個新的方法,命名為最大合并。

和合并:給定兩個相同大小d* w的CM sketch,和合并算法只需通過添加每兩個相應的計數器來添加兩個CM sketch。該算法簡單快速,但不精確。

相同大小sketch的最大合并:算法命名為Maximum Merging(MM)。 如圖4所示,給定兩個大小為w*d的sketch A和B,再構建了一個大小為w * d的新sketch C。簡單地設置Ci[j] =max {Ai[j],Bi[j]}(1≤i≤d,1≤j≤w)。 例如,在圖4中,C1[2] = max{A1[2],B1[2]}= max{3,4}= 4。這種合并方法可以很容易擴展到多個sketch。 顯然,在MM合并后,sketch仍然沒有低估計誤差。還可以合并兩個不同寬度的sketch。

3.3對包速率的適應性

在測量節點中,通常有一個輸入隊列來緩沖傳入的數據包。包速率(即每秒傳入的包數)是可變的:在大多時候很低,但在最壞的情況下,非常高。當數據包速率較高時,輸入隊列將很快被填滿,很難記錄所有數據包的信息。為了解決這個問題,最先進的解決方案SketchVisor利用了一個專用的組件,即快速路徑,以高包速率吸收過多的流量。但是,在最壞的情況下,它需要遍歷整個數據結構,盡管有一個攤銷的O(1)更新復雜性。這會產生大量的內存訪問并降低性能。相反,我們提出的方法通常只需要一次內存訪問。

我們提出了一種新策略,以在需要時提高插入速度。當輸入隊列中的包數量大于預定義的閾值時,讓傳入的數據包只訪問重部分,以便只記錄象流的信息并丟棄鼠流。重部分的插入過程幾乎不變,除了下列情況:如果桶中的一個流f被另一個流f’替換,f’的流大小被設定為f的流大小。因此,每次插入需要在重部分中一個桶的指針。當數據包速率下降時,再使用以前的算法。

該策略以稍微降低精度為代價來提高速度。當激活此策略時,不會丟棄輕部分,只是在插入時不更新,仍將在查詢使用。這意味著只有在高數據包速率發生時,輕部分記錄的信息才會丟失。在大多數情況下,這種策略對查詢的準確性沒有太大的影響,因為包速率通常很低。

3.4對流大小分布的適應性

流大小分布的一個關鍵指標是象流的數量。有時它的變化很大,很難確定重部分的大小。為了解決這個問題,我們需要使重的部分適應流量分布的變化。我們提出了一種動態加倍重部分的技術。工作原理如下。最初,為重部分分配一個小的內存。隨著插入越來越多的象流,重部分會滿。定義了一個閾值T1。如果一個傳入的包被映射到一個所有流都大于T2的桶中,就認為該桶已滿。如果滿桶的數量超過了一個閾值,那么重部分是滿的。當重部分滿時,進行以下復制操作:

只復制重部分,并將重部分與副本合并為一個。哈希函數從h(.)%w變為h(.)%(2w)更改。這個復制操作可由引理3.2證明。復制操作后,應移除桶中一半的流。刪除操作可以逐步執行。對于每次插入,可以檢查映射桶中的所有流,平均有一半流沒有映射到桶并且可以被刪除。即使某些bucket最終可能沒有被清除,這不會對算法產生負面影響。

示例:如圖5所示,我們演示了如何在復制后插入流為f2的傳入數據包。計算h(f2)%8并得到映射的桶,其中流f3是。計算h(f3)%8=6,發現它應該被映射到復制部分的bucket。因此,我們用f3代替f2。

圖5:彈性重部分的復制。重部分原桶數是4,復制后變為8。

開銷:由于重的部分通常很小(例如150KB),復制150KB數組的時間開銷通常很小,可以忽略不計。

除了使重部分變大,還可以壓縮重的部分。壓縮方法與最大壓縮類似(MC,第3.2.1節)。與MC不同的是,在重部分,合并buckets(key,vote+,flag,vote-)而不是抵消。以合并兩個桶為例:給定兩個桶,對于桶中的兩個鍵,在彈性sketch中查詢它們的頻率,保留較大的一個,將另一個放入輕部分中。壓縮操作賦予彈性sketch在需要時主動釋放內存的能力。

4優化

4.1優化輕部分

使用d=1的CM sketch:對于CM sketch,關鍵點是深度d,即數組的數量。實際上,如果使用d=3或4,可以獲得更高的精度。但設置d=1有以下兩個原因:1)我們更關心實現的可行性和速度,而不是準確性;2)sketch的精度已經很高。

4.2彈性草圖的硬件版本

如上所述,大象碰撞的第一個經典解決方案是在重部分使用幾個子表。每個子表與基本版本的重部分完全相同,但與不同的哈希函數關聯。大象碰撞率隨子表的數量線性增加呈指數遞減。由于每個子表具有相同的操作,因此此版本適用于硬件平臺。

示例:插入和查詢操作與基本版本略有不同,這里我們使用例子來顯示圖6中的差異。1)為在第一個子表中插入f8,vote-將增加1,f8將插入下一個子表。2)為了在第一個子表中插入f9,將取出流大小為7的f4,并插入下一階段。在第二個子表中,f4被映射到bucket。在這種情況下,只需將值從2增加到9。3)查詢一個流,因為它可能出現在多個重的部分中,需要添加所有的值。

實驗結果表明,使用4個子表是在某些硬件實現(如p4switch)的可行性和準確性之間的一個很好的權衡。

4.3彈性sketch的軟件版本

如上所述。大象碰撞的第二個經典解決方案是:讓重部分中的每個桶存儲多個流。這允許在一個桶中記錄多個大象流,因此大象碰撞率顯著下降。這樣,桶的大小就大于一個機器字,從而使重包的訪問成為瓶頸。幸運的是,這個過程可以通過在CPU平臺上使用SIMD來加速,因此這個版本適合于軟件平臺。與基本版本的區別在于:1)每個bucket中的所有流共享一個vote-字段;2)將映射bucket中最小的流逐出。

示例:我們使用圖7中的兩個例子來顯示此軟件版本和基本版本之間的差異。1)給定流f8的傳入數據包,首先將其哈希到一個桶中。桶滿了,沒有流f8。將vote-從10增加到11。最小流是大小為11的f6。因為11≤11*λ=11*8,不移除流f6,而是將f8插入輕部。2)給定一個流f9的傳入包,首先將其哈希到一個bucket中,bucket是滿的,沒有f9。將vote-從55增加到56,因為56≥7*λ=7*8,將流f4取出到輕部分。取出后,將hashed bucket設置為(f9,1,T),并將vote-設置為0。

總結

以上是生活随笔為你收集整理的Elastic Sketch: Adaptive and Fast Network-wide Measurements的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。