99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于共享緩存的架構(gòu)的系統(tǒng)“假性卡死”問題分析

電子設(shè)計(jì) ? 來源:網(wǎng)絡(luò)交換FPGA ? 作者:高志凱 ? 2020-11-26 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:高志凱

一次常規(guī)調(diào)試中發(fā)現(xiàn)上電后交換機(jī)多個(gè)口同時(shí)打流會(huì)導(dǎo)致卡死的現(xiàn)象,最后一步步分析問題出現(xiàn)的原因是位寬不夠?qū)е碌囊绯?。這讓我回想起團(tuán)隊(duì)已經(jīng)量產(chǎn)的某款芯片,也是因?yàn)槟硞€(gè)寄存器位寬設(shè)置過小的原因,導(dǎo)致組播組設(shè)置的時(shí)候不能超過31,否則就會(huì)溢出,只能想辦法通過軟件來解決這個(gè)問題。這次出現(xiàn)問題的交換機(jī)是基于共享緩存的架構(gòu),希望后面引以為戒,設(shè)計(jì)每個(gè)小的寄存器時(shí)都要考慮全面。

背景

在使用verilog進(jìn)行程序設(shè)計(jì)時(shí),尤其需要注意數(shù)據(jù)位寬問題。當(dāng)我們將程序燒入fpga的時(shí)候電路已經(jīng)固定,不能像C語言那樣動(dòng)態(tài)改變數(shù)組長度,因此數(shù)據(jù)位寬設(shè)計(jì)不恰當(dāng)會(huì)引入意想不到的問題。例如我們使用二進(jìn)制進(jìn)行計(jì)數(shù)時(shí),位寬為5的數(shù)據(jù)表示范圍為0-31,當(dāng)數(shù)據(jù)為32時(shí)由于位寬不夠,實(shí)際顯示則為0,如果此時(shí)你需要對(duì)這個(gè)數(shù)進(jìn)行大小判斷,那么可能會(huì)得到錯(cuò)誤的結(jié)果。筆者在交換機(jī)功能調(diào)試、解決bug的過程中對(duì)此深有體會(huì)。

首先我們來看一下交換機(jī)對(duì)數(shù)據(jù)的處理流程,網(wǎng)絡(luò)測(cè)試儀發(fā)出的數(shù)據(jù)首先經(jīng)過接口進(jìn)入分流模塊,我們的交換機(jī)支持TT業(yè)務(wù)(時(shí)間觸發(fā))和ET業(yè)務(wù)(普通以太網(wǎng)),本文就ET業(yè)務(wù)進(jìn)行分析。以太網(wǎng)幀進(jìn)入MAC核進(jìn)行CRC校驗(yàn),

并將8位輸入數(shù)據(jù)轉(zhuǎn)32位輸出,轉(zhuǎn)換模塊將數(shù)據(jù)轉(zhuǎn)換為128位總線數(shù)據(jù),并支持反壓。接著數(shù)據(jù)經(jīng)過輪詢進(jìn)入分組處理模塊,分組處理模塊一方面將數(shù)據(jù)幀傳入接收總線,另一方面根據(jù)幀信息提取結(jié)果和流分類信息將接受幀信息傳入入隊(duì)模塊進(jìn)行邏輯入隊(duì),邏輯入隊(duì)模塊管理著一個(gè)虛擬的存儲(chǔ)塊,每一個(gè)虛擬的存儲(chǔ)塊對(duì)應(yīng)著真實(shí)的物理數(shù)據(jù),也就是數(shù)據(jù)幀。緩存管理模塊根據(jù)入隊(duì)和出隊(duì)情況更新存儲(chǔ)塊信息,同時(shí)更新的還有隊(duì)列的長度等信息。數(shù)據(jù)幀出隊(duì)時(shí)首先由邏輯預(yù)出隊(duì)模塊根據(jù)優(yōu)先級(jí)輪詢隊(duì)列,并給出出隊(duì)號(hào),邏輯出隊(duì)模塊根據(jù)端口號(hào)查詢出隊(duì)信息,然后控制總線發(fā)送數(shù)據(jù),數(shù)據(jù)經(jīng)過轉(zhuǎn)換模塊轉(zhuǎn)32位然后經(jīng)mac核輸出。

粗略了解了交換機(jī)的結(jié)構(gòu),言歸正傳,數(shù)據(jù)溢出為什么會(huì)導(dǎo)致交換機(jī)“假性卡死”?

現(xiàn)象

首先我們需要深入了解一下邏輯出隊(duì)預(yù)出隊(duì)模塊,這個(gè)模塊會(huì)產(chǎn)生出隊(duì)號(hào),并將出隊(duì)號(hào)傳入schedule_dequeue模塊,然后schedlue_dequeue模塊根據(jù)出隊(duì)號(hào)獲得出隊(duì)幀首地址,并查詢虛擬塊地址,從而獲得數(shù)據(jù)的物理存儲(chǔ)地址,進(jìn)行數(shù)據(jù)搬移。

現(xiàn)在我們說一下現(xiàn)象,上板時(shí),交換機(jī)4個(gè)口接到testcenter,每個(gè)口打1Gbps數(shù)據(jù)流,固定幀長為64Bytes,其中1、2口打?qū)α鳎?、4口打?qū)α?。?dāng)testcenter準(zhǔn)備好后直接給交換機(jī)4個(gè)口同時(shí)打數(shù)據(jù)流,這時(shí)有兩個(gè)口正常工作,但是另外兩個(gè)口卡死,沒有幀出來。如果在一開始將數(shù)據(jù)流速率控制在90%,打一陣流之后在將4個(gè)口速率提升到100%,則不會(huì)出現(xiàn)上述卡死現(xiàn)象。我們經(jīng)過分析,認(rèn)為交換機(jī)是能夠處理每個(gè)端口1Gbps速率的數(shù)據(jù)流,否則另外兩個(gè)正常工作的隊(duì)列便無法解釋。那么問題出在哪里了?

我們根據(jù)經(jīng)驗(yàn),首先對(duì)入隊(duì)和出隊(duì)關(guān)于幀長信息的更新,入隊(duì)與出隊(duì)產(chǎn)生沖突時(shí)隊(duì)列頭部和尾部信息的更新等等進(jìn)行了檢查,經(jīng)過仿真和對(duì)比更新數(shù)據(jù),確實(shí)發(fā)現(xiàn)了一些小bug,本以為這就是最終bug,結(jié)果興沖沖的跑了一版程序去上板測(cè)試,發(fā)現(xiàn)還是上述現(xiàn)象!這說明我們沒有找到關(guān)鍵點(diǎn)。

發(fā)現(xiàn)問題

這里要為大家介紹一種調(diào)試代碼的方法,就是計(jì)數(shù)法。為了找出問題出在哪里,我們對(duì)邏輯入隊(duì)、物理入隊(duì)的各隊(duì)列幀數(shù)進(jìn)行統(tǒng)計(jì),將其與邏輯出隊(duì)、物理出隊(duì)的各隊(duì)列幀數(shù)進(jìn)行對(duì)比。這時(shí)我們發(fā)現(xiàn),邏輯入隊(duì)和物理入隊(duì)幀數(shù)目一致,

邏輯出隊(duì)和物理出隊(duì)幀數(shù)目一致,但是入隊(duì)和出隊(duì)數(shù)目不一致,兩者相差256,但是隊(duì)列里顯示有255個(gè)幀,這是由隊(duì)列門限決定的,那么其實(shí)有經(jīng)驗(yàn)的你就能大概猜到這個(gè)差值256有點(diǎn)問題。是的沒錯(cuò),問題就出在這里。

我們查看代碼發(fā)現(xiàn),

這里的port_state_data_in_b會(huì)根據(jù)優(yōu)先級(jí)更新相應(yīng)隊(duì)列的幀數(shù)目,顧名思義,它的低8位代表的是優(yōu)先級(jí)為0幀的數(shù)目。當(dāng)入隊(duì)的隊(duì)列號(hào)為00并且入隊(duì)成功后,其低8位會(huì)加1,出隊(duì)成功則減1,上圖展示的便是出隊(duì)時(shí)的代碼。但是我們要知道,優(yōu)先級(jí)為0的隊(duì)列最多有8個(gè),因?yàn)殛?duì)列號(hào)是由{端口號(hào),優(yōu)先級(jí)}的形式組成的,也就是說一個(gè)優(yōu)先級(jí)對(duì)應(yīng)8個(gè)端口號(hào)。前面我們說了一個(gè)隊(duì)列的門限是256,也就是0-255。那么當(dāng)優(yōu)先級(jí)為0的a隊(duì)列已滿,這時(shí)優(yōu)先級(jí)為0的b隊(duì)列再來一個(gè)幀,port_state_data_out_b的值就會(huì)達(dá)到256,由于其只有8位,所以port_state_data_out_b的值其實(shí)是0!這就很麻煩了,因?yàn)闄C(jī)器不夠智能,只能夠按照你的代碼按部就班的執(zhí)行。


所以卡死的原因出來了,由于port_state_data_out_b溢出置0,導(dǎo)致pri_val一直為0,所以狀態(tài)機(jī)一直在進(jìn)行一個(gè)循環(huán),不能完成正常跳轉(zhuǎn)!而這個(gè)模塊提供了出隊(duì)號(hào),當(dāng)其沒有提供出隊(duì)號(hào)時(shí),schedule_dequeue模塊就無法產(chǎn)生出隊(duì)指令,總線也沒辦法進(jìn)行數(shù)據(jù)搬移,從而對(duì)外顯示為“卡死狀態(tài)”。

解決問題

發(fā)現(xiàn)了問題,解決起來就很簡單了,我們只需要將優(yōu)先級(jí)對(duì)應(yīng)的隊(duì)列計(jì)數(shù)器計(jì)數(shù)上限設(shè)置到八個(gè)端口的最大值2048即可,也就是12位的數(shù)據(jù)位寬。如下圖:

寫在最后,往往最微不足道的問題最不容易讓人發(fā)現(xiàn)。這個(gè)位寬不足所導(dǎo)致的問題筆者找了很久,檢查過很多模塊,雖然這其中發(fā)現(xiàn)了一些其他bug,但是解決這個(gè)大bug的過程卻是費(fèi)時(shí)費(fèi)力的,但是設(shè)計(jì)者在設(shè)計(jì)代碼時(shí)只需要認(rèn)真考慮承載功能所需要的位寬,便能為后續(xù)調(diào)試減輕許多麻煩!原我們都養(yǎng)成一個(gè)良好的習(xí)慣。

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    41

    文章

    5635

    瀏覽量

    175980
  • 交換機(jī)
    +關(guān)注

    關(guān)注

    22

    文章

    2747

    瀏覽量

    101930
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112289
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141784
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    高性能緩存設(shè)計(jì):如何解決緩存共享問題

    在多核高并發(fā)場(chǎng)景下, 緩存共享(False Sharing) 是導(dǎo)致性能驟降的“隱形殺手”。當(dāng)不同線程頻繁修改同一緩存行(Cache Line)中的獨(dú)立變量時(shí),CPU緩存一致性協(xié)議會(huì)
    的頭像 發(fā)表于 07-01 15:01 ?132次閱讀
    高性能<b class='flag-5'>緩存</b>設(shè)計(jì):如何解決<b class='flag-5'>緩存</b>偽<b class='flag-5'>共享</b>問題

    MCU緩存設(shè)計(jì)

    MCU 設(shè)計(jì)通過優(yōu)化指令與數(shù)據(jù)的訪問效率,顯著提升系統(tǒng)性能并降低功耗,其核心架構(gòu)與實(shí)現(xiàn)策略如下: 一、緩存類型與結(jié)構(gòu) 指令緩存(I-Cache)與數(shù)據(jù)
    的頭像 發(fā)表于 05-07 15:29 ?359次閱讀

    Nginx緩存配置詳解

    Nginx 是一個(gè)功能強(qiáng)大的 Web 服務(wù)器和反向代理服務(wù)器,它可以用于實(shí)現(xiàn)靜態(tài)內(nèi)容的緩存,緩存可以分為客戶端緩存和服務(wù)端緩存。
    的頭像 發(fā)表于 05-07 14:03 ?594次閱讀
    Nginx<b class='flag-5'>緩存</b>配置詳解

    nginx中強(qiáng)緩存和協(xié)商緩存介紹

    強(qiáng)緩存直接告訴瀏覽器:在緩存過期前,無需與服務(wù)器通信,直接使用本地緩存。
    的頭像 發(fā)表于 04-01 16:01 ?380次閱讀

    緩存與不帶緩存的固態(tài)硬盤有什么區(qū)別

    隨著信息技術(shù)的不斷進(jìn)步,存儲(chǔ)設(shè)備作為計(jì)算機(jī)系統(tǒng)的核心組成部分,其性能與穩(wěn)定性直接影響到整個(gè)系統(tǒng)的運(yùn)行效率。固態(tài)硬盤(Solid State Disk,簡稱SSD)作為新一代存儲(chǔ)設(shè)備,以其高速讀寫、低
    的頭像 發(fā)表于 02-06 16:35 ?2387次閱讀

    緩存對(duì)大數(shù)據(jù)處理的影響分析

    緩存對(duì)大數(shù)據(jù)處理的影響顯著且重要,主要體現(xiàn)在以下幾個(gè)方面: 一、提高數(shù)據(jù)訪問速度 在大數(shù)據(jù)環(huán)境中,數(shù)據(jù)存儲(chǔ)通常采用分布式存儲(chǔ)系統(tǒng),數(shù)據(jù)量龐大,直接從存儲(chǔ)系統(tǒng)中讀取數(shù)據(jù)會(huì)存在較高的延遲。而通過
    的頭像 發(fā)表于 12-18 09:45 ?775次閱讀

    HTTP緩存頭的使用 本地緩存與遠(yuǎn)程緩存的區(qū)別

    HTTP緩存頭是一組HTTP響應(yīng)頭,它們控制瀏覽器和中間代理服務(wù)器如何緩存網(wǎng)頁內(nèi)容。合理使用HTTP緩存頭可以顯著提高網(wǎng)站的加載速度和性能,減少服務(wù)器的負(fù)載。 1. HTTP緩存頭概述
    的頭像 發(fā)表于 12-18 09:41 ?473次閱讀

    Web緩存的類型及功能分析

    隨著互聯(lián)網(wǎng)的迅速發(fā)展,用戶對(duì)網(wǎng)絡(luò)內(nèi)容的訪問需求日益增長。為了提高用戶體驗(yàn)和降低服務(wù)器負(fù)擔(dān),Web緩存技術(shù)應(yīng)運(yùn)而生。Web緩存通過存儲(chǔ)重復(fù)請(qǐng)求的數(shù)據(jù),減少了對(duì)原始服務(wù)器的訪問次數(shù),從而加快了數(shù)據(jù)傳輸
    的頭像 發(fā)表于 12-18 09:35 ?781次閱讀

    什么是緩存(Cache)及其作用

    緩存(Cache)是一種高速存儲(chǔ)器,用于臨時(shí)存儲(chǔ)數(shù)據(jù),以便快速訪問。在計(jì)算機(jī)系統(tǒng)中,緩存的作用是減少處理器訪問主存儲(chǔ)器(如隨機(jī)存取存儲(chǔ)器RAM)所需的時(shí)間。 緩存(Cache)概述
    的頭像 發(fā)表于 12-18 09:28 ?1.2w次閱讀

    上位機(jī)系統(tǒng)架構(gòu)分析 上位機(jī)與下位機(jī)的區(qū)別

    上位機(jī)系統(tǒng)架構(gòu)分析 1. 上位機(jī)的定義與作用 上位機(jī)通常指的是在控制系統(tǒng)中負(fù)責(zé)決策、數(shù)據(jù)處理和用戶交互的計(jì)算機(jī)系統(tǒng)。它通常運(yùn)行在個(gè)人電腦(P
    的頭像 發(fā)表于 12-04 10:17 ?3528次閱讀

    緩存之美——如何選擇合適的本地緩存?

    Guava cache是Google開發(fā)的Guava工具包中一套完善的JVM本地緩存框架,底層實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)類似于ConcurrentHashMap,但是進(jìn)行了更多的能力拓展,包括緩存過期時(shí)間設(shè)置、緩存容量設(shè)置、多種淘汰策略、
    的頭像 發(fā)表于 11-17 14:24 ?822次閱讀
    <b class='flag-5'>緩存</b>之美——如何選擇合適的本地<b class='flag-5'>緩存</b>?

    智算中心網(wǎng)絡(luò)交換機(jī)需要什么樣的緩存架構(gòu)

    場(chǎng)景時(shí),并非緩存越大越好,過大的緩存會(huì)導(dǎo)致更長的隊(duì)列、更高的時(shí)延和抖動(dòng)、更高的成本,所以不能簡單地去擴(kuò)大緩存,交換機(jī)避免丟包所需的緩存與此帶寬延遲積BDP直接相關(guān),借助于帶寬時(shí)延積BD
    的頭像 發(fā)表于 11-14 16:53 ?1042次閱讀
    智算中心網(wǎng)絡(luò)交換機(jī)需要什么樣的<b class='flag-5'>緩存</b><b class='flag-5'>架構(gòu)</b>

    Sallen-Key架構(gòu)分析

    電子發(fā)燒友網(wǎng)站提供《Sallen-Key架構(gòu)分析.pdf》資料免費(fèi)下載
    發(fā)表于 10-28 09:20 ?0次下載
    Sallen-Key<b class='flag-5'>架構(gòu)</b><b class='flag-5'>分析</b>

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構(gòu)分析」閱讀體驗(yàn)】--全書概覽

    、GPU、NPU,給我們剖析了算力芯片的微架構(gòu)。書中有對(duì)芯片方案商處理器的講解,理論聯(lián)系實(shí)際,使讀者能更好理解算力芯片。 全書共11章,由淺入深,較系統(tǒng)全面進(jìn)行講解。下面目錄對(duì)全書內(nèi)容有一個(gè)整體了解
    發(fā)表于 10-15 22:08

    什么是CPU緩存?它有哪些作用?

    CPU緩存(Cache Memory)是計(jì)算機(jī)系統(tǒng)中一個(gè)至關(guān)重要的組成部分,它位于CPU與內(nèi)存之間,作為兩者之間的臨時(shí)存儲(chǔ)器。CPU緩存的主要作用是減少CPU訪問內(nèi)存所需的時(shí)間,從而提高系統(tǒng)
    的頭像 發(fā)表于 08-22 14:54 ?6165次閱讀