多核環(huán)境的跟蹤日志輸出處理方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明適用于存儲【技術(shù)領(lǐng)域】,提供了一種多核環(huán)境的trace?log輸出處理方法,所述方法包括:每個核的trace?log生成時,對所述trace?log數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息;為多個核各配置一無鎖先入先出結(jié)構(gòu),用于接收每個核生成的trace?log;定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將trace?log輸出到主機側(cè);主機側(cè)根據(jù)所述每個核的標(biāo)識信息,將trace?log進行分類;主機側(cè)根據(jù)時間戳,將分類后的trace?log進行排序處理。本發(fā)明還相應(yīng)的提供一種多核環(huán)境的trace?log輸出處理系統(tǒng)。借此,本發(fā)明可以使緩存操作和輸出操作同時進行,減少調(diào)度次數(shù),提高資源利用率。
【專利說明】多核環(huán)境的跟蹤日志輸出處理方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲【技術(shù)領(lǐng)域】,尤其涉及一種多核環(huán)境的跟蹤日志輸出處理方法及系統(tǒng)。
【背景技術(shù)】
[0002]Trace log (跟蹤日志)是存儲系統(tǒng)中的用戶常用進程之一?,F(xiàn)有技術(shù)中一般是通過在存儲區(qū)域申請一塊trace log記錄緩沖區(qū),在程序執(zhí)行的過程中將trace log記錄寫入緩沖區(qū),最后由一個優(yōu)先級最低的任務(wù)負責(zé)trace log記錄的輸出。
[0003]上述方法有以下不利之處:1)當(dāng)多個core同時向trace log記錄緩沖區(qū)寫入trace log記錄時必須先獲取鎖,所以需要等待其他Core釋放鎖;2)在優(yōu)先級最低的任務(wù)所在的Core做trace log記錄輸出時,需要對trace log記錄緩沖區(qū)加鎖,通過加鎖的方式避免trace log記錄管理出現(xiàn)不一致的問題,但這種方式將直接導(dǎo)致其他Core此時如果有trace log記錄產(chǎn)生,那么必須等待優(yōu)先級最低的任務(wù)釋放鎖;3)現(xiàn)有技術(shù)方案采用了逐條輸出trace log記錄的方法,導(dǎo)致USB,UART或ETHERNET的調(diào)度次數(shù)多,并且數(shù)據(jù)輸出時CPU參與數(shù)據(jù)的搬移,這都會導(dǎo)致CPU資源的浪費和外設(shè)調(diào)度的開銷。
[0004]綜上可知,現(xiàn)有技術(shù)在實際使用上顯然存在不便與缺陷,所以有必要加以改進。
【發(fā)明內(nèi)容】
[0005]針對上述的缺陷,本發(fā)明的目的在于提供一種多核環(huán)境的跟蹤日志輸出處理方法及系統(tǒng),可以減少調(diào)度次數(shù),提高資源利用率。
[0006]為了實現(xiàn)上述目的,本發(fā)明提供一種多核環(huán)境的跟蹤日志輸出處理方法,所述方法包括:
[0007]每個核的跟蹤日志生成時,對所述跟蹤日志數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息;
[0008]為多個核各配置一無鎖先入先出結(jié)構(gòu),用于接收每個核生成的跟蹤日志;
[0009]定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將跟蹤日志輸出到主機側(cè);
[0010]主機側(cè)根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類;
[0011 ] 主機側(cè)根據(jù)時間戳,將分類后的跟蹤日志進行排序處理。
[0012]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,所述根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類步驟之前進一步包括:
[0013]主機側(cè)將接收到的跟蹤日志記錄到緩沖區(qū);
[0014]把所述緩沖區(qū)里的跟蹤日志依次掛到輪詢鏈表中;
[0015]檢測所述輪詢鏈表是否為空,若不為空,則對所述輪詢鏈表的每個節(jié)點進行解析。
[0016]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,所述主機側(cè)根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類的步驟包括:
[0017]將不同類別的跟蹤日志存入主機不同的先入先出結(jié)構(gòu)。
[0018]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,所述主機側(cè)根據(jù)時間戳,將分類后的跟蹤日志進行排序處理步驟具體為:主機側(cè)根據(jù)時間戳對不同先入先出結(jié)構(gòu)中的跟蹤日志進行排序處理,并將時間戳最小的跟蹤日志排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。
[0019]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
[0020]本發(fā)明還相應(yīng)的一種多核環(huán)境的跟蹤日志輸出處理系統(tǒng),包括具有多核控制器的存儲裝置及主機,其中:
[0021]所述存儲裝置包括:
[0022]日志處理模塊,用于每個核的跟蹤日志生成時,對所述跟蹤日志數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息;
[0023]配置模塊,用于為多個核各配置一無鎖先入先出結(jié)構(gòu),以接收每個核生成的跟蹤曰志;
[0024]日志輸出模塊,用于定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將跟蹤日志輸出到所述主機;
[0025]所述主機包括:
[0026]日志分類模塊,用于根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類;
[0027]日志排序模塊,用于根據(jù)時間戳,將分類后的跟蹤日志進行排序處理。
[0028]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),所述主機還包括:
[0029]日志接收模塊,用于將接收到的跟蹤日志記錄到緩沖區(qū),并把所述緩沖區(qū)里的跟蹤日志依次掛到輪詢鏈表中;
[0030]鏈表檢測模塊,用于檢測所述輪詢鏈表是否為空,若不為空,則交于日志分類模塊對所述輪詢鏈表的每個節(jié)點進行解析。
[0031]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),所述日志分類模塊進一步用于將不同類別的跟蹤日志存入主機不同的先入先出結(jié)構(gòu)。
[0032]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),所述日志排序模塊進一步用于根據(jù)時間戳對不同先入先出結(jié)構(gòu)中的跟蹤日志進行排序處理,并將時間戳最小的跟蹤日志排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。
[0033]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
[0034]本發(fā)明通過在每個核生成的trace log中加入時間戳及標(biāo)識信息,使其可以方便的進行識別與分類。并且每個核對應(yīng)配置有無鎖的先入先出結(jié)構(gòu)(FIFO),用于接收tracelog,在定時器定時中斷時,即可以將trace log記錄輸出到主機側(cè),主機側(cè)可以根據(jù)tracelog中的時間戳及標(biāo)識信息對trace log進行分類和和排序,并加以顯示。借此,本發(fā)明產(chǎn)生trace log記錄時不需加鎖,提高了 CPU資源的利用率,并且通過主機側(cè)進行分類和排序可減少對trace log的調(diào)度次數(shù)。
【專利附圖】
【附圖說明】
[0035]圖1是本發(fā)明的多核環(huán)境的跟蹤日志輸出處理系統(tǒng)結(jié)構(gòu)示意圖;
[0036]圖2是本發(fā)明一實施例的跟蹤日志處理流程示意圖;
[0037]圖3是本發(fā)明一實施例的跟蹤日志排序處理示意圖;
[0038]圖4是本發(fā)明一實施例的時間戳緩沖器示意圖;
[0039]圖5是本發(fā)明的多核環(huán)境的trace log輸出處理方法流程圖;
[0040]圖6是本發(fā)明一實施例的跟蹤日志排序流程圖。
【具體實施方式】
[0041]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0042]參見圖1,本發(fā)明提供了一種多核環(huán)境的跟蹤日志輸出處理系統(tǒng),該系統(tǒng)100包括具有多核控制器的存儲裝置10及主機20,其中:
[0043]所述存儲裝置10包括日志處理模塊11、配置模塊12及日志輸出模塊13,具體的:
[0044]日志處理模塊11,用于每個核的trace log生成時,對所述trace log數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息。
[0045]對應(yīng)于圖2的stepl, trace log產(chǎn)生的時候,日志處理模塊11對trace log數(shù)據(jù)進行打包,加入時間戳及Core (核)id等信息,優(yōu)選的,每個trace log對應(yīng)一個唯一的時間戳信息。
[0046]配置模塊12,用于為多個核各配置一無鎖先入先出結(jié)構(gòu)(FIFO),作為循環(huán)緩沖器(buffer),以接收每個核生成的trace log。
[0047]對應(yīng)于圖2的step2,每個Core都分配了一個支持無鎖操作的循環(huán)buffer,循環(huán)buffer用來承載trace log記錄,trace log記錄包括trace log的頭信息和trace log數(shù)據(jù),trace log頭信息包含時間戳及Core id等信息。當(dāng)生成trace log信息的時候,控制器就將整條trace log記錄壓入循環(huán)buffer。
[0048]日志輸出模塊13,用于定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將tracelog輸出到主機側(cè)。
[0049]對應(yīng)用于圖2的step3,存儲裝置10每隔固定的時間發(fā)生一次timer (定時器)中斷,timer中斷發(fā)生的時候,做trace log輸出處理。DMA輪詢每個core的循環(huán)buffer,將數(shù)據(jù)輸出到主機側(cè)。在copy數(shù)據(jù)時循環(huán)buffer存在著折返的可能性,如果存在折返,數(shù)據(jù)地址必不連續(xù),對于每個循環(huán)buffer, DMA LLI鏈表上有兩個block。
[0050]所述主機20包括日志接收模塊21、鏈表檢測模塊22、日志分類模塊23及日志排序模塊24,其中:
[0051]日志接收模塊21,用于將接收到的tracelog記錄到緩沖區(qū),并把所述緩沖區(qū)里的trace log依次掛到輪詢鏈表中。
[0052]對應(yīng)于圖2中的st印4和st印5,主機側(cè)從外設(shè)接口(UART/USB/ETHEREN)接收到trace log記錄到緩沖區(qū),把緩沖區(qū)里的trace log記錄依次掛到鏈表中,這里有一次memcpy的操作。
[0053]鏈表檢測模塊22,用于檢測所述輪詢鏈表是否為空,若不為空,則交于日志分類模塊23對所述輪詢鏈表的每個節(jié)點進行解析。
[0054]日志分類模塊23,用于根據(jù)所述每個核的標(biāo)識信息,將tracelog進行分類。
[0055]對應(yīng)于圖2中的step6,一個專用的線程負責(zé)polling(輪詢)鏈表的狀態(tài),如果不為空,就對每個鏈表node進行解析,根據(jù)code id將trace log記錄分類,將不同tracelog記錄指針壓入不同的fifo。
[0056]日志排序模塊24,用于根據(jù)時間戳,將分類后的tracelog進行排序處理。
[0057]對應(yīng)于圖2中step7,將trace log進行排序處理后,時間戳最小的trace log對應(yīng)排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。主機20可根據(jù)該排列,對trace log進行輸出顯示(step8)ο
[0058]優(yōu)選的是,為了減少對fifo不必要的讀操作,本發(fā)明定義了 trace logtimestamp (時間戳)buffer,如圖3和4所示。每條trace log記錄的時間戳只會被讀取一次,在 trace log timestamp buffer 中完成排序。
[0059]本發(fā)明實現(xiàn)了多核環(huán)境trace log記錄從產(chǎn)生到輸出無鎖操作,消除了因為加解鎖導(dǎo)致的core之間的等待,提高了 CPU資源的利用率。具體體現(xiàn)如下:I)Trace log記錄生成和輸出可以同時進行,整個過程不需加鎖,無加鎖解鎖的開銷,CORE之間無等待解鎖開銷,提高了 CPU資源的利用率;2)本方案為每一個core都分配了一個支持無鎖操作的循環(huán)buffer,多個core同時產(chǎn)生trace log記錄時不需加鎖,提高了 CPU資源的利用率;3) “trace log記錄外排序輸出算法”將排序的過程放在主機側(cè),使trace log記錄輸出時與外設(shè)的交互可以使用DMA來實現(xiàn),這種方式同時減輕了存儲裝置的控制器的負載,提高了 trace log記錄的輸出效率。
[0060]參見圖5,本發(fā)明提供了一種多核環(huán)境的trace log輸出處理方法,其可以通過如圖1所示的系統(tǒng)100實現(xiàn),該方法包括:
[0061]步驟S501,每個核的trace log生成時,對所述trace log數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息。
[0062]對應(yīng)于圖2的stepl, trace log產(chǎn)生的時候,存儲裝置10對trace log數(shù)據(jù)進行打包,加入時間戳及Core(核)id等信息,優(yōu)選的,每個trace log對應(yīng)一個唯一的時間戳信息。
[0063]步驟S502,為多個核各配置一無鎖先入先出結(jié)構(gòu)(FIF0),作為循環(huán)緩沖器(buffer),以接收每個核生成的trace log。
[0064]對應(yīng)于圖2的step2,每個Core都分配了一個支持無鎖操作的循環(huán)buffer,循環(huán)buffer用來承載trace log記錄,trace log記錄包括trace log的頭信息和trace log數(shù)據(jù),trace log頭信息包含時間戳及Core id等信息。當(dāng)生成trace log信息的時候,控制器就將整條trace log記錄壓入循環(huán)buffer。
[0065]步驟S503,定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將trace log輸出到主機側(cè)。
[0066]對應(yīng)用于圖2的step3,存儲裝置10每隔固定的時間發(fā)生一次timer (定時器)中斷,timer中斷發(fā)生的時候,做trace log輸出處理。DMA輪詢每個core的循環(huán)buffer,將數(shù)據(jù)輸出到主機側(cè)。在copy數(shù)據(jù)時循環(huán)buffer存在著折返的可能性,如果存在折返,數(shù)據(jù)地址必不連續(xù),對于每個循環(huán)buffer, DMA LLI鏈表上有兩個block。
[0067]步驟S504,主機側(cè)將接收到的trace log記錄到緩沖區(qū),并把所述緩沖區(qū)里的trace log依次掛到輪詢鏈表中。
[0068]對應(yīng)于圖2中的st印4和st印5,主機側(cè)從外設(shè)接口(UART/USB/ETHEREN)接收到trace log記錄到緩沖區(qū),把緩沖區(qū)里的trace log記錄依次掛到鏈表中,這里有一次memcpy的操作。
[0069]步驟S505,檢測所述輪詢鏈表是否為空,若不為空,則對所述輪詢鏈表的每個節(jié)點進行解析。
[0070]步驟S506,根據(jù)所述每個核的標(biāo)識信息,將trace log進行分類。
[0071]對應(yīng)于圖2中的step6,一個專用的線程負責(zé)polling(輪詢)鏈表的狀態(tài),如果不為空,就對每個鏈表node進行解析,根據(jù)code id將trace log記錄分類,將不同tracelog記錄指針壓入不同的fifo。
[0072]步驟S507,根據(jù)時間戳,將分類后的trace log進行排序處理。
[0073]對應(yīng)于圖2中step7,將trace log進行排序處理后,時間戳最小的trace log對應(yīng)排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。主機20可根據(jù)該排列,對trace log進行輸出顯示(step8)ο
[0074]優(yōu)選的是,為了減少對fifo不必要的讀操作,本發(fā)明定義了 trace logtimestamp (時間戳)buffer,結(jié)合圖3和4所示。每條trace log記錄的時間戳只會被讀取一次,在trace log timestamp buffer中完成排序,排序流程如圖6所示,借此可減少調(diào)度次數(shù),提高資源利用率。
[0075]綜上所述,本發(fā)明通過在每個核生成的trace log中加入時間戳及標(biāo)識信息,使其可以方便的進行識別與分類。并且每個核對應(yīng)配置有無鎖的先入先出結(jié)構(gòu)(FIF0),用于接收trace log,在定時器定時中斷時,即可以將trace log記錄輸出到主機側(cè),主機側(cè)可以根據(jù)trace log中的時間戳及標(biāo)識信息對trace log進行分類和和排序,并加以顯示。借此,本發(fā)明產(chǎn)生trace log記錄時不需加鎖,提高了 CPU資源的利用率,并且通過主機側(cè)進行分類和排序可減少對trace log的調(diào)度次數(shù)。
[0076]當(dāng)然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
【權(quán)利要求】
1.一種多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述方法包括: 每個核的跟蹤日志生成時,對所述跟蹤日志數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息; 為多個核各配置一無鎖先入先出結(jié)構(gòu),用于接收每個核生成的跟蹤日志; 定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將跟蹤日志輸出到主機側(cè); 主機側(cè)根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類; 主機側(cè)根據(jù)時間戳,將分類后的跟蹤日志進行排序處理。
2.根據(jù)權(quán)利要求1所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類步驟之前進一步包括: 主機側(cè)將接收到的跟蹤日志記錄到緩沖區(qū); 把所述緩沖區(qū)里的跟蹤日志依次掛到輪詢鏈表中; 檢測所述輪詢鏈表是否為空,若不為空,則對所述輪詢鏈表的每個節(jié)點進行解析。
3.根據(jù)權(quán)利要求1所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述主機側(cè)根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類的步驟包括: 將不同類別的跟蹤日志存入主機不同的先入先出結(jié)構(gòu)。
4.根據(jù)權(quán)利要求3所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述主機側(cè)根據(jù)時間戳,將分類后的跟蹤日志進行排序處理步驟具體為:主機側(cè)根據(jù)時間戳對不同先入先出結(jié)構(gòu)中的跟蹤日志進行排序處理,并將時間戳最小的跟蹤日志排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。
5.根據(jù)權(quán)利要求1?4任一項所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
6.—種多核環(huán)境的跟蹤日志輸出處理系統(tǒng),其特征在于,包括具有多核控制器的存儲裝置及主機,其中: 所述存儲裝置包括: 日志處理模塊,用于每個核的跟蹤日志生成時,對所述跟蹤日志數(shù)據(jù)進行打包,并加入時間戳及每個核的標(biāo)識信息; 配置模塊,用于為多個核各配置一無鎖先入先出結(jié)構(gòu),以接收每個核生成的跟蹤日志; 日志輸出模塊,用于定時器中斷時,輪詢每個核的無鎖先入先出結(jié)構(gòu),將跟蹤日志輸出到所述主機; 所述主機包括: 日志分類模塊,用于根據(jù)所述每個核的標(biāo)識信息,將跟蹤日志進行分類; 日志排序模塊,用于根據(jù)時間戳,將分類后的跟蹤日志進行排序處理。
7.根據(jù)權(quán)利要求6所述的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),其特征在于,所述主機還包括: 日志接收模塊,用于將接收到的跟蹤日志記錄到緩沖區(qū),并把所述緩沖區(qū)里的跟蹤日志依次掛到輪詢鏈表中; 鏈表檢測模塊,用于檢測所述輪詢鏈表是否為空,若不為空,則交于日志分類模塊對所述輪詢鏈表的每個節(jié)點進行解析。
8.根據(jù)權(quán)利要求6所述的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),其特征在于,所述日志分類模塊進一步用于將不同類別的跟蹤日志存入主機不同的先入先出結(jié)構(gòu)。
9.根據(jù)權(quán)利要求8所述的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),其特征在于,所述日志排序模塊進一步用于根據(jù)時間戳對不同先入先出結(jié)構(gòu)中的跟蹤日志進行排序處理,并將時間戳最小的跟蹤日志排在對應(yīng)的先入先出結(jié)構(gòu)的頂部。
10.根據(jù)權(quán)利要求6?9任一項所述的多核環(huán)境的跟蹤日志輸出處理系統(tǒng),其特征在于,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
【文檔編號】G06F12/08GK104182360SQ201410409419
【公開日】2014年12月3日 申請日期:2014年8月18日 優(yōu)先權(quán)日:2014年8月18日
【發(fā)明者】周大鵬 申請人:記憶科技(深圳)有限公司