CPU過載控制OLC(Overload Control)是一種CPU過載調控機制。當CPU過載時(shí),OLC能(néng)夠對(duì)受監控協議(yì)報(bào)文(wén)和(hé)任務進行調控,通過不同優先級業務的合理(lǐ)規劃和(hé)限制報(bào)文(wén)通過等方式,降低(dī)對(duì)CPU資源的消耗,并确保設備不會(huì)因爲某種受監控協議(yì)或任務沖擊CPU導緻的CPU過載而影響對(duì)其他(tā)業務的正常處理(lǐ)。
由于現(xiàn)網組網的複雜(zá)性,上(shàng)送CPU的業務量過大(dà)或發生非法業務惡意沖擊CPU等問題,都可能(néng)會(huì)導緻CPU過載。CPU過載會(huì)造成設備性能(néng)下(xià)降和(hé)業務處理(lǐ)異常等問題。
OLC采用(yòng)多級漏桶算(suàn)法,通過令牌桶和(hé)多級漏桶的方式對(duì)上(shàng)送CPU處理(lǐ)的受監控協議(yì)報(bào)文(wén)和(hé)任務進行調控,能(néng)夠解決如下(xià)問題:
-
避免CPU資源被長時(shí)間過度消耗,保證設備資源的可用(yòng)性。
-
避免設備受到(dào)非法業務的惡意攻擊,保證設備的安全性。
-
避免某種業務沖擊影響對(duì)其他(tā)業務的正常處理(lǐ),保證業務處理(lǐ)的公平性。
使能(néng)OLC功能(néng)後,設備在CPU過載時(shí)能(néng)夠及時(shí)對(duì)受監控協議(yì)和(hé)任務進行調控。用(yòng)戶還可以選擇使能(néng)指定受監控協議(yì)或任務的OLC功能(néng)。同時(shí),還可以使能(néng)OLC告警功能(néng),當CPU占用(yòng)率達到(dào)OLC啓動門(mén)限阈值或低(dī)于OLC恢複門(mén)限阈值時(shí)發出告警。
讓我們看(kàn)個例子。如下(xià)圖所示,位于不同網段的用(yòng)戶通過Switch接入Internet。由于接入了(le)大(dà)量用(yòng)戶,Switch的CPU會(huì)處理(lǐ)大(dà)量的協議(yì)報(bào)文(wén)和(hé)任務。其中,用(yòng)戶發現(xiàn)Switch經常收到(dào)大(dà)量的ARP Request、ARP Reply和(hé)ARP Miss協議(yì)報(bào)文(wén),并經常處理(lǐ)ARP廣播任務,常因此導緻CPU占用(yòng)率大(dà)幅升高(gāo),造成業務處理(lǐ)異常。用(yòng)戶希望設備能(néng)夠在CPU占用(yòng)率超過一定阈值時(shí)發出告警并對(duì)以上(shàng)協議(yì)報(bào)文(wén)和(hé)任務進行調控,使得CPU負載時(shí)不會(huì)因爲以上(shàng)協議(yì)和(hé)任務的沖擊而影響其他(tā)業務的正常處理(lǐ),同時(shí)希望能(néng)夠降低(dī)CPU的占用(yòng)率,使其維持在一個穩定水(shuǐ)平。
此時(shí),用(yòng)戶可以按照如下(xià)思路在Switch上(shàng)進行配置:
-
使能(néng)OLC功能(néng)。
-
使能(néng)ARP Request、ARP Reply和(hé)ARP Miss協議(yì)報(bào)文(wén)的OLC功能(néng)。
-
使能(néng)OLC告警功能(néng)。
-
設置OLC啓動門(mén)限阈值。
配置OLC示例組網圖
OLC采用(yòng)多級漏桶算(suàn)法實現(xiàn)對(duì)受監控協議(yì)報(bào)文(wén)和(hé)任務的調控,其中令牌桶決定其是否允許通過,多級漏桶則決定其通過的速率,通過後的報(bào)文(wén)才能(néng)被上(shàng)送到(dào)CPU。
OLC和(hé)CPU占用(yòng)率相關聯,當CPU占用(yòng)率達到(dào)OLC啓動門(mén)限阈值時(shí),OLC功能(néng)啓動。
1.令牌桶
令牌桶用(yòng)于存放(fàng)令牌,可存放(fàng)的令牌總數相當于CPU占用(yòng)率100%時(shí)的報(bào)文(wén)處理(lǐ)能(néng)力。當報(bào)文(wén)進入漏桶時(shí),必須獲得一個令牌才允許通過。令牌桶令牌數的恢複周期爲1秒,系統每秒爲令牌桶分配一定的令牌數,OLC根據CPU占用(yòng)率變化自(zì)動調整給令牌桶分配的令牌數以控制報(bào)文(wén)通過的數量。當CPU占用(yòng)率超過一定阈值後,系統會(huì)減少分配的令牌數。當令牌桶的令牌用(yòng)完之後,進入漏桶的報(bào)文(wén)将申請(qǐng)不到(dào)令牌,則無法被上(shàng)送到(dào)CPU,從(cóng)而減少CPU的負荷。
2.多級漏桶
漏桶相當于一個計(jì)數器,每當報(bào)文(wén)進入漏桶時(shí),首先向令牌桶申請(qǐng)令牌,令牌申請(qǐng)成功後,漏桶計(jì)數值加1,該計(jì)數值累計(jì)達到(dào)設定的阈值時(shí),後續到(dào)達的報(bào)文(wén)可能(néng)會(huì)被丢棄。報(bào)文(wén)通過後,漏桶計(jì)數值減1,該數值按照一定的漏出速率減少,漏桶據此控制報(bào)文(wén)按照一定的速率通過。
OLC采用(yòng)的多級漏桶包括頂級漏桶、中間漏桶和(hé)底層漏桶,由頂級漏桶對(duì)整個系統的漏桶進行控制。中間漏桶分爲任務中間漏桶和(hé)協議(yì)中間漏桶,不同受監控協議(yì)和(hé)任務關聯不同的底層漏桶。OLC根據不同業務的優先級,給各個漏桶賦予了(le)不同的權重值,并按照權重值給各漏桶分配資源(可申請(qǐng)的令牌數),保證了(le)不同業務之間的公平性。
多級漏桶基本原理(lǐ)如下(xià)圖所示。頂級漏桶相當于CPU占用(yòng)率100%時(shí)的處理(lǐ)能(néng)力,當CPU占用(yòng)率達到(dào)OLC啓動門(mén)限阈值時(shí)OLC才能(néng)啓動調控。各受監控協議(yì)和(hé)任務上(shàng)送CPU前,分别進入對(duì)應的底層漏桶,逐級向上(shàng)向令牌桶申請(qǐng)令牌,令牌申請(qǐng)成功後才被允許通過。同時(shí),多級漏桶通過調整漏出速率控制報(bào)文(wén)通過的速率。
多級漏桶基本原理(lǐ)
多級漏桶的控制參數
-
漏出速率(a):該參數數值與系統每秒爲令牌桶分配的令牌數相同,表示每秒處理(lǐ)的報(bào)文(wén)數量。
-
頂級漏桶容量(N):該參數默認值相當于CPU占用(yòng)率100%時(shí)的報(bào)文(wén)處理(lǐ)能(néng)力。
-
CPU一級門(mén)限阈值(T1):該參數默認值爲95%,表示CPU占用(yòng)率爲95%。當CPU占用(yòng)率達到(dào)該門(mén)限阈值時(shí),開(kāi)始調低(dī)漏出速率。
-
CPU二級門(mén)限阈值(T2):該參數默認值爲98%,表示CPU占用(yòng)率爲98%。當CPU占用(yòng)率達到(dào)該門(mén)限阈值時(shí),加倍調低(dī)漏出速率。
-
OLC啓動門(mén)限阈值(T3):該參數與CPU一級門(mén)限阈值相同。當CPU占用(yòng)率達到(dào)OLC啓動門(mén)限阈值時(shí),啓動OLC啓動門(mén)限定時(shí)器(10秒),在該定時(shí)器超時(shí)前,如果CPU占用(yòng)率沒有低(dī)于OLC啓動門(mén)限阈值,啓動OLC功能(néng)。
-
OLC恢複門(mén)限阈值(T4):該參數默認值爲75%,表示CPU占用(yòng)率爲75%,該數值等于CPU一級門(mén)限阈值減去20%。當CPU占用(yòng)率低(dī)于OLC恢複門(mén)限阈值時(shí),啓動OLC恢複門(mén)限定時(shí)器(20秒),在該定時(shí)器超時(shí)前,如果CPU不再次達到(dào)OLC啓動門(mén)限阈值,則停止OLC功能(néng)。
-
調整因子(S):該參數用(yòng)于設置漏出速率的調整速度,調整因子越小(xiǎo),調整速度越快(kuài),調整因子越大(dà),調整速度越慢。調整因子過小(xiǎo)可以讓漏出速率能(néng)夠根據業務變化得到(dào)快(kuài)速調整,但(dàn)是可能(néng)會(huì)導緻漏出速率出現(xiàn)反複抖動。
多級漏桶的權重水(shuǐ)位
OLC按照權重值給各漏桶分配資源,各漏桶被分配的資源決定了(le)其權重水(shuǐ)位,即各漏桶可申請(qǐng)的令牌數。如下(xià)圖所示(僅爲示例),頂級漏桶的初始權重水(shuǐ)位相當于CPU占用(yòng)率95%時(shí)可申請(qǐng)的令牌數,随後由頂級漏桶按權重值逐級向下(xià)分配給所有子漏桶,每一層級所有漏桶的權重水(shuǐ)位之和(hé)相同。
多級漏桶權重水(shuǐ)位分配
多級漏桶水(shuǐ)位更新
-
受監控協議(yì)報(bào)文(wén)或任務進入底層漏桶後,需要申請(qǐng)令牌,漏桶的水(shuǐ)位增長,同時(shí)上(shàng)級漏桶即中間漏桶和(hé)頂級漏桶的水(shuǐ)位也(yě)增長同樣的水(shuǐ)位。
-
底層漏桶判斷自(zì)身當前水(shuǐ)位是否超過權重水(shuǐ)位,如果沒有超過,申請(qǐng)令牌成功,允許報(bào)文(wén)通過;如果底層漏桶水(shuǐ)位超過權重水(shuǐ)位,則向上(shàng)級漏桶申請(qǐng)資源,如果上(shàng)級漏桶沒有超過權重水(shuǐ)位,申請(qǐng)令牌成功,允許報(bào)文(wén)通過。
-
報(bào)文(wén)通過後,底層漏桶減少的水(shuǐ)位,在上(shàng)級漏桶減少同樣的水(shuǐ)位。
多級漏桶債務分攤
如果頂級漏桶的水(shuǐ)位超過了(le)權重水(shuǐ)位,表明(míng)整個系統産生了(le)負債。系統需要每秒對(duì)漏桶水(shuǐ)位進行刷新,計(jì)算(suàn)各級漏桶的債務,沒有産生負債的漏桶可以共享出空(kōng)閑資源,對(duì)産生債務的漏桶的債務資源進行分攤。
如下(xià)圖所示(僅爲示例),頂級漏桶的當前水(shuǐ)位超過了(le)權重水(shuǐ)位,系統産生負債,具體債務分攤流程如下(xià):
-
計(jì)算(suàn)負債資源和(hé)空(kōng)閑資源:負債漏桶和(hé)空(kōng)閑漏桶分别計(jì)算(suàn)當前水(shuǐ)位和(hé)權重水(shuǐ)位的差值得出負債資源和(hé)空(kōng)閑資源。 -
自(zì)頂向下(xià),逐漸分攤:各負債漏桶按照權重比例,分攤其他(tā)空(kōng)閑漏桶的空(kōng)閑資源。 -
丢包或者延遲處理(lǐ):如果負債漏桶仍有負債資源,對(duì)于協議(yì)報(bào)文(wén)進行丢包處理(lǐ),對(duì)于任務進行延遲處理(lǐ)。
-
漏桶水(shuǐ)位阈值設置
多級漏桶權重水(shuǐ)位分配