一種時間同步的方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及嵌入式系統(tǒng)領域,尤其涉及一種時間同步的方法及裝置。
【背景技術】
[0002]多核處理器是將兩個或多個處理器封裝在一起,集成有兩個或多個完整的計算引擎(內核)。多核處理器由于多核并行的處理數(shù)據(jù)使得系統(tǒng)的性能大幅的提高,但是隨著處理器個數(shù)的增加,多個核之間的信息共享越來越重要,一個核經常需要知道或參考其他核的數(shù)據(jù)信息,則相應的開發(fā)難度也越來越大,問題的定位也越來越難。
[0003]目前,每一個從CPU核都有屬于自身的時鐘,以自身啟動時間為基準,根據(jù)自身的時鐘來計算獲得自身的當前時間,這樣,就會導致在某一時刻每個從CPU核的當前時間會有差異,難以實現(xiàn)核間的時間同步,當出現(xiàn)問題時,需要定位某一時刻從CPU核的行為,就會導致定位不準確,使得對問題的解決非常不方便。例如,如果當前需要知道數(shù)據(jù)流整個處理流程中在每個核內的耗時情況,就需要統(tǒng)一的時間。
[0004]而目前,還沒有通用的多核間時間同步的方法。
【發(fā)明內容】
[0005]本發(fā)明實施例提供一種時間同步的方法及裝置,實現(xiàn)了多核間的時間同步,使得問題定位更加準確方便。
[0006]本發(fā)明實施例提供的具體技術方案如下:
[0007]—種時間同步的方法,包括:
[0008]主CPU核創(chuàng)建乒乓緩存,并將上述乒乓緩存的地址發(fā)送給從CPU核;
[0009]主CPU核在設定的定時器超時時,更新上述乒乓緩存中的參數(shù);其中,上述參數(shù)至少包括乒乓緩存的標記位、乒乓緩存的索引值和當前的基準時間;
[0010]從CPU核獲取主CHJ核發(fā)送的上述乒乓緩存的地址,以及在確定要獲取當前時間時,獲取上述乒乓緩存中保存的當前的基準時間;
[0011]從CPU核讀取上述定時器的時間偏移值,以及基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間,且基于上述從CPU核的當前時間和上述當前的基準時間,完成與主CPU核的時間同步。
[0012]本發(fā)明實施例中,主CPU核創(chuàng)建乒乓緩存,并將上述乒乓緩存的地址發(fā)送給從CPU核;主CPU核在設定的定時器超時時,更新上述乒乓緩存中的參數(shù);其中,上述參數(shù)至少包括乒乓緩存的標記位、乒乓緩存的索引值和當前的基準時間;從CPU核獲取主CPU核發(fā)送的上述乒乓緩存的地址,以及在確定要獲取當前時間時,獲取上述乒乓緩存中保存的當前的基準時間;從CHJ核讀取上述定時器的時間偏移值,以及基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間,且基于上述從CPU核的當前時間和上述當前的基準時間,完成與主CPU核的時間同步。這樣,利用創(chuàng)建的乒乓緩存和定時器,實現(xiàn)每一個CPU核的時間同步,且獲取的時間精度高;并且,不再使用鎖功能,減少每個核的加鎖、等待延遲和解鎖等操作,不會影響系統(tǒng)的性能。
[0013]較佳的,上述設定的定時器為單次觸發(fā)one_shot模式的定時器。
[0014]較佳的,主CPU核在設定的定時器超時時,更新上述乒乓緩存中的參數(shù),具體包括:
[0015]確定乒乓緩存中當前使用的乒乓緩存塊,以及將當前使用的乒乓緩存塊的標記位設置為正在使用IN_USE,將當前未使用的乒乓緩存塊的標記位設置為未使用UNJJSE;其中,上述乒乓緩存包括兩個乒乓緩存塊;
[0016]將獲取的當前的基準時間寫入當前使用的乒乓緩存塊中,且設置每一個乒乓緩存塊的索引值并重新啟動定時器。
[0017]較佳的,在確定要獲取當前時間時,獲取上述乒乓緩存中的當前的基準時間,具體包括:
[0018]獲取乒乓緩存中乒乓緩存塊的索引值,并基于上述索引值,獲取對應的乒乓緩存塊的標記位;
[0019]判斷上述標記位是否為IN_USE,以及在確定標記位為IN_USE時,獲取上述對應的乒乓緩存塊中保存的當前的基準時間。
[0020]較佳的,基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間,具體包括:
[0021 ]判斷上述時間偏移值是否為O;
[0022]若為O,則計算上述當前的基準時間和預設的定時器的定時時間之和,作為從CPU核的當前時間;
[0023]若不為O,則計算上述時間偏移值和上述當前的基準時間之和,作為從CPU核的當前時間。
[0024]一種時間同步裝置,包括一個主CPU核和至少一個從CPU核,具體包括:
[0025]主CPU核,用于創(chuàng)建乒乓緩存,并將上述乒乓緩存的地址發(fā)送給從CPU核,以及在設定的定時器超時時,更新上述乒乓緩存中的參數(shù);其中,上述參數(shù)至少包括乒乓緩存的標記位、乒乓緩存的索引值和當前的基準時間;
[0026]從CPU核,用于獲取主CPU核發(fā)送的上述乒乓緩存的地址,在確定要獲取當前時間時,獲取上述乒乓緩存中保存的當前的基準時間,以及讀取定時器的時間偏移值,基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間,且基于上述從CPU核的當前時間和上述當前的基準時間,完成與主CPU核的時間同步。
[0027]本發(fā)明實施例中,主CPU核創(chuàng)建乒乓緩存,并將上述乒乓緩存的地址發(fā)送給從CPU核;主CPU核在設定的定時器超時時,更新上述乒乓緩存中的參數(shù);其中,上述參數(shù)至少包括乒乓緩存的標記位、乒乓緩存的索引值和當前的基準時間;從CPU核獲取主CPU核發(fā)送的上述乒乓緩存的地址,以及在確定要獲取當前時間時,獲取上述乒乓緩存中保存的當前的基準時間;從CHJ核讀取上述定時器的時間偏移值,以及基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間,且基于上述從CPU核的當前時間和上述當前的基準時間,完成與主CPU核的時間同步。這樣,利用創(chuàng)建的乒乓緩存和定時器,實現(xiàn)每一個CPU核的時間同步,且獲取的時間精度高;并且,不再使用鎖功能,不會影響系統(tǒng)的性能。
[0028]較佳的,上述設定的定時器為單次觸發(fā)one_shot模式的定時器。
[0029]較佳的,在設定的定時器超時時,更新上述乒乓緩存中的參數(shù)時,主CPU核具體用于:
[0030]確定乒乓緩存中當前使用的乒乓緩存塊,以及將當前使用的乒乓緩存塊的標記位設置為正在使用IN_USE,將當前未使用的乒乓緩存塊的標記位設置為未使用UNJJSE;其中,上述乒乓緩存包括兩個乒乓緩存塊;
[0031]將獲取的當前的基準時間寫入當前使用的乒乓緩存塊中,且設置每一個乒乓緩存塊的索引值并重新啟動定時器。
[0032]較佳的,在確定要獲取當前時間時,獲取上述乒乓緩存中的當前的基準時間,從CHJ核具體用于:
[0033]獲取乒乓緩存中乒乓緩存塊的索引值,并基于上述索引值,獲取對應的乒乓緩存塊的標記位;
[0034]判斷上述標記位是否為IN_USE,以及在確定標記位為IN_USE時,獲取上述對應的乒乓緩存塊中保存的當前的基準時間。
[0035]較佳的,基于上述時間偏移值和上述當前的基準時間,計算獲得從CPU核的當前時間時,從CPU核具體用于:
[0036]判斷上述時間偏移值是否為O;
[0037]若為O,則計算上述當前的基準時間和預設的定時器的定時時間之和,作為從CPU核的當前時間;
[0038]若不為O,則計算上述時間偏移值和上述當前的基準時間之和,作為從CPU核的當前時間。
【附圖說明】
[0039]圖1為本發(fā)明實施例中時間同步方法概述流程圖;
[0040]圖2為本發(fā)明實施例中時間同步方法詳細流程圖;
[0041]圖3為本發(fā)明實施例中時間同步裝置結構示意圖。
【具體實施方式】
[0042]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,并不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0043]為了實現(xiàn)了多核間的時間同步,使得問題定位更加準確方便,本發(fā)明實施例中,主CPU核創(chuàng)建乒乓緩存,并將乒乓緩存地址發(fā)送給從CPU核,然后主CPU核就可以將獲得的當前的基準時間寫入到乒乓緩存中,當從CPU核需要獲取當前時間時,從乒乓緩存中獲取當前的基準時間,且讀取設定的定時器的時間偏移值,這樣,從CPU核根據(jù)定時器的時間偏移值和獲取的當前的基準時間,計算獲得從CHJ核的當前時間,這樣就實現(xiàn)了主CPU核和從CPU核的時間同步。
[0044]下面通過具體實施例對本發(fā)明方案進行詳細描述,當然,本發(fā)明并不限于以下實施例。
[0045]本發(fā)明實施例,針對于多核系統(tǒng),在多核系統(tǒng)中包括有一個主CPU核和多個從CPU核,當需要知道在某一時刻多個CHJ核的行為時,那么就需要主CPU核在共享內存中提供一個基準時間,從CPU核都根據(jù)這個基準時間,來計算自身當前的時間,這樣,就可以實現(xiàn)所有CPU核的時間同步。但是,目前是利用核間鎖技術來使用共享內存的,當一個從C