關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 事務(wù)存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)

事務(wù)存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)

作者: 時(shí)間:2012-06-04 來源:網(wǎng)絡(luò) 收藏

1 引言

本文引用地址:http://butianyuan.cn/article/202295.htm

隨著多核處理器技術(shù)的不斷更新和發(fā)展,傳統(tǒng)的串行程序不論在效率上還是性能上都已經(jīng)跟不上信息高速發(fā)展的腳步了,程序員不得不開發(fā)線程級(jí)并行以提高片上計(jì)算資源的使用效率,但也帶來了新的挑戰(zhàn)和問題。目前不同線程間的同步、對(duì)共享資源的訪問等都是通過鎖和信號(hào)量機(jī)制完成的。然而,這種傳統(tǒng)的基于鎖和信號(hào)量的并發(fā)系統(tǒng)存在明顯的局限性。粗粒度的鎖對(duì)大量的共享數(shù)據(jù)做了保護(hù),但是可擴(kuò)展性不好,因?yàn)榧词乖诰€程間不存在對(duì)共享數(shù)據(jù)的訪問的情況下也可能會(huì)出現(xiàn)沖突阻塞現(xiàn)象;細(xì)粒度的鎖雖然比粗粒度的鎖擴(kuò)展性能好,但由于算法設(shè)計(jì)的復(fù)雜性,普通程序員很難借助細(xì)力度的鎖實(shí)現(xiàn)高效的應(yīng)用。同時(shí)使用鎖機(jī)制還會(huì)帶來諸多問題,比如:死鎖、優(yōu)先級(jí)反轉(zhuǎn)等,極大地影響了并行應(yīng)用的效率和性能。

事務(wù)存儲(chǔ)(Transactional Memory,TM)的使用是解決上述存在問題一個(gè)很好的辦法[1]。通過將不同并行執(zhí)行的線程事務(wù)化,用事務(wù)操作來代替鎖機(jī)制能降低編程的復(fù)雜性。事務(wù)是被單線程執(zhí)行的對(duì)內(nèi)存進(jìn)行讀寫的有序操作序列,其特性包括:原子性、隔離性、一致性和持久性。通常事務(wù)的執(zhí)行過程為:調(diào)用事務(wù)入口函數(shù)(begin_transaction)開始執(zhí)行事務(wù),當(dāng)事務(wù)執(zhí)行完畢后調(diào)用提交函數(shù)(commit_transaction)開始提交工作,提交過程分為三個(gè)階段(請(qǐng)求提交、開始提交和完成提交),執(zhí)行完提交后此事務(wù)也就執(zhí)行完畢,從而繼續(xù)執(zhí)行下面的事務(wù)。但如果事務(wù)在執(zhí)行或提交過程中發(fā)生沖突或者錯(cuò)誤,則通過其特有的回滾機(jī)制 (rollback)返回到此事務(wù)入口繼續(xù)執(zhí)行。事務(wù)的執(zhí)行流程圖如圖 1所示。

圖 1 事務(wù)執(zhí)行流程

為了實(shí)現(xiàn)事務(wù)的這些特性,需有一個(gè)很好的TM系統(tǒng)來支持事務(wù)數(shù)據(jù)的版本管理(Version Management)和事務(wù)的沖突管理(Contention Management)。版本管理同時(shí)對(duì)新值(事務(wù)提交后可見)和原始的舊值(事務(wù)執(zhí)行過程中發(fā)生了回滾的恢復(fù)數(shù)據(jù))進(jìn)行管理。根據(jù)數(shù)據(jù)存放方式的不同TM系統(tǒng)區(qū)分版本管理為:積極版本管理(Eager Version Management)和懶惰版本管理(Lazy Version Management)。積極版本管理是將新值置于目標(biāo)存儲(chǔ)區(qū)中,這樣在提交時(shí)新值能夠很快的得到執(zhí)行,極大地降低了提交的時(shí)延;而懶惰版本管理是將原始的舊值置于目標(biāo)存儲(chǔ)區(qū),雖然會(huì)增加提交的延時(shí)但是降低了當(dāng)事務(wù)發(fā)生回滾后執(zhí)行的延時(shí)。沖突管理是不同事務(wù)執(zhí)行過程中對(duì)共享資源訪問引發(fā)沖突而進(jìn)行的沖突檢測(cè)以及管理的機(jī)制。沖突管理有積極的(Eager)和懶惰的(Lazy)兩種策略,如果沖突在讀數(shù)據(jù)或?qū)憯?shù)據(jù)時(shí)立刻被發(fā)現(xiàn)而進(jìn)行仲裁,這種沖突檢測(cè)是積極的;如果沖突是在事務(wù)進(jìn)行提交時(shí)才發(fā)現(xiàn)并仲裁的,這種沖突檢測(cè)則是懶惰的。

目前,基于TM的硬件結(jié)構(gòu)有很多種,圖2中列出了目前幾種流行的硬件結(jié)構(gòu)根據(jù)版本管理和沖突管理而進(jìn)行的分類。本文將介紹其中的一種結(jié)構(gòu)——LogTM(日志事務(wù)存儲(chǔ)),通過對(duì)其硬件結(jié)構(gòu)(參見圖3)、版本管理、沖突管理的實(shí)現(xiàn),展現(xiàn)了此結(jié)構(gòu)的優(yōu)越性,并給后續(xù)研究提供參考和幫助。

圖2 TM系統(tǒng)分類

2 LogTM的結(jié)構(gòu)

LogTM是建立在多機(jī)系統(tǒng)中基于日志的TM實(shí)現(xiàn),每個(gè)核都有獨(dú)自的私有cache,并通過目錄協(xié)議來維持?jǐn)?shù)據(jù)的一致性。它采用的是積極的版本管理策略和積極的沖突管理策略。圖3給出了LogTM的硬件結(jié)構(gòu),它通過增加一些寄存器和cache中的讀/寫位很好地完成了對(duì)事務(wù)的操作。

1.jpg

圖3 LogTM的硬件結(jié)構(gòu) (圖中黑框中為其特有結(jié)構(gòu))

2.1 版本管理(Version Management)

LogTM使用積極的版本管理,將新的執(zhí)行數(shù)據(jù)存儲(chǔ)在目標(biāo)區(qū)域(目標(biāo)地址)中,而將舊的數(shù)據(jù)存儲(chǔ)在其它緩沖區(qū)。它通過在內(nèi)存中開辟一塊事務(wù)日志區(qū)域存儲(chǔ)事務(wù)執(zhí)行過程中被修改的數(shù)據(jù)(上文中提到的原始數(shù)據(jù))和這些數(shù)據(jù)所對(duì)應(yīng)的地址,新的執(zhí)行數(shù)據(jù)則被保存在目標(biāo)存儲(chǔ)區(qū)(目標(biāo)地址),當(dāng)執(zhí)行完成提交時(shí),這些新數(shù)據(jù)將會(huì)立即生效;當(dāng)事務(wù)執(zhí)行過程中或提交時(shí)發(fā)生沖突或錯(cuò)誤需要回滾時(shí),則通過事務(wù)日志中記錄的信息恢復(fù)出事務(wù)執(zhí)行前的初始狀態(tài)。

剛開始創(chuàng)建線程時(shí),每一個(gè)線程對(duì)應(yīng)著一個(gè)日志而且為日志分配一塊虛擬存儲(chǔ)區(qū)域,并將該日志基地址寫入Log Base寄存器,當(dāng)舊數(shù)據(jù)需要存儲(chǔ)到日志時(shí),LogTM通過Log Base寄存器中的值定位到日志的入口然后將舊數(shù)據(jù)的虛擬地址和值一同保存在日志中以便恢復(fù)時(shí)使用。為了減少冗余日志,LogTM為每一個(gè)cache塊添加了對(duì)應(yīng)的寫(W)位,用此來標(biāo)識(shí)該cache塊在日志中的記錄情況。當(dāng)事務(wù)提交成功后,LogTM將對(duì)應(yīng)cache塊的寫(W)標(biāo)志位清0并將Log Pointer(日志指針)重新指向日志的入口處,以便處理后續(xù)事務(wù)。

LogTM也為每個(gè)cache塊設(shè)置了一個(gè)讀(R)標(biāo)志位,就像上面我們討論的寫(W)標(biāo)志位一樣。在每個(gè)事務(wù)操作過程中LogTM同樣將讀標(biāo)志位設(shè)置用于表示讀操作的執(zhí)行(如圖4所示),而且在事務(wù)結(jié)束后,讀標(biāo)志位也清0。

這種積極的版本管理模式的缺點(diǎn)就是在事務(wù)發(fā)生沖突或錯(cuò)誤需要回滾時(shí)執(zhí)行比較慢,在回滾時(shí),LogTM為了完成恢復(fù)必須將原始數(shù)據(jù)從日志中讀到合適的目標(biāo)地址中然后重置寫(W)位,同時(shí)因?yàn)橛泻芏鄶?shù)據(jù)記錄在日志中,所以恢復(fù)過程必須按照由后向前(后進(jìn)先出)的順序進(jìn)行。但在事務(wù)沖突比較少的情況下,這種模式能夠帶來高效的執(zhí)行效率。

為了能更好的理解LogTM版本管理過程,圖4通過一個(gè)例子進(jìn)行了很好的分析。

(1)事務(wù)執(zhí)行開始前的狀態(tài)——cache數(shù)據(jù)塊中存放著原始數(shù)據(jù),每塊的讀(R)、寫(W)位置0,LogBase(日志基址寄存器)指向日志入口地址,LogPtr(日志偏移指針)指向日志入口地址同時(shí)TMcount(事務(wù)計(jì)數(shù)器)置1代表正準(zhǔn)備執(zhí)行一個(gè)事務(wù)。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 存儲(chǔ)結(jié)構(gòu)

評(píng)論


技術(shù)專區(qū)

關(guān)閉