• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于滑動(dòng)窗口的多核程序數(shù)據(jù)競(jìng)爭(zhēng)硬件檢測(cè)算法

    2016-11-24 06:58:40朱素霞陳德運(yùn)季振洲孫廣路
    通信學(xué)報(bào) 2016年9期
    關(guān)鍵詞:線程內(nèi)存滑動(dòng)

    朱素霞,陳德運(yùn),季振洲,孫廣路

    (1. 哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150080;2. 哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院博士后流動(dòng)站,黑龍江 哈爾濱 150080;3. 哈爾濱工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150001)

    基于滑動(dòng)窗口的多核程序數(shù)據(jù)競(jìng)爭(zhēng)硬件檢測(cè)算法

    朱素霞1,2,陳德運(yùn)1,2,季振洲3,孫廣路1

    (1. 哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150080;2. 哈爾濱理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院博士后流動(dòng)站,黑龍江 哈爾濱 150080;3. 哈爾濱工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150001)

    數(shù)據(jù)競(jìng)爭(zhēng)是引起多核程序發(fā)生并發(fā)錯(cuò)誤的主要原因。針對(duì)現(xiàn)有基于硬件的happens-before數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法硬件開銷大的問題,提出了一種輕量級(jí)的內(nèi)存競(jìng)爭(zhēng)硬件檢測(cè)算法,該算法利用滑動(dòng)窗口技術(shù)動(dòng)態(tài)檢測(cè)程序執(zhí)行過程中發(fā)生的距離較近、更易引發(fā)并發(fā)錯(cuò)誤的數(shù)據(jù)競(jìng)爭(zhēng)??紤]競(jìng)爭(zhēng)距離的大小,將并發(fā)線程片段細(xì)分為加鎖并發(fā)競(jìng)爭(zhēng)域和包含線程近期執(zhí)行序列的未加鎖并發(fā)競(jìng)爭(zhēng)域,用一對(duì)交替移動(dòng)的可重寫滑動(dòng)窗口保存未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作指令,用一個(gè)大小可變的可重寫滑動(dòng)窗口保存加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作指令,當(dāng)來自遠(yuǎn)程的共享訪問與窗口內(nèi)的內(nèi)存訪問發(fā)生沖突時(shí),檢測(cè)到數(shù)據(jù)競(jìng)爭(zhēng)。在硬件實(shí)現(xiàn)結(jié)構(gòu)中,僅為每個(gè)處理器核添加3對(duì)較小尺寸的硬件簽名寄存器來保存并發(fā)競(jìng)爭(zhēng)域內(nèi)的數(shù)據(jù)地址,無需更改原有的cache一致性協(xié)議,帶來的帶寬開銷低,能夠快速地檢測(cè)多核程序并發(fā)執(zhí)行過程中發(fā)生的動(dòng)態(tài)數(shù)據(jù)競(jìng)爭(zhēng),為多核程序開發(fā)和生產(chǎn)運(yùn)行階段的并發(fā)錯(cuò)誤診斷提供有效的指導(dǎo)信息。

    數(shù)據(jù)競(jìng)爭(zhēng);滑動(dòng)窗口;硬件簽名;并發(fā)錯(cuò)誤;多核程序

    1 引言

    隨著多核處理器的廣泛應(yīng)用,多核編程也變得越來越普遍。然而,多核程序執(zhí)行時(shí)因?yàn)榫€程間共享內(nèi)存訪問交互順序的不確定性,導(dǎo)致并發(fā)錯(cuò)誤頻現(xiàn),限制了多核程序的應(yīng)用。多核程序運(yùn)行時(shí),當(dāng)2個(gè)或多個(gè)線程并發(fā)訪問同一個(gè)共享變量,沒有采取正確的同步措施,并且至少有一個(gè)是寫操作時(shí),就可能引起數(shù)據(jù)競(jìng)爭(zhēng)。數(shù)據(jù)競(jìng)爭(zhēng)是一種常見的并發(fā)錯(cuò)誤,檢測(cè)數(shù)據(jù)競(jìng)爭(zhēng)是多核程序開發(fā)、調(diào)試和診斷的重要手段,也是多核程序生產(chǎn)運(yùn)行階段的重要分析手段。因此,研究者們提出了一系列的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法,有軟件實(shí)現(xiàn)的[1~7],有硬件實(shí)現(xiàn)的[8~13],也有軟硬結(jié)合的[14~16],甚至還出現(xiàn)了商用的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)工具[17]。本文針對(duì)基于硬件的數(shù)據(jù)競(jìng)爭(zhēng)動(dòng)態(tài)檢測(cè)方法展開研究。

    通常有2大類方法來檢測(cè)數(shù)據(jù)競(jìng)爭(zhēng),一種是基于鎖集合的,如文獻(xiàn)[1];一種是基于happens-before關(guān)系的,如文獻(xiàn)[17]?;阪i集合的方法是依據(jù)所有訪問同一個(gè)共享變量應(yīng)該使用相同鎖的思想,跟蹤訪問共享變量的鎖集合,當(dāng)2個(gè)訪問同一個(gè)共享變量使用的鎖集合的交集為空時(shí),則認(rèn)為存在數(shù)據(jù)競(jìng)爭(zhēng)。Happens-before方法基于線程片段,每個(gè)處理器核使用一個(gè)邏輯時(shí)鐘來標(biāo)記當(dāng)前正在執(zhí)行的線程片段,此外每個(gè)變量都有一個(gè)時(shí)戳記錄它在處理器訪問的哪個(gè)片段中,當(dāng)另一個(gè)處理器訪問這個(gè)變量時(shí),將變量的時(shí)戳同自身的時(shí)鐘進(jìn)行比較,來決定這 2個(gè)相應(yīng)的片段是否存在邏輯上的happens-before關(guān)系,還是存在邏輯上的重疊,如果存在邏輯上的重疊,則認(rèn)為存在競(jìng)爭(zhēng)。

    軟件實(shí)現(xiàn)的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法通常會(huì)以 10~200倍降低程序運(yùn)行的速度[10],如此降速會(huì)影響程序運(yùn)行的順序或競(jìng)爭(zhēng)發(fā)生的時(shí)間,使生產(chǎn)運(yùn)行時(shí)出現(xiàn)的數(shù)據(jù)競(jìng)爭(zhēng)更是難以發(fā)現(xiàn)。因此,有研究者提出了基于硬件的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法?;谟布臋z測(cè)方法對(duì)程序的性能影響較小,對(duì)發(fā)現(xiàn)程序生產(chǎn)運(yùn)行時(shí)的數(shù)據(jù)競(jìng)爭(zhēng)比較有效,然而它們往往添加較多的硬件資源。比如文獻(xiàn)[8]需要為cache塊添加額外的時(shí)戳或鎖信息,文獻(xiàn)[9]改變cache一致性協(xié)議狀態(tài)機(jī),文獻(xiàn)[10]采用了基于硬件簽名的方式實(shí)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)的檢測(cè),但需要添加簽名隊(duì)列,硬件開銷仍然過大,并且采用代價(jià)較高的回滾機(jī)制來定位競(jìng)爭(zhēng)的位置。而且,大多數(shù)基于鎖集合和 happens-before的硬件檢測(cè)方法需要在現(xiàn)有的cache一致性協(xié)議基礎(chǔ)之上添加新的消息。然而,cache和一致性協(xié)議部件都是處理器的關(guān)鍵部件,如果需要增加過多硬件資源或更改cache,需要重新評(píng)估其對(duì)處理器性能的影響,不利于應(yīng)用到實(shí)際中。雖然近期也有研究者提出的其他類型的數(shù)據(jù)競(jìng)爭(zhēng)硬件檢測(cè)方法硬件的開銷較小[11~13],但均只能檢測(cè)某特定類型的數(shù)據(jù)競(jìng)爭(zhēng)。

    本文針對(duì)現(xiàn)有基于happens-before數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法硬件開銷大的問題,鑒于線程的并發(fā)執(zhí)行是導(dǎo)致競(jìng)爭(zhēng)發(fā)生的主要原因,結(jié)合競(jìng)爭(zhēng)距離大小,將并發(fā)的線程片段細(xì)分為加鎖并發(fā)競(jìng)爭(zhēng)域和未加鎖并發(fā)競(jìng)爭(zhēng)域,提出了一種輕量級(jí)的動(dòng)態(tài)數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法。該方法基于在線數(shù)據(jù)流處理中常用的滑動(dòng)窗口技術(shù),保存線程近期執(zhí)行的內(nèi)存操作指令序列,動(dòng)態(tài)地檢測(cè)競(jìng)爭(zhēng)距離較近的、更易引發(fā)并發(fā)錯(cuò)誤的數(shù)據(jù)競(jìng)爭(zhēng)。該方法無需更改cache和一致性協(xié)議機(jī)構(gòu),僅添加少量的硬件簽名寄存器,帶來的帶寬開銷小。

    本文的研究針對(duì)采用鎖同步方式的多核程序展開。

    2 研究動(dòng)機(jī)

    數(shù)據(jù)競(jìng)爭(zhēng)的檢測(cè)是NP困難問題,已往的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法大多旨在檢測(cè)盡可能多的數(shù)據(jù)競(jìng)爭(zhēng)。然而,現(xiàn)實(shí)情況存在以下問題。

    1) happens-before算法代價(jià)昂貴

    基于happens-before的內(nèi)存競(jìng)爭(zhēng)檢測(cè)方法需要考慮所有的同步操作,還需要使用向量時(shí)鐘對(duì)不同線程中的內(nèi)存訪問進(jìn)行標(biāo)記和排序,無論是已有的軟件實(shí)現(xiàn)方法還是硬件實(shí)現(xiàn)方法,都在內(nèi)存或硬件開銷方面付出了較大代價(jià)。

    2) 數(shù)據(jù)競(jìng)爭(zhēng)是否會(huì)引起并發(fā)錯(cuò)誤受距離影響

    數(shù)據(jù)競(jìng)爭(zhēng)是引發(fā)并發(fā)錯(cuò)誤的主要原因,但并不是所有的數(shù)據(jù)競(jìng)爭(zhēng)都會(huì)引發(fā)并發(fā)錯(cuò)誤,尤其是那些競(jìng)爭(zhēng)雙方距離較遠(yuǎn)的數(shù)據(jù)競(jìng)爭(zhēng)。因?yàn)榫嚯x較遠(yuǎn)的數(shù)據(jù)競(jìng)爭(zhēng)執(zhí)行順序發(fā)生反轉(zhuǎn)的概率小,從而引發(fā)錯(cuò)誤的可能性就小[10]。如圖1(a)所示,線程j訪問共享變量x后,線程i過了很久才訪問x,這2個(gè)訪問在時(shí)間上相隔很遠(yuǎn),雖然線程j未添加同步操作,但該數(shù)據(jù)競(jìng)爭(zhēng)執(zhí)行順序發(fā)生反轉(zhuǎn)是一個(gè)小概率事件,引起錯(cuò)誤的概率小,在一定條件下,可以不予以檢測(cè)。

    3) 糾正錯(cuò)誤不一定要檢測(cè)出所有的數(shù)據(jù)競(jìng)爭(zhēng)

    檢測(cè)數(shù)據(jù)競(jìng)爭(zhēng)可以有效地幫助多核程序的診斷和調(diào)試,然而,有時(shí)一個(gè)同步操作的錯(cuò)誤使用或漏掉,可能會(huì)引發(fā)多個(gè)數(shù)據(jù)競(jìng)爭(zhēng),但只要檢測(cè)出其中的部分競(jìng)爭(zhēng),就可以幫助用戶找出同步錯(cuò)誤的所在,從而修正程序。如圖1(b)所示,因線程j漏掉了一個(gè)同步操作,會(huì)引發(fā)①和②共2個(gè)數(shù)據(jù)競(jìng)爭(zhēng),而只要檢測(cè)到①這一個(gè)數(shù)據(jù)競(jìng)爭(zhēng)就可以修復(fù)程序。

    圖1 數(shù)據(jù)競(jìng)爭(zhēng)示意

    鑒于以上3點(diǎn)的分析,為了減小基于happensbefore的硬件數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法帶來的硬件開銷,進(jìn)一步降低檢測(cè)算法的復(fù)雜度,并且能給用戶或程序員提供診斷信息,尤其是提供生產(chǎn)運(yùn)行階段的診斷信息,本文提出了一種輕量級(jí)的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法。該方法引入并發(fā)競(jìng)爭(zhēng)域,用滑動(dòng)窗口保存線程近期執(zhí)行的內(nèi)存操作,能夠檢測(cè)打斷臨界區(qū)操作的數(shù)據(jù)競(jìng)爭(zhēng)和其他距離較近的數(shù)據(jù)競(jìng)爭(zhēng),對(duì)于距離較遠(yuǎn)、不易引起并發(fā)錯(cuò)誤的數(shù)據(jù)競(jìng)爭(zhēng)不予檢測(cè)。

    3 競(jìng)爭(zhēng)距離

    距離較遠(yuǎn)的數(shù)據(jù)競(jìng)爭(zhēng)因其執(zhí)行順序發(fā)生反轉(zhuǎn)的概率小,引起錯(cuò)誤的可能性小,因此,在進(jìn)行數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)時(shí),可以更多地關(guān)注距離較近的數(shù)據(jù)競(jìng)爭(zhēng),從而為檢測(cè)并發(fā)錯(cuò)誤提供更加有效的診斷信息。為了描述數(shù)據(jù)競(jìng)爭(zhēng)雙方間的距離大小,本文提出競(jìng)爭(zhēng)距離(race distance),并約定競(jìng)爭(zhēng)距離表示:數(shù)據(jù)競(jìng)爭(zhēng)的后發(fā)生方執(zhí)行時(shí),數(shù)據(jù)競(jìng)爭(zhēng)的先發(fā)生方所在線程在執(zhí)行完先發(fā)生方后又執(zhí)行的內(nèi)存操作指令數(shù)。如圖2所示,圓圈表示內(nèi)存操作,線程i、j間存在數(shù)據(jù)競(jìng)爭(zhēng)在線程j執(zhí)行先發(fā)生方rd(x)后,直到線程i執(zhí)行后發(fā)生方wr(x)時(shí),線程j又執(zhí)行了3條內(nèi)存操作指令,稱該數(shù)據(jù)競(jìng)爭(zhēng)的競(jìng)爭(zhēng)距離(rl)為3。

    圖2 競(jìng)爭(zhēng)距離

    針對(duì)競(jìng)爭(zhēng)距離在多大的情況下,數(shù)據(jù)競(jìng)爭(zhēng)執(zhí)行順序發(fā)生反轉(zhuǎn)的概率小,可以不需要檢測(cè)的問題,本文對(duì)競(jìng)爭(zhēng)距離和臨界區(qū)的關(guān)系及其大小進(jìn)行了分析和測(cè)試。通常情況下,若有共享變量訪問,為避免發(fā)生競(jìng)爭(zhēng)需要為其添加加鎖和解鎖操作。而且,臨界區(qū)不應(yīng)太大,因?yàn)榕R界區(qū)太大會(huì)降低程序的性能,這不是一種良好的編程習(xí)慣。如果某線程執(zhí)行完加解鎖操作合圍的臨界區(qū)后,其他線程再來訪問由該臨界區(qū)保護(hù)的共享變量就不會(huì)引起競(jìng)爭(zhēng),否則很可能會(huì)引起競(jìng)爭(zhēng)。同理,如果漏掉加解鎖操作,則在其原本應(yīng)該有的臨界區(qū)范圍內(nèi)有遠(yuǎn)程訪問就可能會(huì)引發(fā)數(shù)據(jù)競(jìng)爭(zhēng),超出臨界區(qū)范圍則不會(huì)引起競(jìng)爭(zhēng)。鑒于以上分析,可以發(fā)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)與臨界區(qū)的大小有一定關(guān)系:如果競(jìng)爭(zhēng)距離大于臨界區(qū),則發(fā)生數(shù)據(jù)競(jìng)爭(zhēng)的可能性就變小。因此,競(jìng)爭(zhēng)距離可以依據(jù)臨界區(qū)的大小為依據(jù)來設(shè)定。本文對(duì)測(cè)試負(fù)載進(jìn)行了臨界區(qū)大小統(tǒng)計(jì),詳見7.1節(jié),并給出了本方案中合理的競(jìng)爭(zhēng)距離范圍。

    4 并發(fā)競(jìng)爭(zhēng)域

    基于 happens-before的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法通常將線程的執(zhí)行序列依據(jù)同步操作劃分為一個(gè)個(gè)的線程片段,通過比較向量時(shí)戳,可以找到不存在happens-before關(guān)系、可能并發(fā)執(zhí)行的線程片段,如圖3(中括號(hào)內(nèi)給出了線程片段的向量時(shí)戳)所示的Si1和 Sj1、Si2和 Sj1、Si3和 Sj1、Si3和 Sj2、Si3和 Sj3均不存在happens-before關(guān)系,在程序執(zhí)行過程中可能會(huì)發(fā)生數(shù)據(jù)競(jìng)爭(zhēng)。因此,可以通過監(jiān)測(cè)程序執(zhí)行過程中并發(fā)執(zhí)行的線程片段來監(jiān)測(cè)動(dòng)態(tài)的數(shù)據(jù)競(jìng)爭(zhēng)。如圖3所示的執(zhí)行順序中,并發(fā)的線程片段Si2和Sj1之間存在數(shù)據(jù)競(jìng)爭(zhēng)并發(fā)的線程片段 Si3和 Sj1之間存在數(shù)據(jù)競(jìng)爭(zhēng)和而且數(shù)據(jù)競(jìng)爭(zhēng)的競(jìng)爭(zhēng)距離較近,更易引發(fā)并發(fā)錯(cuò)誤;并發(fā)的線程片段Si3和Sj2之間存在數(shù)據(jù)競(jìng)爭(zhēng)

    圖3 并發(fā)線程片段與數(shù)據(jù)競(jìng)爭(zhēng)

    為了降低happens-before算法的復(fù)雜度,本文結(jié)合上述分析僅檢測(cè)程序執(zhí)行過程中并發(fā)線程片段間距離較近、更易引發(fā)并發(fā)錯(cuò)誤的數(shù)據(jù)競(jìng)爭(zhēng),并把可能引起數(shù)據(jù)競(jìng)爭(zhēng)的、近期訪問的一段線程片段稱為并發(fā)競(jìng)爭(zhēng)域(CRR, concurrent race region)。根據(jù)線程片段是否由加解鎖操作合圍,將并發(fā)競(jìng)爭(zhēng)域又細(xì)分為2大類:一類是加鎖并發(fā)競(jìng)爭(zhēng)域,該域被加解鎖操作合圍起來,對(duì)應(yīng)加鎖線程片段;另一類是未加鎖并發(fā)競(jìng)爭(zhēng)域,該區(qū)域沒有被加解鎖操作包圍,是未加鎖線程片段的子集,僅包含未加鎖線程片段中近期訪問的指令執(zhí)行序列。如圖4所示,線程i中存在一個(gè)加鎖并發(fā)競(jìng)爭(zhēng)域CRRi,線程j中存在一個(gè)未加鎖并發(fā)競(jìng)爭(zhēng)域CRRj,2個(gè)屬于并發(fā)執(zhí)行的程序片段,因?yàn)槎荚L問了共享變量 x,因此存在數(shù)據(jù)競(jìng)爭(zhēng)。為了能夠定位檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)對(duì)應(yīng)的內(nèi)存地址,本文將來自遠(yuǎn)程的共享訪問與并發(fā)競(jìng)爭(zhēng)域中的訪問有沖突時(shí),認(rèn)定存在數(shù)據(jù)競(jìng)爭(zhēng),如圖 4中存在數(shù)據(jù)競(jìng)爭(zhēng)

    圖4 并發(fā)競(jìng)爭(zhēng)域

    引入并發(fā)競(jìng)爭(zhēng)域,可以有效地檢測(cè)引發(fā)并發(fā)錯(cuò)誤的2類主要競(jìng)爭(zhēng)類型。一類是來自遠(yuǎn)程并發(fā)競(jìng)爭(zhēng)域的共享訪問與加鎖的并發(fā)競(jìng)爭(zhēng)域內(nèi)的訪問存在沖突,則對(duì)該地址的訪問存在競(jìng)爭(zhēng),這類競(jìng)爭(zhēng)至少有一方進(jìn)行了加解鎖保護(hù),通常被稱為非對(duì)稱競(jìng)爭(zhēng)[11],如圖5(a)和圖5(b)所示。此類競(jìng)爭(zhēng)打斷了臨界區(qū)操作,是程序執(zhí)行中堅(jiān)決不允許出現(xiàn)的,本文記該類競(jìng)爭(zhēng)為L(zhǎng)Race。另一類是來自遠(yuǎn)程并發(fā)競(jìng)爭(zhēng)域的共享訪問與未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的訪問發(fā)生沖突,則對(duì)該地址的訪問存在競(jìng)爭(zhēng),而且競(jìng)爭(zhēng)距離越小,越容易引發(fā)并發(fā)錯(cuò)誤。如圖5(c)和圖5(d)所示,本文記為 ULRace,該類中也存在打斷臨界區(qū)的情況,如圖5(d)所示。

    圖5 檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)類型

    5 基于滑動(dòng)窗口的動(dòng)態(tài)數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)

    對(duì)于第1類數(shù)據(jù)競(jìng)爭(zhēng),因其先發(fā)生方位于臨界區(qū)內(nèi),而臨界區(qū)的執(zhí)行是不能被打斷的,因此不管競(jìng)爭(zhēng)距離遠(yuǎn)近都要檢測(cè)。對(duì)于第2類數(shù)據(jù)競(jìng)爭(zhēng),因?yàn)槠湎劝l(fā)生方位于未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi),遠(yuǎn)距離的數(shù)據(jù)競(jìng)爭(zhēng)可以不予考慮。因此對(duì)于這2類競(jìng)爭(zhēng)的檢測(cè)方法要區(qū)別對(duì)待。下面分別給出2類競(jìng)爭(zhēng)的檢測(cè)方法的具體描述。

    5.1 未加鎖并發(fā)競(jìng)爭(zhēng)域

    針對(duì)未加鎖并發(fā)競(jìng)爭(zhēng)域,為確保能夠保存近期訪問的執(zhí)行序列,以便檢測(cè)到競(jìng)爭(zhēng)距離較近的數(shù)據(jù)競(jìng)爭(zhēng),本文借鑒在線數(shù)據(jù)流處理中常用的滑動(dòng)窗口技術(shù),引入一對(duì)交替移動(dòng)的可重寫滑動(dòng)窗口:窗口1和窗口 2,用來存放未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作指令,每個(gè)窗口最多能夠容納有限數(shù)量個(gè)內(nèi)存操作。隨著程序的執(zhí)行,窗口可以不斷交替下移,線程內(nèi)的執(zhí)行序列便不斷加入到了滑動(dòng)窗口中;當(dāng)窗口1、窗口2都滿時(shí),則清空并下移窗口1用來存放新的內(nèi)存操作;再次全滿后,則清空并下移窗口2用來存放新的內(nèi)存操作。

    指令在滑動(dòng)窗口中流動(dòng)的過程如圖6所示,箭頭表示程序執(zhí)行的順序,矩形框分別表示窗口1和窗口 2,2個(gè)窗口均只能存放有限數(shù)量的內(nèi)存操作指令,未加粗實(shí)線矩形框表示工作窗口,加粗實(shí)線矩形表示已滿工作窗口,虛線矩形框表示已清空并下移的窗口,加粗虛線矩形框表示待工作窗口。具體流動(dòng)過程描述如下。

    初始情況下,窗口1在前,窗口2在后,內(nèi)存操作指令依次加入到窗口1中,如圖6(a)所示。

    當(dāng)窗口1滿,則將后續(xù)內(nèi)存操作指令依次加入到至窗口2中,如圖6(b)所示。

    如果窗口1和窗口2全滿,則窗口1清空并下移,用來存放后續(xù)內(nèi)存操作,此時(shí)窗口2在前,窗口1在后,如圖6(c)所示。

    當(dāng)窗口2、窗口1全滿,則窗口2清空并下移,用來存放后續(xù)內(nèi)存操作指令,此時(shí)窗口1在前,窗口2在后,如圖6(d)所示。

    圖6 指令在滑動(dòng)窗口的流動(dòng)示意

    設(shè)每個(gè)窗口最多可容納m個(gè)內(nèi)存操作,如此交替移動(dòng),便可存放線程最近執(zhí)行的至少m個(gè)內(nèi)存操作(初始情況除外)。這樣,如果來自其他線程的遠(yuǎn)程訪問同滑動(dòng)窗口內(nèi)的內(nèi)存操作發(fā)生沖突,則認(rèn)為存在競(jìng)爭(zhēng)。從而能夠檢測(cè)到所有競(jìng)爭(zhēng)距離在0~m的數(shù)據(jù)競(jìng)爭(zhēng),還可以檢測(cè)部分m~2m的內(nèi)存競(jìng)爭(zhēng),距離大于2m的不予以檢測(cè)。如此,通過一對(duì)滑動(dòng)窗口的交替移動(dòng)和重寫,有效地檢測(cè)到先發(fā)生方位于未加鎖并發(fā)競(jìng)爭(zhēng)域、競(jìng)爭(zhēng)距離較近的數(shù)據(jù)競(jìng)爭(zhēng)。

    該檢測(cè)方法中距離較遠(yuǎn)的數(shù)據(jù)競(jìng)爭(zhēng)不會(huì)被檢測(cè)到,如圖7中虛線指出的競(jìng)爭(zhēng)。當(dāng)該數(shù)據(jù)競(jìng)爭(zhēng)后發(fā)生方執(zhí)行時(shí),線程i已經(jīng)在執(zhí)行完wr(x)后至少又執(zhí)行了m個(gè)內(nèi)存操作,因?yàn)榇藭r(shí)窗口1、窗口2的前后順序已經(jīng)交替移動(dòng)過,位于前面的窗口是滿的。線程j的wr(x)操作距離線程i的wr(x)操作的距離大于 m,相對(duì)較遠(yuǎn)。假設(shè)存在臨界區(qū)的話,wr(x)執(zhí)行時(shí),線程i的關(guān)于wr(x)的臨界區(qū)已經(jīng)執(zhí)行完畢,不會(huì)破壞線程i中wr(x)操作相關(guān)的臨界區(qū)。

    圖7中可以檢測(cè)到線程i窗口1中的rd(x)與線程j的wr(x)之間的競(jìng)爭(zhēng)。雖然該競(jìng)爭(zhēng)距離大于m且接近 2m,但其仍在滑動(dòng)窗口內(nèi),競(jìng)爭(zhēng)的距離未超過2m,仍然能夠檢測(cè)到。

    滑動(dòng)窗口的大小決定了所能檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)的距離,在后面的仿真測(cè)試中,本文給出了滑動(dòng)窗口的合理尺寸。

    圖7 未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的競(jìng)爭(zhēng)示例

    5.2 加鎖并發(fā)競(jìng)爭(zhēng)域

    臨界區(qū)的執(zhí)行是不允許被打斷的,因此,如果臨界區(qū)內(nèi)有來自其他線程的訪問沖突,則必引發(fā)競(jìng)爭(zhēng),此競(jìng)爭(zhēng)必須要檢測(cè)到。因此,本文將加鎖競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作指令用一個(gè)大小可擴(kuò)展的滑動(dòng)窗口來保存,該滑動(dòng)窗口可以容納不同大小臨界區(qū)內(nèi)的所有內(nèi)存操作,窗口隨著臨界區(qū)內(nèi)內(nèi)存操作數(shù)量的增加而增大。一旦來自遠(yuǎn)程線程的共享訪問與窗口內(nèi)的訪問發(fā)生沖突,則檢測(cè)到了數(shù)據(jù)競(jìng)爭(zhēng)。如圖8所示,線程j訪問執(zhí)行wr(x)時(shí),線程i還未執(zhí)行完保護(hù)共享變量操作wr(x)的臨界區(qū),則會(huì)檢測(cè)到數(shù)據(jù)競(jìng)爭(zhēng)

    6 硬件實(shí)現(xiàn)

    基于上述滑動(dòng)窗口的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法,實(shí)現(xiàn)了基于CMP(chip multiprocessor)系統(tǒng)的數(shù)據(jù)競(jìng)爭(zhēng)硬件檢測(cè)算法。該檢測(cè)算法對(duì)應(yīng)的硬件結(jié)構(gòu)中需要為每個(gè)處理器核添加一個(gè)內(nèi)存競(jìng)爭(zhēng)檢測(cè)模塊RaceSW,如圖9所示。其中包括3對(duì)讀寫簽名寄存器:RF0/WF0、RF1/WF1、RF2/WF2。RF0/WF0和RF1/WF1這2對(duì)簽名分別用于存放未加鎖并發(fā)競(jìng)爭(zhēng)域中滑動(dòng)窗口1和窗口2存放的讀寫操作的數(shù)據(jù)地址,且每對(duì)讀寫簽名最多能存放m個(gè)內(nèi)存操作的數(shù)據(jù)地址。RF2/WF2用來存放未加鎖并發(fā)競(jìng)爭(zhēng)域中滑動(dòng)窗口3存放的內(nèi)存操作的數(shù)據(jù)地址,存放數(shù)量不限。當(dāng)窗口1下移時(shí),簽名對(duì)RF0/WF0清空,用來存放窗口1后續(xù)存放的內(nèi)存操作的數(shù)據(jù)地址,當(dāng)窗口2下移時(shí),簽名對(duì)RF1/WF1清空,用來存放窗口 2后續(xù)存放的內(nèi)存操作指令的數(shù)據(jù)地址。RF2/WF2用來存放加鎖并發(fā)競(jìng)爭(zhēng)域中窗口3存放的內(nèi)存操作的數(shù)據(jù)地址,并且存放的地址數(shù)量不受限制。在簽名寄存器大小固定的情況下,滑動(dòng)窗口設(shè)置越大,能夠檢測(cè)到具有更大競(jìng)爭(zhēng)距離的數(shù)據(jù)競(jìng)爭(zhēng),但因更多的地址加入到簽名寄存器中,帶來誤報(bào)也會(huì)增加。因此在第7節(jié)中對(duì)滑動(dòng)窗口和簽名寄存器的大小進(jìn)行了仿真測(cè)試,選取了合適的參數(shù)。

    圖8 加鎖并發(fā)競(jìng)爭(zhēng)域競(jìng)爭(zhēng)示例

    除了3對(duì)讀寫簽名寄存器外,RaceSW還包括指令計(jì)數(shù)器 IC,用來記錄窗口 1和窗口 2中的內(nèi)存操作數(shù)量,以及一系列的標(biāo)識(shí)觸發(fā)器:Order(窗口順序標(biāo)識(shí))、Full0(窗口 1滿標(biāo)識(shí))、Full1(窗口2滿標(biāo)識(shí))、Lock(加鎖標(biāo)識(shí))、Filter(過濾標(biāo)識(shí))。

    同時(shí),為了識(shí)別程序中的加鎖、解鎖操作,以及在檢測(cè)競(jìng)爭(zhēng)時(shí)過濾掉鎖操作本身帶來的競(jìng)爭(zhēng),還需要為處理器增加新的機(jī)器指令。機(jī)器指令的實(shí)現(xiàn)形式多樣,可以為每個(gè)同步操作分別引入2條指令,一個(gè)是打開地址過濾功能,一個(gè)是關(guān)閉地址過濾功能;還可以綜合應(yīng)用更少數(shù)量的機(jī)器指令來識(shí)別不同操作。鑒于盡可能引入較少的機(jī)器指令,降低硬件復(fù)雜度,該硬件實(shí)現(xiàn)中僅增加了 Lock_on、Lock_off、Filter_off 3個(gè)新的機(jī)器指令,如表1所示。這3條指令相當(dāng)于硬件開關(guān),Lock_on指令既能結(jié)束一個(gè)未加鎖并發(fā)競(jìng)爭(zhēng)域又可以開啟一個(gè)新的加鎖并發(fā)競(jìng)爭(zhēng)域,同時(shí)還開啟了鎖競(jìng)爭(zhēng)過濾功能,即將鎖操作自身帶來的內(nèi)存地址不添加到簽名中。Lock_off指令既能結(jié)束一個(gè)加鎖并發(fā)競(jìng)爭(zhēng)域又可以開啟一個(gè)新的未加鎖并發(fā)競(jìng)爭(zhēng)域,同時(shí)開啟鎖競(jìng)爭(zhēng)過濾功能。Lock_on、Lock_off分別和Filter_off配合,可以對(duì)鎖操作實(shí)施過濾功能,不將它們加入到滑動(dòng)窗口中,從而過濾掉鎖操作本身帶來的數(shù)據(jù)競(jìng)爭(zhēng),使數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)的結(jié)果更加有意義。

    表1 新增機(jī)器指令

    雖然增加了 3條新的機(jī)器指令,但并不需修改用戶程序,只要修改庫(kù)函數(shù)即可。如表2所示,給出了針對(duì) M4 macros[18]庫(kù)的修改。其中對(duì)于barrier操作,成對(duì)使用Lock_off和Filter_off,將其帶來的內(nèi)存地址給過濾掉。而且,還可以靈活應(yīng)用這幾條指令,將不想進(jìn)行數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)的區(qū)域過濾掉。

    圖9 硬件實(shí)現(xiàn)結(jié)構(gòu)

    表2 對(duì)庫(kù)函數(shù)的修改

    本文提出的基于滑動(dòng)窗口的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法基于硬件的描述如下。它詳細(xì)描述了每個(gè)處理器核的動(dòng)作。

    該算法中每個(gè)處理器核做如下動(dòng)作。

    1) 每當(dāng)處理器核執(zhí)行內(nèi)存操作指令時(shí),首先判斷當(dāng)前是處于未加鎖并發(fā)競(jìng)爭(zhēng)域還是加鎖并發(fā)競(jìng)爭(zhēng)域,如果是未加鎖并發(fā)競(jìng)爭(zhēng)域,則將內(nèi)存操作指令的數(shù)據(jù)地址按照滑動(dòng)窗口1和窗口2的前后順序分別加入到窗口對(duì)應(yīng)的簽名對(duì)中,如果是加鎖并發(fā)競(jìng)爭(zhēng)域,則將內(nèi)存操作指令的數(shù)據(jù)地址加入到滑動(dòng)窗口3對(duì)應(yīng)的簽名對(duì)中。

    2) 根據(jù)滑動(dòng)窗口1和窗口2的空滿狀況交替清空并移動(dòng)對(duì)應(yīng)的簽名對(duì)。

    3) 如果遇到加解鎖操作,則清空窗口1和窗口2對(duì)應(yīng)的簽名對(duì)。

    4) 當(dāng)收到來自其他處理器核的共享內(nèi)存訪問請(qǐng)求時(shí),處理器核查找簽名來檢測(cè)是否有數(shù)據(jù)競(jìng)爭(zhēng)發(fā)生,若檢測(cè)到,則記錄競(jìng)爭(zhēng)地址到競(jìng)爭(zhēng)日志。

    如果要區(qū)分檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)屬于雙方均未加鎖、僅發(fā)生方加鎖、僅后發(fā)生方加鎖、雙方均未加鎖這4類中的哪一類,還需要在cache一致性協(xié)議發(fā)送gets或getx請(qǐng)求消息時(shí)添加該地址是否在加解鎖范圍內(nèi)的標(biāo)識(shí)信息。如此,程序員可以更加方便地查找錯(cuò)誤和修改程序。

    7 性能評(píng)價(jià)

    本文采用 GEMS[19]對(duì)基于滑動(dòng)窗口的數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法進(jìn)行了仿真,仿真配置如表3所示。測(cè)試負(fù)載選取典型的應(yīng)用于多線程科學(xué)計(jì)算的SPLASH2[20]。

    表3 仿真配置

    下面給出該數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法(RaceSW)在參數(shù)選取、硬件開銷、檢測(cè)性能和帶寬開銷方面的仿真結(jié)果。

    7.1 參數(shù)選取

    1) 滑動(dòng)窗口

    選取滑動(dòng)窗口的大小決定了所能檢測(cè)到的內(nèi)存競(jìng)爭(zhēng)距離的大小。為了選取合適窗口,對(duì)臨界區(qū)內(nèi)的內(nèi)存操作數(shù)量進(jìn)行了統(tǒng)計(jì),結(jié)果如圖10所示。所有測(cè)試負(fù)載中,內(nèi)存操作個(gè)數(shù)小于8的臨界區(qū)占的比例最大,比如 ocean、fft的臨界區(qū)均小于 8;小于256的臨界區(qū)約占為95%;大于512的臨界區(qū)占的比例非常少。雖然,cholesky、fmm中大于1 024的臨界區(qū)所占比例相對(duì)較多,但實(shí)際數(shù)量均不超過10個(gè)。

    圖10 不同大小臨界區(qū)所占比例統(tǒng)計(jì)

    滑動(dòng)窗口如果設(shè)置過大,不易于去除距離較遠(yuǎn)的數(shù)據(jù)競(jìng)爭(zhēng),而且會(huì)浪費(fèi)硬件資源,如果過小則又會(huì)漏掉數(shù)據(jù)競(jìng)爭(zhēng)。因此,本方案中,根據(jù)臨界區(qū)大小的結(jié)果統(tǒng)計(jì),將未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)引入的滑動(dòng)窗口大小設(shè)置為 256,能夠包含占絕大多數(shù)的小于256的臨界區(qū)。如此,對(duì)于未加鎖并發(fā)競(jìng)爭(zhēng)域,采用滑動(dòng)窗口技術(shù),除初始情況外,均至少能保存每個(gè)線程內(nèi)近期執(zhí)行的256個(gè)內(nèi)存操作,完全可以檢測(cè)所有競(jìng)爭(zhēng)距離在0~256范圍內(nèi)的數(shù)據(jù)競(jìng)爭(zhēng),可以檢測(cè)部分競(jìng)爭(zhēng)距離在256~512范圍內(nèi)的競(jìng)爭(zhēng),距離超過512不予檢測(cè)。相應(yīng)地,WF0/RF0、WF1/RF1這2對(duì)簽名均最多只能容納256個(gè)內(nèi)存操作的數(shù)據(jù)地址。對(duì)于加鎖并發(fā)競(jìng)爭(zhēng)域,滑動(dòng)窗口大小不設(shè)限制,對(duì)應(yīng)簽名寄存器存放的地址數(shù)目也不做限制,從而可以檢測(cè)所有打斷臨界區(qū)的操作。

    2) 簽名寄存器

    選取的簽名寄存器如果太小,則誤報(bào)(false positive)會(huì)增多,如果過大,則浪費(fèi)硬件資源。在本算法中分別用 WF0/RF0、WF1/RF1來存儲(chǔ)最多256個(gè)內(nèi)存操作的數(shù)據(jù)地址;用WF2/RF2存放臨界區(qū)中所有的內(nèi)存操作對(duì)應(yīng)地址,存放數(shù)據(jù)無上限要求,但大于1 024的臨界區(qū)所占比例不到2%??紤]較好的資源利用率,本文針對(duì)常用的H3散列簽名寄存器的多個(gè)尺寸進(jìn)行了測(cè)試,測(cè)試結(jié)果如圖 11所示,發(fā)現(xiàn)簽名寄存器大于128 bit后,對(duì)檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)數(shù)量影響不太大,因此本文選用 128 bit的讀寫簽名寄存器。

    圖11 簽名寄存器大小測(cè)試結(jié)果

    7.2 硬件開銷

    該算法需要為每個(gè)處理器核添加一個(gè) RaceSW模塊,對(duì)于8核的CMP系統(tǒng),配置參數(shù)如表3所示,若不考慮運(yùn)算器部分,該模塊共添加3對(duì)128 bit的硬件簽名寄存器,共768 bit,外加1個(gè)16 bit的指令計(jì)數(shù)器(IC)和5個(gè)觸發(fā)器,共添加789 bit的硬件資源,而文獻(xiàn)[10]中為每個(gè)處理器核添加 4 kbit,RaceSW硬件開銷減小了約80%,相比其他不使用簽名的硬件檢測(cè)算法[8,9],RaceSW在更大程度上降低了硬件開銷。

    7.3 檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)數(shù)量

    圖12分別給出了RaceSW在4核、8核和16核 CMP系統(tǒng)上檢測(cè)到的數(shù)據(jù)競(jìng)爭(zhēng)數(shù)量及其檢測(cè)到的兩大類型數(shù)據(jù)競(jìng)爭(zhēng)所占的比例情況??梢钥闯觯劝l(fā)生方在未加鎖并發(fā)域的數(shù)據(jù)競(jìng)爭(zhēng)占絕大多數(shù);不存在超長(zhǎng)臨界區(qū)的測(cè)試負(fù)載(如water、volrend 、ocean、fft),沒有檢測(cè)到打斷臨界區(qū)的數(shù)據(jù)競(jìng)爭(zhēng),而存在超長(zhǎng)臨界區(qū)的測(cè)試負(fù)載都檢測(cè)到了打斷臨界區(qū)的數(shù)據(jù)競(jìng)爭(zhēng),如barnes、fmm等。這同時(shí)也為編程人員針對(duì)臨界區(qū)大小設(shè)置不合理提出了提示信息。因?yàn)镽aceSW采用滑動(dòng)窗口策略,僅檢測(cè)競(jìng)爭(zhēng)距離較近、更易引發(fā)并發(fā)錯(cuò)誤的數(shù)據(jù)競(jìng)爭(zhēng),在降低硬件復(fù)雜度和硬件開銷的前提下,相比文獻(xiàn)[10]等,數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)效果有所下降。本文在相同8核環(huán)境下采用大尺寸簽名寄存器代替簽名隊(duì)列針對(duì)文獻(xiàn)[10]提出的 SigRace檢測(cè)方法進(jìn)行了測(cè)試,并考慮到庫(kù)文件帶來的競(jìng)爭(zhēng),檢測(cè)到的競(jìng)爭(zhēng)數(shù)量比較結(jié)果如圖13所示,RaceSW可以檢測(cè)到近期發(fā)生的約21%的數(shù)據(jù)競(jìng)爭(zhēng)。

    圖12 數(shù)據(jù)競(jìng)爭(zhēng)數(shù)量統(tǒng)計(jì)

    7.4 帶寬開銷

    如果不提示競(jìng)爭(zhēng)類型,則本方法不需要為cache一致性協(xié)議添加新的消息字段,帶來的帶寬開銷為0。如果要指出競(jìng)爭(zhēng)的類型,則只需要在一致性消息getx和gets中添加1 bit的附加信息,用來指出后發(fā)生方來自未加鎖并發(fā)競(jìng)爭(zhēng)域還是加鎖并發(fā)競(jìng)爭(zhēng)域,此時(shí),帶寬開銷不到1%。

    圖13 數(shù)據(jù)競(jìng)爭(zhēng)數(shù)量比較

    8 結(jié)束語

    本文針對(duì)基于硬件的happens-before內(nèi)存競(jìng)爭(zhēng)檢測(cè)方法硬件開銷大的問題,提出了基于滑動(dòng)窗口的動(dòng)態(tài)數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)算法,該算法從遠(yuǎn)距離的內(nèi)存競(jìng)爭(zhēng)引起并發(fā)錯(cuò)誤的概率較小這一特點(diǎn)出發(fā),將并發(fā)的線程片段細(xì)分為由線程近期執(zhí)行的內(nèi)存操作構(gòu)成的未加鎖并發(fā)競(jìng)爭(zhēng)域和位于臨界區(qū)內(nèi)的加鎖并發(fā)競(jìng)爭(zhēng)域,并采用滑動(dòng)窗口技術(shù),用一對(duì)交替移動(dòng)的可重寫滑動(dòng)窗口保存未加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作,用可變大小的滑動(dòng)窗口保存加鎖并發(fā)競(jìng)爭(zhēng)域內(nèi)的內(nèi)存操作。硬件實(shí)現(xiàn)結(jié)構(gòu)中,滑動(dòng)窗口內(nèi)的數(shù)據(jù)地址自動(dòng)添加到小尺寸的簽名寄存器中,當(dāng)有來自其他處理器核的一致性共享請(qǐng)求消息時(shí),通過查找簽名檢測(cè)到距離較近的、更易引發(fā)并發(fā)錯(cuò)誤的內(nèi)存競(jìng)爭(zhēng)。基于8核的CMP系統(tǒng)下的仿真結(jié)果指出,該算法硬件開銷小、帶寬開銷低。

    [1] SAVAGE S, BURROWS M, NELSON G, et al. Eraser: a dynamic data race detector for multithreaded programs[J]. ACM Transactions on Computer Systems (TOCS), 1997, 15(4): 391-411.

    [2] DI P, SUI Y. Accelerating dynamic data race detection using static thread interference analysis[C]//The 7th International Workshop on Programming Models and Applications for Multicores and Manycores.ACM, 2016: 30-39.

    [3] WU Z, LU K, WANG X, et al. Collaborative technique for concurrency bug detection[J]. International Journal of Parallel Programming,2015, 43(2): 260-285.

    [4] 陳睿, 楊孟飛, 郭向英. 基于變量訪問序模式的中斷數(shù)據(jù)競(jìng)爭(zhēng)檢測(cè)方法[J]. 軟件學(xué)報(bào), 2016, 27(3): 547-561.CHEN R, YANG M F, GUO X Y. Interrupt data race detection based on shared variable access order pattern[J]. Journal of Software, 2016,27(3): 547-561.

    [5] 王文文, 武成崗. 動(dòng)態(tài)容忍和檢測(cè)非對(duì)稱數(shù)據(jù)競(jìng)爭(zhēng)[J]. 計(jì)算機(jī)研究與發(fā)展, 2014, 51(8): 1748-1763.WANG W W, WU C G. Dynamically tolerating and detecting asymmetric race[J]. Journal of Computer Research and Development, 2014,51(8): 1748-1763.

    [6] LU K, WU Z, WANG X, et al. RaceChecker: efficient identification of harmful data races[C]//2015 23rd Euromicro International Conference on Parallel, Distributed, and Network-Based Processing. IEEE, 2015:78-85.

    [7] WESTER B, DEVECSERY D, CHEN P M, et al. Parallelizing data race detection[J]. ACM Sigplan Notices, 2013, 48(4): 27-38.

    [8] PRVULOVIC M. CORD: cost-effective (and nearly overhead-free)order-recording and data race detection[C]//The Twelfth International Symposium on High-Performance Computer Architecture. IEEE, 2006:232-243.

    [9] ZHOU P, TEODORESCU R, ZHOU Y. HARD: hardware-assisted lockset-based race detection[C]//2007 IEEE 13th International Symposium on High Performance Computer Architecture. IEEE, 2007:121-132.

    [10] MUZAHID A, SUáREZ D, QI S, et al. SigRace: signature-based data race detection[J]. ACM Sigarch Computer Architecture News, 2009,37(3):337-348.

    [11] QI S, OTSUKI N, NOGUEIRA L O, et al. Pacman: tolerating asymmetric data races with unintrusive hardware[C]//High Performance Computer Architecture (HPCA), 2012 IEEE 18th International Symposium. IEEE, 2012: 1-12.

    [12] QI S, MUZAHID A A, AHN W, et al. Dynamically detecting and tolerating if-condition data races[C]//The 20th IEEE International Symposium on High Performance Computer Architecture (HPCA).IEEE Computer Society, 2014: 120-131.

    [13] OROSA L. A hardware approach to detect, expose and tolerate high level data races[C]//The 24th Euromicro International Conference on Parallel,Distributed, and Network-Based Processing (PDP). IEEE, 2016: 159-167.

    [14] DEVIETTI J, WOOD B P, STRAUSS K, et al. RADISH: always-on sound and complete race detection in software and hardware[C]//IEEE Computer Architecture (ISCA), 2012 39th Annual International Symposium. IEEE, 2012: 201-212.

    [15] ARULRAJ J, CHANG P C, JIN G, et al. Production-run software failure diagnosis via hardware performance counters[J]. ACM Sigarch Computer Architecture News, 2013, 41(1): 101-112.

    [16] SHENG T, VACHHARAJANI N, ERANIAN S, et al. RACEZ: a lightweight and non-invasive race detection tool for production applications[C]//The International Conference on Software Engineering.2011: 401-410.

    [17] Intel Corporation. Intel thread checker[EB/OL]. http://www.intel.com,2008.

    [18] LUSK E, BOYLE J, BUTLER R, et al. Portable programs for parallel processors[M]. Holt, Rinehart amp; Winston, 1988.

    [19] MARTIN M M K, SORIN D J, BECKMANN B M, et al. Multifacet's general execution-driven multiprocessor simulator (GEMS) toolset[J].ACM SIGARCH Computer Architecture News, 2005, 33(4): 92-99.

    [20] WOO S C, OHARA M, TORRIE E, et al. The SPLASH-2 programs:characterization and methodological considerations[J]. ACM SIGARCH Computer Architecture News, ACM, 1995, 23(2): 24-36.

    Hardware data race detection algorithm based on sliding windows

    ZHU Su-xia1,2, CHEN De-yun1,2, JI Zhen-zhou3, SUN Guang-lu1
    (1. School of Computer Science and Technology, Harbin University of Technology, Harbin 150080, China;2. Postdoctoral Research Station, School of Computer Science and Technology, Harbin University of Technology, Harbin 150080, China;3. School of Computer Science and Technology, Harbin Institute of Technology, Harbin 150001, China)

    Data race is a major factor which causes multi-core programs to produce concurrent bugs. To address the high hardware cost in happens-before detection proposals, a light-weight hardware data race detection approach based on sliding window technology was proposed. It used sliding windows to save recent memory instructions in thread execution and dynamically detected data races with small race distance which more easily lead to concurrent bugs. Considering the race distance, parallel thread segments were subdivided into concurrent race regions with lock and concurrent race regions without lock. A pair of alternate rewritable sliding windows was used to store the memory instructions in concurrent race region without lock, and a sliding window with variable size was used to store the memory instructions in concurrent race region with lock. When there was a conflict between a remote sharing access and memory accesses in sliding windows, a data race was detected. In the hardware implementation, the addresses of the data in sliding windows were automatically encoded into three hardware signatures with small size. Data races can be detected quickly without modifying the L1 cache and cache coherence protocol messages. This approach supplies efficient guidance to help users to diagnose concurrency bugs occurred in the development and production run of multi-core programs, achieving smaller hardware and bandwidth overhead.

    data race, sliding window, hardware signature, concurrency bug, multi-core program

    s: The National Natural Science Foundation of China for Youths(No.61502123), Heilongjiang Province Science Foundation for Youths(No.QC2015084), The China Postdoctoral Science Foundation(No.2015M571429), The National Natural Science Foundation of China(No.61472100), The National Basic Research Program of China(973 Program)(No.2011CB302501)

    TP303

    A

    10.11959/j.issn.1000-436x.2016173

    2016-04-05;

    2016-07-14

    國(guó)家自然科學(xué)青年基金資助項(xiàng)目(No.61502123);黑龍江省青年科學(xué)基金資助項(xiàng)目(No.QC2015084);中國(guó)博士后科學(xué)基金資助項(xiàng)目(No.2015M571429);國(guó)家自然科學(xué)基金資助項(xiàng)目(No.61472100);國(guó)家重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃(“973”計(jì)劃)基金資助項(xiàng)目(No.2011CB302501)

    朱素霞(1978-),女,山東壽光人,博士,哈爾濱理工大學(xué)副教授,主要研究方向?yàn)楦咝阅荏w系結(jié)構(gòu)、并行計(jì)算。

    陳德運(yùn)(1962-),男,黑龍江哈爾濱人,哈爾濱理工大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)閳D像處理、探測(cè)和成像技術(shù)。

    季振洲(1965-),男,黑龍江哈爾濱人,哈爾濱工業(yè)大學(xué)教授、博士生導(dǎo)師,主要研究方向?yàn)椴⑿畜w系結(jié)構(gòu)、并行計(jì)算和網(wǎng)絡(luò)安全。

    孫廣路(1979-),男,黑龍江哈爾濱人,哈爾濱理工大學(xué)教授,主要研究方向?yàn)榫W(wǎng)絡(luò)安全、模式識(shí)別和機(jī)器學(xué)習(xí)。

    猜你喜歡
    線程內(nèi)存滑動(dòng)
    “春夏秋冬”的內(nèi)存
    一種新型滑動(dòng)叉拉花鍵夾具
    Big Little lies: No One Is Perfect
    淺談linux多線程協(xié)作
    滑動(dòng)供電系統(tǒng)在城市軌道交通中的應(yīng)用
    一種基于變換域的滑動(dòng)聚束SAR調(diào)頻率估計(jì)方法
    基于內(nèi)存的地理信息訪問技術(shù)
    Linux線程實(shí)現(xiàn)技術(shù)研究
    么移動(dòng)中間件線程池并發(fā)機(jī)制優(yōu)化改進(jìn)
    上網(wǎng)本為什么只有1GB?
    啦啦啦啦在线视频资源| 国产视频首页在线观看| 狠狠精品人妻久久久久久综合| 在线观看av片永久免费下载| 男人舔奶头视频| 欧美精品一区二区大全| av在线蜜桃| 午夜福利在线在线| 午夜激情久久久久久久| 国产成人a∨麻豆精品| 久久久色成人| 97在线人人人人妻| 亚洲,欧美,日韩| 精品少妇久久久久久888优播| 午夜老司机福利剧场| 热re99久久精品国产66热6| 精品久久久噜噜| 国产毛片在线视频| av在线观看视频网站免费| 啦啦啦在线观看免费高清www| 久久青草综合色| 男人爽女人下面视频在线观看| 国产爽快片一区二区三区| 小蜜桃在线观看免费完整版高清| 亚洲av欧美aⅴ国产| 菩萨蛮人人尽说江南好唐韦庄| 一级二级三级毛片免费看| 在线 av 中文字幕| 国产日韩欧美在线精品| 免费观看在线日韩| 成人国产av品久久久| 天堂中文最新版在线下载| 久久国产乱子免费精品| 一级毛片久久久久久久久女| 国产精品一二三区在线看| 久久婷婷青草| 日韩人妻高清精品专区| 国国产精品蜜臀av免费| 下体分泌物呈黄色| 在线观看免费视频网站a站| 插逼视频在线观看| 久久久久久久久大av| 啦啦啦中文免费视频观看日本| 一级黄片播放器| 国产成人a区在线观看| 欧美最新免费一区二区三区| 日本vs欧美在线观看视频 | 日本黄色片子视频| 91狼人影院| 亚洲精品视频女| 国产国拍精品亚洲av在线观看| 亚洲va在线va天堂va国产| 99热这里只有精品一区| 欧美人与善性xxx| 亚洲一区二区三区欧美精品| 在线观看国产h片| 在现免费观看毛片| 免费人成在线观看视频色| 夜夜看夜夜爽夜夜摸| 男女下面进入的视频免费午夜| 偷拍熟女少妇极品色| 日韩一区二区三区影片| 97超碰精品成人国产| 我的老师免费观看完整版| 久久久久久伊人网av| 亚洲,一卡二卡三卡| 干丝袜人妻中文字幕| 成人午夜精彩视频在线观看| 日韩av在线免费看完整版不卡| 亚洲国产欧美人成| 欧美3d第一页| 少妇高潮的动态图| 日韩三级伦理在线观看| 亚洲人与动物交配视频| 亚洲在久久综合| 日本av免费视频播放| 青青草视频在线视频观看| 国产亚洲一区二区精品| 女性生殖器流出的白浆| 日韩大片免费观看网站| 国产人妻一区二区三区在| 青春草视频在线免费观看| 两个人的视频大全免费| 伦理电影免费视频| 欧美日韩亚洲高清精品| 欧美区成人在线视频| 精品国产三级普通话版| 国产精品熟女久久久久浪| tube8黄色片| 夜夜看夜夜爽夜夜摸| 亚洲国产欧美在线一区| 免费在线观看成人毛片| 国产欧美亚洲国产| 我的女老师完整版在线观看| 久久久久精品性色| 欧美日本视频| 国产午夜精品久久久久久一区二区三区| 深爱激情五月婷婷| 丝瓜视频免费看黄片| h日本视频在线播放| 亚洲美女视频黄频| 国内精品宾馆在线| 91精品一卡2卡3卡4卡| 汤姆久久久久久久影院中文字幕| 亚洲欧美日韩卡通动漫| 日韩视频在线欧美| 蜜臀久久99精品久久宅男| 青青草视频在线视频观看| 国产精品久久久久久精品古装| 精品少妇黑人巨大在线播放| 色婷婷av一区二区三区视频| 人妻少妇偷人精品九色| 十八禁网站网址无遮挡 | 一级毛片久久久久久久久女| 极品少妇高潮喷水抽搐| 欧美xxⅹ黑人| 国产精品一区二区在线不卡| 国产亚洲一区二区精品| 熟女电影av网| 精品一区在线观看国产| 蜜桃久久精品国产亚洲av| 亚洲成人av在线免费| 亚洲av.av天堂| 99久久精品国产国产毛片| 免费人成在线观看视频色| 国产乱人视频| 女人十人毛片免费观看3o分钟| 老熟女久久久| 久久精品人妻少妇| 91精品国产国语对白视频| 高清毛片免费看| 久久国产精品大桥未久av | 99久久精品国产国产毛片| 美女中出高潮动态图| 国产极品天堂在线| 一区二区三区免费毛片| 国产精品国产av在线观看| 久久99蜜桃精品久久| 亚洲色图综合在线观看| 黄色欧美视频在线观看| 97在线视频观看| 乱系列少妇在线播放| 日日摸夜夜添夜夜添av毛片| 久久99热这里只有精品18| 老司机影院成人| 国产午夜精品一二区理论片| 九九久久精品国产亚洲av麻豆| 夜夜骑夜夜射夜夜干| av专区在线播放| 国产精品成人在线| 最近手机中文字幕大全| 国产伦在线观看视频一区| 亚洲欧洲国产日韩| 国产黄色视频一区二区在线观看| 国产精品.久久久| 各种免费的搞黄视频| 狂野欧美激情性bbbbbb| 波野结衣二区三区在线| 91久久精品国产一区二区三区| 亚洲成人一二三区av| 黄色日韩在线| 成人影院久久| 最近最新中文字幕大全电影3| 91午夜精品亚洲一区二区三区| 人人妻人人添人人爽欧美一区卜 | 自拍偷自拍亚洲精品老妇| 欧美zozozo另类| 丝袜喷水一区| 亚洲熟女精品中文字幕| 国产 精品1| 国产探花极品一区二区| 国产亚洲91精品色在线| 亚洲av不卡在线观看| 最近中文字幕2019免费版| 一边亲一边摸免费视频| 丝瓜视频免费看黄片| 纵有疾风起免费观看全集完整版| 欧美zozozo另类| 久久国产精品男人的天堂亚洲 | 国产在线一区二区三区精| 我的老师免费观看完整版| 久久综合国产亚洲精品| 久久久久久久亚洲中文字幕| 亚洲熟女精品中文字幕| 国产精品99久久99久久久不卡 | 高清视频免费观看一区二区| 国产一区亚洲一区在线观看| 国产精品伦人一区二区| 国产高潮美女av| 色视频在线一区二区三区| 在线观看人妻少妇| 久久99蜜桃精品久久| 欧美成人一区二区免费高清观看| 国产在线男女| 美女国产视频在线观看| 少妇熟女欧美另类| 日本黄大片高清| 黄色怎么调成土黄色| 高清在线视频一区二区三区| 欧美日韩视频精品一区| 亚洲欧美中文字幕日韩二区| 亚洲经典国产精华液单| 国产高清国产精品国产三级 | 精品久久久久久久久av| 国产久久久一区二区三区| 交换朋友夫妻互换小说| 午夜福利视频精品| 欧美老熟妇乱子伦牲交| 自拍欧美九色日韩亚洲蝌蚪91 | 国产成人freesex在线| 亚洲一级一片aⅴ在线观看| 国产中年淑女户外野战色| 国产白丝娇喘喷水9色精品| 免费久久久久久久精品成人欧美视频 | 久热久热在线精品观看| 日韩一本色道免费dvd| 高清不卡的av网站| 91狼人影院| 国产一区亚洲一区在线观看| 久久精品国产亚洲av天美| 亚洲精品视频女| 国模一区二区三区四区视频| www.av在线官网国产| 又粗又硬又长又爽又黄的视频| 超碰97精品在线观看| 成年美女黄网站色视频大全免费 | 国产精品爽爽va在线观看网站| 亚洲不卡免费看| 久久精品人妻少妇| 色婷婷久久久亚洲欧美| 美女脱内裤让男人舔精品视频| 91久久精品国产一区二区三区| 伊人久久国产一区二区| 日本色播在线视频| 亚洲欧美日韩另类电影网站 | 最近中文字幕高清免费大全6| 国产淫语在线视频| 色吧在线观看| 成年av动漫网址| 两个人的视频大全免费| 王馨瑶露胸无遮挡在线观看| 国产在线视频一区二区| 狂野欧美激情性xxxx在线观看| 高清在线视频一区二区三区| 男女下面进入的视频免费午夜| 午夜激情福利司机影院| 永久网站在线| 欧美xxxx黑人xx丫x性爽| 欧美老熟妇乱子伦牲交| 国国产精品蜜臀av免费| 日韩视频在线欧美| 亚洲精品乱久久久久久| 99热这里只有精品一区| 免费观看a级毛片全部| 亚洲欧美中文字幕日韩二区| 天堂中文最新版在线下载| 欧美zozozo另类| 国产又色又爽无遮挡免| 亚洲国产欧美人成| 中文字幕久久专区| 国产精品秋霞免费鲁丝片| 一级黄片播放器| 午夜福利在线观看免费完整高清在| 精品少妇久久久久久888优播| 在线观看免费视频网站a站| 美女国产视频在线观看| 国产精品久久久久久久久免| 免费人妻精品一区二区三区视频| 最近2019中文字幕mv第一页| 三级国产精品欧美在线观看| 一本久久精品| 久久久久久久久久人人人人人人| 久久97久久精品| 国产av一区二区精品久久 | 亚洲美女搞黄在线观看| 亚洲精品日韩av片在线观看| 国产视频内射| 亚洲精品视频女| 在现免费观看毛片| 免费观看av网站的网址| 在线观看免费高清a一片| 日韩欧美一区视频在线观看 | 国产成人精品久久久久久| 久久亚洲国产成人精品v| 我的老师免费观看完整版| 日日摸夜夜添夜夜添av毛片| 亚洲av综合色区一区| 人人妻人人看人人澡| 我的老师免费观看完整版| 亚洲综合色惰| 亚洲av电影在线观看一区二区三区| 午夜免费鲁丝| 最近的中文字幕免费完整| 国产色婷婷99| 欧美变态另类bdsm刘玥| 欧美高清成人免费视频www| 亚洲精品aⅴ在线观看| 亚洲美女视频黄频| 国国产精品蜜臀av免费| 我要看黄色一级片免费的| 亚洲国产精品国产精品| 国产精品一区二区三区四区免费观看| 国产精品av视频在线免费观看| 国产乱来视频区| 欧美精品人与动牲交sv欧美| 亚洲欧美中文字幕日韩二区| 国产高潮美女av| 免费观看的影片在线观看| 久久女婷五月综合色啪小说| 欧美一区二区亚洲| 久久这里有精品视频免费| 一本色道久久久久久精品综合| 内地一区二区视频在线| 搡女人真爽免费视频火全软件| 免费看av在线观看网站| 国产精品福利在线免费观看| 性色av一级| freevideosex欧美| 精品人妻熟女av久视频| 国产爱豆传媒在线观看| 春色校园在线视频观看| 黄色日韩在线| 亚洲国产最新在线播放| 99视频精品全部免费 在线| 男男h啪啪无遮挡| 久久久久国产网址| 91在线精品国自产拍蜜月| 人妻一区二区av| av一本久久久久| 久久婷婷青草| 激情五月婷婷亚洲| 91精品一卡2卡3卡4卡| 久久久精品94久久精品| 久热这里只有精品99| 中文精品一卡2卡3卡4更新| 国产乱人偷精品视频| 少妇人妻 视频| 晚上一个人看的免费电影| 亚洲精品,欧美精品| 秋霞在线观看毛片| 一区二区三区精品91| 日韩亚洲欧美综合| 亚洲av日韩在线播放| 婷婷色综合www| 人体艺术视频欧美日本| 国语对白做爰xxxⅹ性视频网站| 久久女婷五月综合色啪小说| 国产免费视频播放在线视频| 国产探花极品一区二区| 免费观看无遮挡的男女| 亚洲色图av天堂| 最近中文字幕高清免费大全6| 高清视频免费观看一区二区| 久久青草综合色| 国产成人freesex在线| 18禁在线播放成人免费| 免费看光身美女| 我要看日韩黄色一级片| 亚洲久久久国产精品| av又黄又爽大尺度在线免费看| 亚洲欧美日韩另类电影网站 | 国产黄频视频在线观看| 美女福利国产在线 | 午夜激情久久久久久久| 欧美丝袜亚洲另类| 少妇的逼水好多| 乱码一卡2卡4卡精品| av天堂中文字幕网| 激情五月婷婷亚洲| 美女视频免费永久观看网站| 欧美 日韩 精品 国产| 午夜免费观看性视频| 一区在线观看完整版| 精品少妇久久久久久888优播| 成年免费大片在线观看| 高清在线视频一区二区三区| 国产av精品麻豆| 中文欧美无线码| 91久久精品国产一区二区三区| 久久韩国三级中文字幕| 午夜福利视频精品| 国产高清三级在线| 免费大片黄手机在线观看| 亚洲欧美日韩无卡精品| 午夜激情久久久久久久| 水蜜桃什么品种好| 精品人妻一区二区三区麻豆| 久久国产精品大桥未久av | 最近最新中文字幕免费大全7| 高清在线视频一区二区三区| 少妇人妻久久综合中文| 精品亚洲成a人片在线观看 | 欧美激情国产日韩精品一区| 日韩成人av中文字幕在线观看| 伦精品一区二区三区| 欧美日韩视频高清一区二区三区二| 不卡视频在线观看欧美| av在线播放精品| 九草在线视频观看| 嫩草影院入口| 精品国产一区二区三区久久久樱花 | 97精品久久久久久久久久精品| 国产爱豆传媒在线观看| 韩国av在线不卡| 国产黄色免费在线视频| 欧美3d第一页| av国产免费在线观看| 香蕉精品网在线| 99热国产这里只有精品6| 极品教师在线视频| 视频区图区小说| 涩涩av久久男人的天堂| 自拍欧美九色日韩亚洲蝌蚪91 | 男人舔奶头视频| 免费在线观看成人毛片| 成人黄色视频免费在线看| 精品99又大又爽又粗少妇毛片| 少妇人妻 视频| 老师上课跳d突然被开到最大视频| 我的女老师完整版在线观看| 在线观看免费视频网站a站| 欧美国产精品一级二级三级 | 亚洲欧美精品专区久久| 美女视频免费永久观看网站| 久久久成人免费电影| 精品亚洲成国产av| 自拍欧美九色日韩亚洲蝌蚪91 | 午夜福利在线在线| 婷婷色av中文字幕| 日本wwww免费看| 精品亚洲乱码少妇综合久久| 久久久久视频综合| 午夜免费男女啪啪视频观看| 日韩成人av中文字幕在线观看| www.av在线官网国产| 欧美成人a在线观看| 亚洲国产日韩一区二区| 日韩欧美精品免费久久| 国产成人精品久久久久久| 人妻少妇偷人精品九色| 亚洲欧美日韩无卡精品| 午夜精品国产一区二区电影| 成人国产麻豆网| 尤物成人国产欧美一区二区三区| 久久人人爽人人爽人人片va| av专区在线播放| 偷拍熟女少妇极品色| 99热网站在线观看| 丝瓜视频免费看黄片| 97超视频在线观看视频| 国产精品人妻久久久久久| 亚洲国产精品一区三区| 精品人妻一区二区三区麻豆| 3wmmmm亚洲av在线观看| 最近最新中文字幕大全电影3| 午夜激情久久久久久久| 伦精品一区二区三区| av在线播放精品| 亚洲久久久国产精品| 少妇裸体淫交视频免费看高清| 久久精品熟女亚洲av麻豆精品| 成人国产av品久久久| 丰满少妇做爰视频| 寂寞人妻少妇视频99o| 久久精品夜色国产| 五月伊人婷婷丁香| 国产色爽女视频免费观看| 国产精品三级大全| 亚洲欧美日韩东京热| 国产免费一区二区三区四区乱码| av网站免费在线观看视频| 亚洲欧美日韩另类电影网站 | 亚洲精品成人av观看孕妇| 这个男人来自地球电影免费观看 | 秋霞在线观看毛片| 精品国产乱码久久久久久小说| 晚上一个人看的免费电影| 久久精品久久久久久噜噜老黄| 如何舔出高潮| 观看av在线不卡| 精品久久国产蜜桃| 18禁动态无遮挡网站| 日日啪夜夜撸| 啦啦啦啦在线视频资源| 国产 一区精品| 亚洲av不卡在线观看| 少妇人妻 视频| 内地一区二区视频在线| 最黄视频免费看| 免费看日本二区| 精品人妻视频免费看| 日韩一区二区三区影片| 国产爱豆传媒在线观看| 少妇 在线观看| 亚洲精品乱码久久久久久按摩| 久久精品夜色国产| 久久久午夜欧美精品| 午夜激情福利司机影院| 91aial.com中文字幕在线观看| 丝袜脚勾引网站| 日韩欧美 国产精品| 一区二区三区乱码不卡18| 女性生殖器流出的白浆| 午夜福利视频精品| 老司机影院毛片| 亚洲va在线va天堂va国产| 国产精品一区二区在线观看99| 18禁在线播放成人免费| 国产av一区二区精品久久 | 国产免费视频播放在线视频| 欧美激情国产日韩精品一区| 欧美一区二区亚洲| 少妇的逼水好多| 99久久精品热视频| 国产v大片淫在线免费观看| av免费观看日本| 少妇人妻精品综合一区二区| kizo精华| 99九九线精品视频在线观看视频| 亚洲国产日韩一区二区| 美女xxoo啪啪120秒动态图| 国产精品国产av在线观看| 在线观看国产h片| 高清视频免费观看一区二区| 一级毛片久久久久久久久女| 国产毛片在线视频| 九色成人免费人妻av| 一级毛片aaaaaa免费看小| 高清av免费在线| 日日啪夜夜爽| 搡女人真爽免费视频火全软件| 极品教师在线视频| 亚洲熟女精品中文字幕| 天堂俺去俺来也www色官网| 久久久亚洲精品成人影院| 国产老妇伦熟女老妇高清| 永久网站在线| 丝袜脚勾引网站| 中文天堂在线官网| 色婷婷久久久亚洲欧美| 午夜福利在线观看免费完整高清在| 婷婷色综合www| 天堂中文最新版在线下载| 美女cb高潮喷水在线观看| 天堂中文最新版在线下载| 男人爽女人下面视频在线观看| 日本黄大片高清| 五月天丁香电影| 免费观看在线日韩| av不卡在线播放| 中文天堂在线官网| 久久精品夜色国产| 亚洲精品乱码久久久久久按摩| 国产精品国产三级国产专区5o| 亚洲真实伦在线观看| 99久久人妻综合| 久久人人爽人人爽人人片va| 高清视频免费观看一区二区| 高清欧美精品videossex| 亚洲激情五月婷婷啪啪| 伊人久久国产一区二区| 舔av片在线| 国产熟女欧美一区二区| 日本黄色片子视频| 久久久久视频综合| 欧美激情极品国产一区二区三区 | 22中文网久久字幕| 国产精品蜜桃在线观看| 夫妻午夜视频| 夫妻性生交免费视频一级片| 韩国高清视频一区二区三区| 成人国产av品久久久| 亚洲不卡免费看| 亚洲国产欧美人成| 99精国产麻豆久久婷婷| 日本黄色片子视频| 亚洲自偷自拍三级| 亚洲国产日韩一区二区| 亚洲精品日本国产第一区| 成人国产麻豆网| 精品99又大又爽又粗少妇毛片| 2018国产大陆天天弄谢| 九草在线视频观看| 亚洲欧美中文字幕日韩二区| 精品一区二区免费观看| 欧美变态另类bdsm刘玥| 亚洲欧美清纯卡通| 哪个播放器可以免费观看大片| 国产色婷婷99| 亚洲婷婷狠狠爱综合网| 免费人妻精品一区二区三区视频| 久久国产精品男人的天堂亚洲 | 寂寞人妻少妇视频99o| 久久久久久久大尺度免费视频| 精品久久国产蜜桃| 国产av码专区亚洲av| 国产精品久久久久久精品古装| 麻豆国产97在线/欧美| 欧美最新免费一区二区三区| 99热这里只有是精品在线观看| 久久久久视频综合| 免费大片黄手机在线观看| 亚洲精品成人av观看孕妇| www.色视频.com| 国产探花极品一区二区| 中文乱码字字幕精品一区二区三区| 日本wwww免费看| 国产成人一区二区在线| 丝袜脚勾引网站| 99热网站在线观看| 久久鲁丝午夜福利片| 亚洲欧美中文字幕日韩二区| 日本wwww免费看| 在线精品无人区一区二区三 | 黄片wwwwww|