本發明屬于計算機指令轉換及多核系統,具體涉及一種基于指令流特征識別的指令轉換訪存沖突優化方法。
背景技術:
1、當arm眾核系統以動態指令轉換的方式執行x86程序時,多個arm計算核心會同時訪問內存,此時容易產生內存訪問沖突,進而使arm眾核系統性能下降。現有的訪存沖突解決方式難以有效應對復雜的內存訪問情況,將導致內存訪問延遲顯著增加,arm眾核系統整體性能無法達到預期。
技術實現思路
1、有鑒于此,本發明提供了一種基于指令流特征識別的指令轉換訪存沖突優化方法,采用指令流分析實現了共享內存的特征識別完成了x86指令到arm指令動態轉換。
2、本發明提供的一種基于指令流特征識別的指令轉換訪存沖突優化方法,具體包括以下步驟:
3、步驟1、在arm眾核系統中以動態指令轉換方式預執行可執行文件,采用指令流分析確定x86系統調用相關的第一x86指令序列,解析第一x86指令序列轉換得到的第一arm指令序列確定進程間的共享內存形成第一共享內存列表;
4、步驟2、以動態指令轉換方式加載執行可執行文件,若當前待轉換指令為訪存指令且內存地址位于第一共享內存列表中,則將當前待轉換指令轉換為由加鎖指令序列、第二arm指令序列及解鎖指令序列構成的指令序列,并在當前待轉換指令為讀操作時執行步驟3,在為寫操作時執行步驟4;否則執行步驟5;
5、步驟3、若當前計算核心對應緩存行為無效態,則向總線發送讀請求讀取數據并在讀取完成后將緩存行的狀態設置為共享態或獨占態;若為共享態或獨占態,則從緩存行讀取數據;再執行步驟5;
6、步驟4、若當前計算核心對應緩存行為獨占態,則修改緩存行中的數據并將其設置為修改態;若為共享態,則向其它計算核心發送使無效消息,待響應確認后將其設置為修改態,再執行寫操作;若為無效態,則向總線發出讀-獨占請求,并在獲取數據后將其設置為修改態,再執行寫操作;若為修改態,則執行寫操作;
7、步驟5、若可執行文件未完成執行則執行步驟2,否則結束本流程。
8、進一步地,所述步驟1中所述采用指令流分析確定x86系統調用相關的第一x86指令序列的方式為:采用指令流分析識別出共享內存相關x86系統調用的系統調用號后,由包含系統調用號的指令到軟中斷觸發指令形成第一x86指令序列。
9、進一步地,所述步驟1中所述解析第一x86指令序列轉換得到的第一arm指令序列確定進程間的共享內存形成第一共享內存列表的方式為:
10、若第一arm指令序列中包含創建或獲取共享內存段的系統調用,則在第一arm指令序列之后增加保存共享內存鍵值的arm指令a;若第一arm指令序列中包含將共享內存段附加到調用進程的地址空間的系統調用,則在第一arm指令序列之后增加保存共享內存地址的arm指令b;獲取當前進程的進程id、共享內存鍵值及共享內存地址,由共享內存鍵值、共享內存地址及創建共享內存的進程id形成共享內存列表,將該共享內存列表作為第一共享內存列表。
11、進一步地,遍歷所述共享內存列表中的進程id作為目標進程,獲取目標進程的所有共享內存頁的頁表項,記為原始頁表項;解除上述共享內存頁到物理內存頁的映射關系,再將原始頁表項的信息保存到目標進程的頁表中,將觸發缺頁異常且異常地址屬于共享內存列表的共享內存地址保存到第一共享內存列表中。
12、進一步地,所述步驟2中所述加鎖指令序列由設置鎖變量的指令、加載獨占字節的原子操作ldrexb及存儲獨占字節的原子操作strexb構成。
13、進一步地,所述步驟2中所述解鎖指令序列由修改鎖變量的指令構成。
14、進一步地,所述步驟2中所述第二arm指令序列由與當前待轉換指令功能相同的arm指令以及其他訪存相關指令構成。
15、進一步地,所述步驟3中所述向總線發送讀請求讀取數據的方式為從其它計算核心的緩存行或內存中讀取數據。
16、進一步地,所述步驟1中所述x86系統調用包括:shmget、shmat、shmdt及shmctl。
17、有益效果
18、本發明在arm眾核系統中以動態指令轉換方式對可執行文件預執行的過程中,采用指令流分析確定進程間的共享內存形成第一共享內存列表,在此基礎上,再次加載執行可執行文件,對于內存地址位于第一共享內存列表中的訪存類待轉換指令,將其轉換為由加鎖指令序列、第二arm指令序列及解鎖指令序列構成的指令序列,同時基于緩存一致性協議完成了可執行文件的轉換執行,顯著減少了x86程序在arm眾核系統上的內存訪問沖突,為實現高性能的動態指令轉換提供了有力的支持。
1.一種基于指令流特征識別的指令轉換訪存沖突優化方法,其特征在于,具體包括以下步驟:
2.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟1中所述采用指令流分析確定x86系統調用相關的第一x86指令序列的方式為:采用指令流分析識別出共享內存相關x86系統調用的系統調用號后,由包含系統調用號的指令到軟中斷觸發指令形成第一x86指令序列。
3.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟1中所述解析第一x86指令序列轉換得到的第一arm指令序列確定進程間的共享內存形成第一共享內存列表的方式為:
4.根據權利要求3所述的指令轉換訪存沖突優化方法,其特征在于,遍歷所述共享內存列表中的進程id作為目標進程,獲取目標進程的所有共享內存頁的頁表項,記為原始頁表項;解除上述共享內存頁到物理內存頁的映射關系,再將原始頁表項的信息保存到目標進程的頁表中,將觸發缺頁異常且異常地址屬于共享內存列表的共享內存地址保存到第一共享內存列表中。
5.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟2中所述加鎖指令序列由設置鎖變量的指令、加載獨占字節的原子操作ldrexb及存儲獨占字節的原子操作strexb構成。
6.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟2中所述解鎖指令序列由修改鎖變量的指令構成。
7.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟2中所述第二arm指令序列由與當前待轉換指令功能相同的arm指令以及其他訪存相關指令構成。
8.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟3中所述向總線發送讀請求讀取數據的方式為從其他計算核心的緩存行或內存中讀取數據。
9.根據權利要求1所述的指令轉換訪存沖突優化方法,其特征在于,所述步驟1中所述x86系統調用包括:shmget、shmat、shmdt及shmctl。