2016年紐約QCon上,Gil Tene在其演講“了解硬件事務內存”中介紹了硬件事務內存(hardware transactional memory,HTM)。雖然HTM概念不是新的,現在終于有商業硬件支持了。HTM的目的是能夠支持在內存中原子的進行多地址寫入,以避免與其他合作線程產生不一致的情況。
Tene首先從解釋內存緩存的四個狀態開始:
無效 共享 排他 修改同時他指出,考慮到硬件事務內存,還有兩個額外的狀態:
緩存行在操作中被讀取 緩存行在操作中被修改如果發送下列情況,事務必須被終止:其他CPU希望寫入數據、讀取已經被修改的數據和CPU希望失效其緩存。
根據Tene說法,硬件事務內存最大優勢是擺脫串行塊。最終目的是完全并行執行,并且僅在實際訪問數據產生實際沖突時進行回滾。這和阿姆達爾定律有關,即當CPU核數越多,對運行速度的實際提升越少。如果應用程序中有10%的串行代碼,10核CPU最多只能提速5倍。要實際達到提速10倍,可能需要使用將近100核CPU。
Tene然后介紹了鎖競爭和數據競爭。例如當處理大型散列集合時,可能在讀寫完全不同的區域,但是整個散列集合都需要被加鎖。通常鎖競爭影響范圍會比數據競爭大很多,但是只有數據競爭才會影響CPU的并行工作。因此,僅僅終止產生數據競爭的事務,可以徹底降低阿姆達爾定律影響,加速并行運算。
對于Java同步塊,Tene解釋了沒有競爭的代碼庫可以和之前運行的速度相同。僅當發生實際數據沖突的地方,將會產生事務回滾,并且讓代碼并行的重新運行。對于Java應用程序,一旦Java虛擬機使用HTM,該過程是完全透明的,代碼上不需要做任何修改。這在Hotspot 8 Java虛擬機的40更新之后實現。Tene頁展示了簡單的基準測試數據,可視化的展示了硬件事務內存的效果:即使散列集合中又5%的寫比例,在增加更多CPU時,性能也能線性增加。
Gil Tene總結指出雖然對于開發者來說HTM使用是透明的,他們還是需要開始考慮應用程序中的數據競爭。多線程不應該修改一個變量,因為這樣會導致數據競爭,并因HTM的優勢無法被利用而無法提高運行速度。
請注意大部分QCon演講材料會在會議結束后的幾周后免費提供,演示文檔可以在大會網站進行下載。同時,您也可以在InfoQ網站上觀看關于這一主題對Gil Tene進行的采訪。
查看英文原文:Gil Tene: Understanding Hardware Transactional Memory