多核存儲裝置及多核環(huán)境的跟蹤日志輸出處理方法
【專利摘要】本發(fā)明適用于存儲【技術(shù)領(lǐng)域】,提供了一種多核環(huán)境的跟蹤日志輸出處理方法,所述方法包括:每個核的跟蹤日志生成時,對跟蹤日志數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序;為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),分別用于暫存所述跟蹤日志的指針,以及暫存每個核生成的跟蹤日志及對應(yīng)的時間戳;根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理;定時器中斷時,對所述跟蹤日志輸出處理。本發(fā)明還相應(yīng)提供一種實現(xiàn)上述方法的多核存儲裝置。借此,本發(fā)明可以使緩存操作和輸出操作同時進(jìn)行,減少調(diào)度次數(shù),提高資源利用率。
【專利說明】多核存儲裝置及多核環(huán)境的跟蹤日志輸出處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲【技術(shù)領(lǐng)域】,尤其涉及一種多核存儲裝置及多核環(huán)境的跟蹤日志輸出處理方法。
【背景技術(shù)】
[0002]Trace log (跟蹤日志)是存儲系統(tǒng)中的用戶常用進(jìn)程之一?,F(xiàn)有技術(shù)中一般是通過在存儲區(qū)域申請一塊trace log記錄緩沖區(qū),在程序執(zhí)行的過程中將trace log記錄寫入緩沖區(qū),最后由一個優(yōu)先級最低的任務(wù)負(fù)責(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ù)釋放鎖。
[0004]綜上可知,現(xiàn)有技術(shù)在在實際使用上顯然存在不便與缺陷,所以有必要加以改進(jìn)。
【發(fā)明內(nèi)容】
[0005]針對上述的缺陷,本發(fā)明的目的在于提供一種多核存儲裝置及多核環(huán)境的跟蹤日志輸出處理方法,可以減少調(diào)度次數(shù),提高資源利用率。
[0006]為了實現(xiàn)上述目的,本發(fā)明提供一種多核環(huán)境的跟蹤日志輸出處理方法,所述方法包括:
[0007]每個核的跟蹤日志生成時,對所述跟蹤日志的數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序;
[0008]為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳;
[0009]根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理;
[0010]定時器中斷時,對所述跟蹤日志輸出處理。
[0011]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理步驟包括:
[0012]預(yù)設(shè)一時間戳緩存結(jié)構(gòu);
[0013]將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次;
[0014]將所述時間戳信息按大小排序處理。
[0015]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,所述定時器中斷時,對所述跟蹤日志輸出處理步驟具體為:
[0016]定時器中斷時,將時間戳最小的跟蹤日志輸出。
[0017]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
[0018]根據(jù)本發(fā)明的多核環(huán)境的跟蹤日志輸出處理方法,所述跟蹤日志的輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。
[0019]本發(fā)明還提供一種多核存儲裝置,其特征在于,包括:
[0020]日志處理模塊,用于每個核的跟蹤日志生成時,對所述跟蹤日志的數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序;
[0021]緩存配置模塊,用于為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳;
[0022]日志排序模塊,用于根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理;
[0023]日志輸出模塊,用于定時器中斷時,對所述跟蹤日志輸出處理。
[0024]根據(jù)本發(fā)明的多核存儲裝置,所述日志排序模塊包括:
[0025]設(shè)置子模塊,用于預(yù)設(shè)一時間戳緩存結(jié)構(gòu);
[0026]讀取子模塊,用于將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次;
[0027]排序子模塊,用于將所述時間戳信息按大小排序處理。
[0028]根據(jù)本發(fā)明的多核存儲裝置,所述日志輸出模塊用于定時器中斷時,將時間戳最小的跟蹤日志輸出。
[0029]根據(jù)本發(fā)明的多核存儲裝置,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
[0030]根據(jù)本發(fā)明的多核存儲裝置,所述跟蹤日志的輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。
[0031]本發(fā)明通過在每個核生成的trace log中加入時間戳信息,使其可以方便的進(jìn)行識別與分類。并且每個核對應(yīng)配置有無鎖的循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),分別用于暫存所述跟蹤日志的指針,及暫存每個核生成的跟蹤日志及對應(yīng)的時間戳,通過時間戳信息可以方便的對各跟蹤日志進(jìn)行排序,并在定時器定時中斷時,即可以將trace log記錄輸出到外設(shè)。本發(fā)明產(chǎn)生trace log記錄時不需加鎖,提高了 CPU資源的利用率,并且通過在裝置內(nèi)對trace log進(jìn)行排序可減少對trace log的調(diào)度次數(shù)。
【專利附圖】
【附圖說明】
[0032]圖1是本發(fā)明的多核存儲裝置結(jié)構(gòu)示意圖;
[0033]圖2是本發(fā)明的日志排序模塊結(jié)構(gòu)示意圖;
[0034]圖3是本發(fā)明一實施例的跟蹤日志處理流程示意圖;
[0035]圖4是本發(fā)明一實施例的時間戳緩存結(jié)構(gòu)示意圖;
[0036]圖5是本發(fā)明一實施例的跟蹤日志排序處理示意圖;
[0037]圖6是本發(fā)明的多核環(huán)境的trace log輸出處理方法流程圖;
[0038]圖7是本發(fā)明一實施例的跟蹤日志排序流程圖;
[0039]圖8是本發(fā)明另一實施例的跟蹤日志排序輸出處理流程圖。
【具體實施方式】
[0040]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0041]參見圖1,本發(fā)明提供了一種多核存儲裝置,該多核存儲裝置100包括日志處理模塊10、緩存配置模塊20、日志處理模塊30以及日志輸出模塊40,其中:
[0042]日志處理模塊10,用于每個核的跟蹤日志生成時,對跟蹤日志數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序,且每個跟蹤日志對應(yīng)一個唯一的時間戳信息。
[0043]對應(yīng)于圖3中的Stepl, trace log記錄產(chǎn)生階段,對trace log數(shù)據(jù)進(jìn)行打包,力口入時間戳信息,以標(biāo)識trace log記錄的先后順序。
[0044]緩存配置模塊20,用于為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)(fifo)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳。
[0045]對應(yīng)于圖3中的Step2,每個Core都分配了一個支持無鎖操作的循環(huán)buffer (fifoO?fifo 3)和一個trace log buffer (靜態(tài)緩存結(jié)構(gòu))。無鎖操作的循環(huán)buffer用來承載 trace log 記錄在 trace log buffer 中的指針。trace log buffer 用來承載 trace log記錄的頭信息和trace log數(shù)據(jù)。當(dāng)產(chǎn)生trace log記錄的時候,CPU就將trace log的頭信息(包括時間戳信息)和數(shù)據(jù)存到trace log buffer中,并把該trace log記錄指針壓入循環(huán)buffer。
[0046]日志排序模塊30,用于根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理。
[0047]對應(yīng)于圖3中的Step3。無鎖操作的循環(huán)buffer內(nèi)的trace log記錄指針是按時間有序的,但不同core的循環(huán)buffer之間的trace log記錄的順序是未知的。為了保證trace log的輸出的順序正確,trace log必須進(jìn)行排序。
[0048]優(yōu)選的是,結(jié)合圖2,日志排序模塊30包括:
[0049]設(shè)置子模塊31,用于預(yù)設(shè)一時間戳緩存結(jié)構(gòu)。如圖4所示,本發(fā)明通過定義tracelog timestamp (時間戳)buffer,每條trace log記錄的時間戳只會被讀取一次,在tracelog timestamp buffer中完成排序,借此減少fifo不必要的讀操作。
[0050]讀取子模塊32,用于將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次。
[0051]排序子模塊33,用于將所述時間戳信息按大小排序處理,如圖5所示,借此使不同無鎖操作的循環(huán)buffer內(nèi)的trace log記錄也有序排列。
[0052]日志輸出模塊40,用于定時器中斷時,對所述跟蹤日志輸出處理。需要說明的,定時器中斷時,日志輸出模塊40將時間戳最小的trace log進(jìn)行輸出處理,且優(yōu)選的,輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。外設(shè)處于空閑狀態(tài)時即接收時間戳最小的trace log。
[0053]本發(fā)明適用于固態(tài)硬盤控制器在多核環(huán)境下并且PC側(cè)外設(shè)終端無法通過tracelog記錄的相關(guān)信息進(jìn)行先后排序的情況,通過無鎖操作結(jié)構(gòu),以及在存儲裝置內(nèi)排序,實現(xiàn)了多核環(huán)境trace log記錄從產(chǎn)生到輸出無加解鎖操作,消除了因為加解鎖導(dǎo)致的core之間的等待,提高了 CPU資源的利用率。
[0054]參見圖6,本發(fā)明提供了一種多核環(huán)境的trace log輸出處理方法,其可以通過如圖1所示的存儲裝置100實現(xiàn),該方法包括:
[0055]步驟S601,每個核的跟蹤日志生成時,對跟蹤日志數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序,且每個跟蹤日志對應(yīng)一個唯一的時間戳信息。對應(yīng)于圖3中的Stepl, trace log記錄產(chǎn)生階段,對trace log數(shù)據(jù)進(jìn)行打包,加入時間戳信息,以標(biāo)識trace log記錄的先后順序。
[0056]步驟S602,為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)(fifo)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳。對應(yīng)于圖3中的Step2,每個Core都分配了一個支持無鎖操作的循環(huán)buffer (fifo O?fifo 3)和一個trace log buffer (靜態(tài)緩存結(jié)構(gòu))。無鎖操作的循環(huán) buffer 用來承載 trace log 記錄在 trace log buffer 中的指針。trace log buffer用來承載trace log記錄的頭信息和trace log數(shù)據(jù)。當(dāng)產(chǎn)生trace log記錄的時候,CPU就將trace log的頭信息(包括時間戳信息)和數(shù)據(jù)存到trace log buffer中,并把該trace log記錄指針壓入循環(huán)buffer。
[0057]步驟S603,根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理。對應(yīng)于圖3中的Step3。無鎖操作的循環(huán)buffer內(nèi)的trace log記錄指針是按時間有序的,但不同core的循環(huán)buffer之間的trace log記錄的順序是未知的。為了保證trace log的輸出的順序正確,trace log必須進(jìn)行排序。
[0058]步驟S604,定時器中斷時,對所述跟蹤日志輸出處理。需要說明的,定時器中斷時,將時間戳最小的trace log進(jìn)行輸出處理,且優(yōu)選的,輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。外設(shè)處于空閑狀態(tài)時即接收時間戳最小的trace log。
[0059]優(yōu)選的,結(jié)合圖7,步驟S603具體包括:
[0060]步驟S6031,預(yù)設(shè)一時間戳緩存結(jié)構(gòu)。如圖4所示,本發(fā)明通過定義trace logtimestamp (時間戳)buffer,每條trace log記錄的時間戳只會被讀取一次,在trace logtimestamp buffer中完成排序,借此減少fifo不必要的讀操作。
[0061]步驟S6032,將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次。
[0062]步驟S6033,將所述時間戳信息按大小排序處理,如圖5所示,借此使不同無鎖操作的循環(huán)buffer內(nèi)的trace log記錄也有序排列。
[0063]對于具體的排序及輸出流程,如圖8所示,其通過檢測FIFO中的指針,將指針指向的log的時間戳存入到時間戳緩存結(jié)構(gòu),并在其中排序,讀出一次trace log時,將隊列頭的指針(時間戳最小)指向的trace log讀出,外設(shè)空閑時即輸出到外設(shè)。圖8中Pop操作的功能為讀出一個記錄,Peek操作的功能為只讀一個記錄。在本發(fā)明中,trace log記錄輸出功能由負(fù)載最小的Core來完成,在trace log輸出的時候,其他的Core可以同步產(chǎn)生trace log 記錄。
[0064]綜上所述,本發(fā)明通過在每個核生成的trace log中加入時間戳信息,使其可以方便的進(jìn)行識別與分類。并且每個核對應(yīng)配置有無鎖的循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),分別用于暫存所述跟蹤日志的指針,及暫存每個核生成的跟蹤日志及對應(yīng)的時間戳,通過時間戳信息可以方便的對各跟蹤日志進(jìn)行排序,并在定時器定時中斷時,即可以將trace log記錄輸出到外設(shè)。本發(fā)明產(chǎn)生trace log記錄時不需加鎖,提高了 CPU資源的利用率,并且通過在裝置內(nèi)對trace log進(jìn)行排序可減少對trace log的調(diào)度次數(shù)。
[0065]當(dāng)然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述方法包括: 每個核的跟蹤日志生成時,對所述跟蹤日志的數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序; 為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳; 根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理; 定時器中斷時,對所述跟蹤日志輸出處理。
2.根據(jù)權(quán)利要求1所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理步驟包括: 預(yù)設(shè)一時間戳緩存結(jié)構(gòu); 將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次; 將所述時間戳信息按大小排序處理。
3.根據(jù)權(quán)利要求1所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述定時器中斷時,對所述跟蹤日志輸出處理步驟具體為: 定時器中斷時,將時間戳最小的跟蹤日志輸出。
4.根據(jù)權(quán)利要求1所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
5.根據(jù)權(quán)利要求1?4任一項所述的多核環(huán)境的跟蹤日志輸出處理方法,其特征在于,所述跟蹤日志的輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。
6.一種多核存儲裝置,其特征在于,包括: 日志處理模塊,用于每個核的跟蹤日志生成時,對所述跟蹤日志的數(shù)據(jù)進(jìn)行打包,并加入時間戳信息,所述時間戳信息用于標(biāo)識跟蹤日志記錄的先后順序; 緩存配置模塊,用于為多個核各配置一無鎖循環(huán)緩存結(jié)構(gòu)和靜態(tài)緩存結(jié)構(gòu),所述無鎖循環(huán)緩存結(jié)構(gòu)用于暫存所述跟蹤日志的指針,所述靜態(tài)緩存結(jié)構(gòu)用于暫存每個核生成的跟蹤日志及對應(yīng)的時間戳; 日志排序模塊,用于根據(jù)所述跟蹤日志的指針獲取所述跟蹤日志的時間戳信息,并根據(jù)時間戳信息對不同靜態(tài)緩存結(jié)構(gòu)的跟蹤日志進(jìn)行排序處理; 日志輸出模塊,用于定時器中斷時,對所述跟蹤日志輸出處理。
7.根據(jù)權(quán)利要求6所述的多核存儲裝置,其特征在于,所述日志排序模塊包括: 設(shè)置子模塊,用于預(yù)設(shè)一時間戳緩存結(jié)構(gòu); 讀取子模塊,用于將不同跟蹤日志的時間戳信息讀取到所述時間戳緩存結(jié)構(gòu),每個跟蹤日志的時間戳信息只讀取一次; 排序子模塊,用于將所述時間戳信息按大小排序處理。
8.根據(jù)權(quán)利要求6所述的多核存儲裝置,其特征在于,所述日志輸出模塊用于定時器中斷時,將時間戳最小的跟蹤日志輸出。
9.根據(jù)權(quán)利要求8所述的多核存儲裝置,其特征在于,每個所述跟蹤日志對應(yīng)一個唯一的時間戳信息。
10.根據(jù)權(quán)利要求6?9任一項所述的多核存儲裝置,其特征在于,所述跟蹤日志的輸出處理由負(fù)載最小的核完成,其它核可以同步產(chǎn)生跟蹤日志。
【文檔編號】G06F12/08GK104461931SQ201410407250
【公開日】2015年3月25日 申請日期:2014年8月18日 優(yōu)先權(quán)日:2014年8月18日
【發(fā)明者】周大鵬 申請人:記憶科技(深圳)有限公司