在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于共享緩存的架構的系統“假性卡死”問題分析

電子設計 ? 來源:網絡交換FPGA ? 作者:高志凱 ? 2020-11-26 11:08 ? 次閱讀

作者:高志凱

一次常規調試中發現上電后交換機多個口同時打流會導致卡死的現象,最后一步步分析問題出現的原因是位寬不夠導致的溢出。這讓我回想起團隊已經量產的某款芯片,也是因為某個寄存器位寬設置過小的原因,導致組播組設置的時候不能超過31,否則就會溢出,只能想辦法通過軟件來解決這個問題。這次出現問題的交換機是基于共享緩存的架構,希望后面引以為戒,設計每個小的寄存器時都要考慮全面。

背景

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

首先我們來看一下交換機對數據的處理流程,網絡測試儀發出的數據首先經過接口進入分流模塊,我們的交換機支持TT業務(時間觸發)和ET業務(普通以太網),本文就ET業務進行分析。以太網幀進入MAC核進行CRC校驗,

并將8位輸入數據轉32位輸出,轉換模塊將數據轉換為128位總線數據,并支持反壓。接著數據經過輪詢進入分組處理模塊,分組處理模塊一方面將數據幀傳入接收總線,另一方面根據幀信息提取結果和流分類信息將接受幀信息傳入入隊模塊進行邏輯入隊,邏輯入隊模塊管理著一個虛擬的存儲塊,每一個虛擬的存儲塊對應著真實的物理數據,也就是數據幀。緩存管理模塊根據入隊和出隊情況更新存儲塊信息,同時更新的還有隊列的長度等信息。數據幀出隊時首先由邏輯預出隊模塊根據優先級輪詢隊列,并給出出隊號,邏輯出隊模塊根據端口號查詢出隊信息,然后控制總線發送數據,數據經過轉換模塊轉32位然后經mac核輸出。

粗略了解了交換機的結構,言歸正傳,數據溢出為什么會導致交換機“假性卡死”?

現象

首先我們需要深入了解一下邏輯出隊預出隊模塊,這個模塊會產生出隊號,并將出隊號傳入schedule_dequeue模塊,然后schedlue_dequeue模塊根據出隊號獲得出隊幀首地址,并查詢虛擬塊地址,從而獲得數據的物理存儲地址,進行數據搬移。

現在我們說一下現象,上板時,交換機4個口接到testcenter,每個口打1Gbps數據流,固定幀長為64Bytes,其中1、2口打對流,3、4口打對流。當testcenter準備好后直接給交換機4個口同時打數據流,這時有兩個口正常工作,但是另外兩個口卡死,沒有幀出來。如果在一開始將數據流速率控制在90%,打一陣流之后在將4個口速率提升到100%,則不會出現上述卡死現象。我們經過分析,認為交換機是能夠處理每個端口1Gbps速率的數據流,否則另外兩個正常工作的隊列便無法解釋。那么問題出在哪里了?

我們根據經驗,首先對入隊和出隊關于幀長信息的更新,入隊與出隊產生沖突時隊列頭部和尾部信息的更新等等進行了檢查,經過仿真和對比更新數據,確實發現了一些小bug,本以為這就是最終bug,結果興沖沖的跑了一版程序去上板測試,發現還是上述現象!這說明我們沒有找到關鍵點。

發現問題

這里要為大家介紹一種調試代碼的方法,就是計數法。為了找出問題出在哪里,我們對邏輯入隊、物理入隊的各隊列幀數進行統計,將其與邏輯出隊、物理出隊的各隊列幀數進行對比。這時我們發現,邏輯入隊和物理入隊幀數目一致,

邏輯出隊和物理出隊幀數目一致,但是入隊和出隊數目不一致,兩者相差256,但是隊列里顯示有255個幀,這是由隊列門限決定的,那么其實有經驗的你就能大概猜到這個差值256有點問題。是的沒錯,問題就出在這里。

我們查看代碼發現,

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


所以卡死的原因出來了,由于port_state_data_out_b溢出置0,導致pri_val一直為0,所以狀態機一直在進行一個循環,不能完成正常跳轉!而這個模塊提供了出隊號,當其沒有提供出隊號時,schedule_dequeue模塊就無法產生出隊指令,總線也沒辦法進行數據搬移,從而對外顯示為“卡死狀態”。

解決問題

發現了問題,解決起來就很簡單了,我們只需要將優先級對應的隊列計數器計數上限設置到八個端口的最大值2048即可,也就是12位的數據位寬。如下圖:

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

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 以太網
    +關注

    關注

    40

    文章

    5449

    瀏覽量

    172176
  • 交換機
    +關注

    關注

    21

    文章

    2647

    瀏覽量

    99868
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110190
  • C語言
    +關注

    關注

    180

    文章

    7613

    瀏覽量

    137247
收藏 人收藏

    評論

    相關推薦

    緩存對大數據處理的影響分析

    緩存對大數據處理的影響顯著且重要,主要體現在以下幾個方面: 一、提高數據訪問速度 在大數據環境中,數據存儲通常采用分布式存儲系統,數據量龐大,直接從存儲系統中讀取數據會存在較高的延遲。而通過
    的頭像 發表于 12-18 09:45 ?197次閱讀

    HTTP緩存頭的使用 本地緩存與遠程緩存的區別

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

    Web緩存的類型及功能分析

    隨著互聯網的迅速發展,用戶對網絡內容的訪問需求日益增長。為了提高用戶體驗和降低服務器負擔,Web緩存技術應運而生。Web緩存通過存儲重復請求的數據,減少了對原始服務器的訪問次數,從而加快了數據傳輸
    的頭像 發表于 12-18 09:35 ?255次閱讀

    緩存技術在軟件開發中的應用

    在現代軟件開發中,隨著數據量的爆炸性增長和用戶對響應速度的高要求,緩存技術成為了提升系統性能的重要手段。緩存技術通過將數據存儲在離用戶更近的位置,減少數據訪問延遲,提高數據處理速度,從而優化
    的頭像 發表于 12-18 09:32 ?278次閱讀

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

    緩存(Cache)是一種高速存儲器,用于臨時存儲數據,以便快速訪問。在計算機系統中,緩存的作用是減少處理器訪問主存儲器(如隨機存取存儲器RAM)所需的時間。 緩存(Cache)概述
    的頭像 發表于 12-18 09:28 ?1129次閱讀

    上位機系統架構分析 上位機與下位機的區別

    上位機系統架構分析 1. 上位機的定義與作用 上位機通常指的是在控制系統中負責決策、數據處理和用戶交互的計算機系統。它通常運行在個人電腦(P
    的頭像 發表于 12-04 10:17 ?796次閱讀

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

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

    智算中心網絡交換機需要什么樣的緩存架構

    場景時,并非緩存越大越好,過大的緩存會導致更長的隊列、更高的時延和抖動、更高的成本,所以不能簡單地去擴大緩存,交換機避免丟包所需的緩存與此帶寬延遲積BDP直接相關,借助于帶寬時延積BD
    的頭像 發表于 11-14 16:53 ?515次閱讀
    智算中心網絡交換機需要什么樣的<b class='flag-5'>緩存</b><b class='flag-5'>架構</b>

    Sallen-Key架構分析

    電子發燒友網站提供《Sallen-Key架構分析.pdf》資料免費下載
    發表于 10-28 09:20 ?0次下載
    Sallen-Key<b class='flag-5'>架構</b><b class='flag-5'>分析</b>

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架構分析」閱讀體驗】--全書概覽

    、GPU、NPU,給我們剖析了算力芯片的微架構。書中有對芯片方案商處理器的講解,理論聯系實際,使讀者能更好理解算力芯片。 全書共11章,由淺入深,較系統全面進行講解。下面目錄對全書內容有一個整體了解
    發表于 10-15 22:08

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

    CPU緩存(Cache Memory)是計算機系統中一個至關重要的組成部分,它位于CPU與內存之間,作為兩者之間的臨時存儲器。CPU緩存的主要作用是減少CPU訪問內存所需的時間,從而提高系統
    的頭像 發表于 08-22 14:54 ?3490次閱讀

    為什么stm32使用iostream會卡死

    為什么stm32使用iostream會卡死
    發表于 03-28 09:08

    如何避免PLC程序卡死呢?

    編寫穩定的程序:編寫良好的、穩定的PLC程序是避免程序卡死的關鍵。確保程序邏輯清晰、簡潔,并遵循編程最佳實踐。避免死循環、邏輯錯誤和沖突的發生。
    的頭像 發表于 01-26 09:14 ?672次閱讀

    當PLC程序卡死時我們該如何解決?

    當PLC程序卡死時,可以嘗試以下幾種方法來解決問題
    的頭像 發表于 01-25 09:16 ?2245次閱讀

    如何選擇合適的本地緩存

    小編最近在使用系統的時候,發現盡管應用已經使用了 redis 緩存提高查詢效率,但是仍然有進一步優化的空間,于是想到了比分布式緩存性能更好的本地緩存,因此對領域內常用的本地
    的頭像 發表于 01-18 11:19 ?873次閱讀
    如何選擇合適的本地<b class='flag-5'>緩存</b>?
    主站蜘蛛池模板: 热久久综合这里只有精品电影| 久久综合色播| 亚洲综合春色另类久久| 欧美另类亚洲一区二区| 性欧美精品| 免费啪视频在线观看免费的| 中文字幕一区二区三区在线不卡| 女生扒开尿口让男生舔| 最新色网站| 新激情五月| 在线网站你懂得| 五月天情网| 亚洲激情五月| 99精品久久99久久久久久| 亚洲三级黄色| 日韩写真在线| 国产四虎精品| 色日韩在线| 午夜影院普通| 国产二三区| 黄 色 毛片免费| 狠狠综合| 91精品国产91久久久久久青草| 成年人一级毛片| 天天综合天天干| 天天舔天天射天天操| 国产人人爱| 亚洲视频在线观看一区| 人人人干| 西西人体大胆午夜gog0| 国产亚洲自在精品久久| 色婷婷久| 国产日韩一区二区三区| 超级黄色毛片| 欧美成人免费午夜全| 免费久久久久| 国产精品视频久久久久久| 中文字幕在线二区| 四虎影院wwww| 欧美一区二区三区免费| 亚洲最大色网站|