91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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ù)組長(zhǎng)度,因此數(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ì)列的長(zhǎng)度等信息。數(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ù)流,固定幀長(zhǎng)為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)于幀長(zhǎng)信息的更新,入隊(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)了問題,解決起來就很簡(jiǎ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

    文章

    6012

    瀏覽量

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

    關(guān)注

    23

    文章

    2905

    瀏覽量

    104513
  • Verilog
    +關(guān)注

    關(guān)注

    30

    文章

    1374

    瀏覽量

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

    關(guān)注

    183

    文章

    7644

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    XC7Z020-2CLG484I 雙核異構(gòu)架構(gòu) 全能型 SoC

    / 數(shù)據(jù)緩存 + 512KB L2 共享緩存” 的配置,配合 256KB 片上存儲(chǔ)器,大幅提升數(shù)據(jù)訪問效率。? 可編程邏輯(PL):基于 28nm Artix-7 FPGA 架構(gòu)
    發(fā)表于 02-28 23:37

    C語言的緩沖區(qū)(緩存)詳解

    ,這并沒有告訴我們?nèi)绻麡?biāo)準(zhǔn)輸入和輸出涉及交互作用設(shè)備時(shí),它們是不帶緩存的還是行緩存的,以及標(biāo)準(zhǔn)輸出是不帶緩存的,還是行緩存的。   大部分系統(tǒng)
    發(fā)表于 01-14 07:30

    國(guó)產(chǎn)RISC-V架構(gòu)MCU在工控系統(tǒng)中的節(jié)能性分析

    摘要 :隨著工業(yè)4.0與"雙碳"目標(biāo)的深入推進(jìn),工業(yè)控制系統(tǒng)的能效優(yōu)化已成為制約制造業(yè)可持續(xù)發(fā)展的關(guān)鍵技術(shù)指標(biāo)。本文以國(guó)科安芯研制的AS32I601系列RISC-V架構(gòu)MCU芯片為研究對(duì)象,系統(tǒng)分析
    的頭像 發(fā)表于 12-11 16:46 ?1446次閱讀

    零信任架構(gòu)賦能芯片制造:安全共享數(shù)據(jù),破解協(xié)作風(fēng)險(xiǎn)!

    架構(gòu)已成為新設(shè)備部署與數(shù)據(jù)分析平臺(tái)搭建的硬性要求:客戶亟需通過這一架構(gòu)達(dá)成雙重目標(biāo),既保障敏感數(shù)據(jù)安全,又能選擇性地與合作伙伴共享數(shù)據(jù);幾乎所有企業(yè)都視其為實(shí)現(xiàn)生產(chǎn)
    的頭像 發(fā)表于 12-11 16:37 ?1116次閱讀
    零信任<b class='flag-5'>架構(gòu)</b>賦能芯片制造:安全<b class='flag-5'>共享</b>數(shù)據(jù),破解協(xié)作風(fēng)險(xiǎn)!

    緩存之美:萬文詳解 Caffeine 實(shí)現(xiàn)原理(上)

    用于統(tǒng)計(jì)元素訪問頻率的 Count-Min Sketch 數(shù)據(jù)結(jié)構(gòu)、理解內(nèi)存屏障和如何避免緩存共享問題、MPSC 多線程設(shè)計(jì)模式、高性能緩存的設(shè)計(jì)思想和多線程間的協(xié)調(diào)方案等等,文章最后會(huì)對(duì)全文內(nèi)容進(jìn)行總結(jié),希望大家能有所收獲的
    的頭像 發(fā)表于 08-05 14:49 ?707次閱讀
    <b class='flag-5'>緩存</b>之美:萬文詳解 Caffeine 實(shí)現(xiàn)原理(上)

    恒訊科技分析:Ubuntu云服務(wù)器數(shù)據(jù)共享高效方案

    ,幫助您根據(jù)實(shí)際需求選擇最適合的解決方案。 一、NFS(Network File System)共享方案 NFS是Linux系統(tǒng)中最常用的文件共享協(xié)議之一,適用于Linux服務(wù)器之間的數(shù)據(jù)共享
    的頭像 發(fā)表于 07-09 21:40 ?1494次閱讀

    RFID標(biāo)簽在共享經(jīng)濟(jì)的應(yīng)用

    :通過RFID系統(tǒng),可以實(shí)時(shí)獲取共享資源的位置和狀態(tài)信息,便于及時(shí)調(diào)整管理計(jì)劃。4.自動(dòng)化:RFID可以與自動(dòng)管理系統(tǒng)結(jié)合,實(shí)現(xiàn)共享資源管理的自動(dòng)化,減少人力成本
    的頭像 發(fā)表于 07-07 15:22 ?523次閱讀
    RFID標(biāo)簽在<b class='flag-5'>共享</b>經(jīng)濟(jì)的應(yīng)用

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

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

    STM32G473 flash擦除時(shí)程序卡死,為什么?

    我在進(jìn)行雙bank升級(jí)的時(shí)候,會(huì)先進(jìn)行FLASH的批量擦除。在連續(xù)的升級(jí)過程中發(fā)現(xiàn)成功幾次后出現(xiàn)了執(zhí)行擦除flash操作時(shí)程序卡死的情況,直觀上看燈沒有閃爍。成功次數(shù)不規(guī)律,可能更新2次后才卡死一次
    發(fā)表于 06-12 08:05

    STM32G473 flash擦除時(shí)程序卡死的原因?

    我在進(jìn)行雙bank升級(jí)的時(shí)候,會(huì)先進(jìn)行FLASH的批量擦除。在連續(xù)的升級(jí)過程中發(fā)現(xiàn)成功幾次后出現(xiàn)了執(zhí)行擦除flash操作時(shí)程序卡死的情況,直觀上看燈沒有閃爍。成功次數(shù)不規(guī)律,可能更新2次后才卡死一次
    發(fā)表于 06-09 07:23

    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 ?1136次閱讀

    Nginx緩存配置詳解

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

    一文掌握RK3568開發(fā)板Android13掛載Windows共享目錄

    在物聯(lián)網(wǎng)和邊緣計(jì)算場(chǎng)景中,開發(fā)板與PC端的高效文件交互尤為重要。現(xiàn)以iTOP-RK3568開發(fā)板為例,詳細(xì)演示Android13系統(tǒng)如何通過CIFS協(xié)議掛載Windows共享目錄,實(shí)現(xiàn)開發(fā)板與PC
    發(fā)表于 04-16 13:55

    高速SSD存儲(chǔ)系統(tǒng)中數(shù)據(jù)緩存控制器整體頂層設(shè)計(jì)

    數(shù)據(jù)緩存控制器主要實(shí)現(xiàn)了對(duì)大量突發(fā)數(shù)據(jù)的緩存、AXI4接口與AXI4-Stream接口之間的轉(zhuǎn)換和NVMe命令的生成等功能。這里主要介紹相關(guān)開發(fā)流程。
    的頭像 發(fā)表于 04-14 10:46 ?798次閱讀
    高速SSD存儲(chǔ)<b class='flag-5'>系統(tǒng)</b>中數(shù)據(jù)<b class='flag-5'>緩存</b>控制器整體頂層設(shè)計(jì)

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

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