• <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一区二区三区视频| 高清不卡的av网站| 最近的中文字幕免费完整| 亚洲欧美色中文字幕在线| 国产精品一区二区在线观看99| 国产精品无大码| svipshipincom国产片| 女性被躁到高潮视频| 久久久国产欧美日韩av| 亚洲人成77777在线视频| 婷婷色综合大香蕉| 一区二区三区四区激情视频| 亚洲成人一二三区av| 亚洲欧美成人精品一区二区| 一级片免费观看大全| 成人国语在线视频| 国产精品嫩草影院av在线观看| 国产野战对白在线观看| 制服丝袜香蕉在线| 国产男女内射视频| 国产亚洲av高清不卡| 在线观看免费视频网站a站| 男女之事视频高清在线观看 | 免费不卡黄色视频| 又黄又粗又硬又大视频| 亚洲精品一区蜜桃| 免费女性裸体啪啪无遮挡网站| 国产成人91sexporn| 青青草视频在线视频观看| 丝袜脚勾引网站| 国产精品久久久av美女十八| 男的添女的下面高潮视频| 国产精品人妻久久久影院| 一级毛片我不卡| 乱人伦中国视频| 国产精品.久久久| 少妇被粗大猛烈的视频| 久久精品国产综合久久久| 黑人巨大精品欧美一区二区蜜桃| 久久久久久久久久久免费av| 中国三级夫妇交换| 9热在线视频观看99| 国产又爽黄色视频| 日韩av在线免费看完整版不卡| 国产精品欧美亚洲77777| 久久久久精品性色| 天天躁狠狠躁夜夜躁狠狠躁| 美女大奶头黄色视频| 2018国产大陆天天弄谢| 青春草国产在线视频| 亚洲精华国产精华液的使用体验| av免费观看日本| xxxhd国产人妻xxx| 乱人伦中国视频| 大陆偷拍与自拍| e午夜精品久久久久久久| 天天躁日日躁夜夜躁夜夜| 丁香六月天网| 亚洲av欧美aⅴ国产| 日韩av免费高清视频| 久久久久精品性色| 欧美黑人欧美精品刺激| 亚洲天堂av无毛| 日本爱情动作片www.在线观看| 国产精品蜜桃在线观看| 人体艺术视频欧美日本| 可以免费在线观看a视频的电影网站 | 一本一本久久a久久精品综合妖精| 超色免费av| 久久综合国产亚洲精品| 亚洲美女搞黄在线观看| 大话2 男鬼变身卡| 在线观看国产h片| 国产精品一二三区在线看| 尾随美女入室| 少妇人妻久久综合中文| 国产老妇伦熟女老妇高清| 日韩精品免费视频一区二区三区| 18在线观看网站| 人人澡人人妻人| 国产精品蜜桃在线观看| 精品国产露脸久久av麻豆| 日韩大片免费观看网站| 国产精品久久久久成人av| 国产免费又黄又爽又色| 一区二区三区精品91| 成人18禁高潮啪啪吃奶动态图| 在线观看www视频免费| 国产探花极品一区二区| 亚洲欧洲国产日韩| 欧美国产精品va在线观看不卡| 男女无遮挡免费网站观看| 母亲3免费完整高清在线观看| 久久久精品94久久精品| 国产一级毛片在线| 人体艺术视频欧美日本| 2018国产大陆天天弄谢| 欧美成人精品欧美一级黄| 19禁男女啪啪无遮挡网站| 亚洲美女视频黄频| 不卡av一区二区三区| 国产精品久久久久久精品古装| 五月天丁香电影| 婷婷色综合大香蕉| 视频区图区小说| 观看av在线不卡| 可以免费在线观看a视频的电影网站 | 狂野欧美激情性xxxx| 一级毛片电影观看| 9191精品国产免费久久| 啦啦啦啦在线视频资源| 精品一区二区三卡| 夫妻性生交免费视频一级片| 超色免费av| 少妇的丰满在线观看| 啦啦啦在线免费观看视频4| 国产精品99久久99久久久不卡 | 亚洲国产av影院在线观看| 亚洲情色 制服丝袜| 欧美日韩av久久| 午夜福利视频在线观看免费| 精品酒店卫生间| 伊人亚洲综合成人网| 亚洲成国产人片在线观看| 国产不卡av网站在线观看| 一级爰片在线观看| 国产探花极品一区二区| 国产探花极品一区二区| 少妇 在线观看| av线在线观看网站| 男女无遮挡免费网站观看| 国产女主播在线喷水免费视频网站| 美女主播在线视频| 中文精品一卡2卡3卡4更新| netflix在线观看网站| 老司机亚洲免费影院| 少妇人妻精品综合一区二区| 王馨瑶露胸无遮挡在线观看| 色精品久久人妻99蜜桃| 波多野结衣一区麻豆| 成人亚洲欧美一区二区av| 久久99精品国语久久久| 日韩av免费高清视频| 最近手机中文字幕大全| 下体分泌物呈黄色| 日韩视频在线欧美| videosex国产| 如日韩欧美国产精品一区二区三区| 国产成人欧美在线观看 | 精品福利永久在线观看| e午夜精品久久久久久久| 女人爽到高潮嗷嗷叫在线视频| 伊人久久大香线蕉亚洲五| 亚洲伊人色综图| 午夜福利一区二区在线看| 一级毛片黄色毛片免费观看视频| 久久99精品国语久久久| 夫妻午夜视频| 美女国产高潮福利片在线看| 精品人妻一区二区三区麻豆| 亚洲在久久综合| 天天躁夜夜躁狠狠久久av| 精品午夜福利在线看| 日本爱情动作片www.在线观看| 亚洲欧美一区二区三区久久| 超碰97精品在线观看| 一区福利在线观看| 免费高清在线观看日韩| 哪个播放器可以免费观看大片| 777米奇影视久久| 天美传媒精品一区二区| 国产无遮挡羞羞视频在线观看| 欧美在线黄色| 伦理电影大哥的女人| 人成视频在线观看免费观看| svipshipincom国产片| 一区二区三区乱码不卡18| 18禁动态无遮挡网站| 蜜桃在线观看..| 男女下面插进去视频免费观看| 制服诱惑二区| 日日摸夜夜添夜夜爱| 十八禁高潮呻吟视频| 黄片小视频在线播放| 男女边摸边吃奶| 精品久久蜜臀av无| 午夜91福利影院| 熟妇人妻不卡中文字幕| 亚洲国产日韩一区二区| 国产黄频视频在线观看| 一级毛片电影观看| 女人爽到高潮嗷嗷叫在线视频| 极品少妇高潮喷水抽搐| 宅男免费午夜| www.av在线官网国产| 欧美精品人与动牲交sv欧美| 男女边吃奶边做爰视频| 日韩免费高清中文字幕av| 精品国产超薄肉色丝袜足j| 两个人免费观看高清视频| 欧美精品一区二区大全| 国产精品亚洲av一区麻豆 | 成人午夜精彩视频在线观看| 看十八女毛片水多多多| 欧美人与性动交α欧美精品济南到| 又粗又硬又长又爽又黄的视频| 精品久久久精品久久久| 亚洲国产精品国产精品| 赤兔流量卡办理| 日韩,欧美,国产一区二区三区| 这个男人来自地球电影免费观看 | 欧美精品高潮呻吟av久久| 欧美精品一区二区大全| 啦啦啦在线观看免费高清www| 亚洲国产欧美网| 在线观看人妻少妇| 精品免费久久久久久久清纯 | 啦啦啦 在线观看视频| 日本av免费视频播放| 亚洲综合色网址| 国产精品女同一区二区软件| 高清欧美精品videossex| 在线亚洲精品国产二区图片欧美| 性高湖久久久久久久久免费观看| 人成视频在线观看免费观看| 少妇人妻久久综合中文| 在线观看免费高清a一片| 纯流量卡能插随身wifi吗| 99国产精品免费福利视频| 午夜av观看不卡| 天美传媒精品一区二区| 免费看av在线观看网站| 日韩,欧美,国产一区二区三区| 亚洲精品,欧美精品| www.精华液| 午夜福利视频精品| videos熟女内射| 一级毛片黄色毛片免费观看视频| 99精品久久久久人妻精品| 国产精品 欧美亚洲| 男人爽女人下面视频在线观看| 午夜精品国产一区二区电影| 国产成人精品在线电影| 国产成人91sexporn| 婷婷色综合www| 宅男免费午夜| 这个男人来自地球电影免费观看 | 国产又色又爽无遮挡免| 亚洲一码二码三码区别大吗| 国产精品女同一区二区软件| 亚洲精品国产av蜜桃| 人妻一区二区av| 国产黄频视频在线观看| 成人18禁高潮啪啪吃奶动态图| 老司机靠b影院| 国产成人精品在线电影| 日本vs欧美在线观看视频| 久久精品亚洲熟妇少妇任你| 欧美97在线视频| 狠狠婷婷综合久久久久久88av| 99精品久久久久人妻精品| netflix在线观看网站| 国产精品麻豆人妻色哟哟久久| 你懂的网址亚洲精品在线观看| 精品国产乱码久久久久久小说| 校园人妻丝袜中文字幕| 亚洲国产精品国产精品| 黄频高清免费视频| 欧美精品av麻豆av| 国产乱来视频区| 午夜免费男女啪啪视频观看| 亚洲精品自拍成人| 少妇猛男粗大的猛烈进出视频| 国产在线一区二区三区精| 在线天堂最新版资源| 国产精品免费大片| 国产精品熟女久久久久浪| 国产精品麻豆人妻色哟哟久久| 欧美精品一区二区大全| 亚洲国产欧美在线一区| av国产精品久久久久影院| 超碰97精品在线观看| 在线天堂中文资源库| 大码成人一级视频| 国产精品熟女久久久久浪| 成年动漫av网址| 欧美精品人与动牲交sv欧美| 青春草亚洲视频在线观看| 成年av动漫网址| 日韩人妻精品一区2区三区| 色播在线永久视频| 18禁国产床啪视频网站| 日本wwww免费看| 麻豆乱淫一区二区| 成年美女黄网站色视频大全免费| xxxhd国产人妻xxx| 精品国产一区二区三区四区第35| 成人手机av| 又黄又粗又硬又大视频| 捣出白浆h1v1| 亚洲av福利一区| 国产欧美日韩一区二区三区在线| 美女大奶头黄色视频| 欧美日韩国产mv在线观看视频| 国产成人一区二区在线| xxx大片免费视频| 欧美日韩亚洲高清精品| 日韩av不卡免费在线播放| av国产精品久久久久影院| 午夜精品国产一区二区电影| 天天添夜夜摸| xxx大片免费视频| 一边摸一边抽搐一进一出视频| 赤兔流量卡办理| 国产极品天堂在线| 啦啦啦中文免费视频观看日本| 国产爽快片一区二区三区| 国产免费现黄频在线看| 成人国语在线视频| 丰满饥渴人妻一区二区三| 女人久久www免费人成看片| 亚洲国产av影院在线观看| 一级毛片我不卡| 欧美精品高潮呻吟av久久| 一级片免费观看大全| 两个人看的免费小视频| 国产一级毛片在线| 午夜福利在线免费观看网站| 桃花免费在线播放| 国产精品嫩草影院av在线观看| 精品人妻在线不人妻| 国产精品一国产av| 亚洲成人手机| 天天躁狠狠躁夜夜躁狠狠躁| 天天躁夜夜躁狠狠久久av| 看免费av毛片| 国产日韩欧美亚洲二区| 午夜福利网站1000一区二区三区| 毛片一级片免费看久久久久| 久久毛片免费看一区二区三区| 少妇被粗大猛烈的视频| 午夜福利视频精品| 99久久人妻综合| 国产精品 国内视频| 中文字幕av电影在线播放| 国产又爽黄色视频| 99精品久久久久人妻精品| 一边摸一边抽搐一进一出视频| 捣出白浆h1v1| 国产男人的电影天堂91| 亚洲精品国产区一区二| 亚洲第一区二区三区不卡| 国产成人av激情在线播放| 国产一区有黄有色的免费视频| 成人黄色视频免费在线看| 久久精品亚洲熟妇少妇任你| 欧美人与善性xxx| 亚洲成国产人片在线观看| 999精品在线视频| 男女下面插进去视频免费观看| 一二三四中文在线观看免费高清| 亚洲精华国产精华液的使用体验| 人人澡人人妻人| 欧美黑人欧美精品刺激| 国精品久久久久久国模美| 九草在线视频观看| 99久久99久久久精品蜜桃| 国产男女超爽视频在线观看| 咕卡用的链子| 在线看a的网站| 色婷婷久久久亚洲欧美| 美女大奶头黄色视频| 美女国产高潮福利片在线看| 麻豆av在线久日| 精品少妇一区二区三区视频日本电影 | 成人国产麻豆网| 午夜精品国产一区二区电影| 亚洲伊人久久精品综合| 国产精品麻豆人妻色哟哟久久| 国产成人欧美在线观看 | 亚洲欧美精品自产自拍| 国产片特级美女逼逼视频| 欧美精品一区二区大全| 麻豆精品久久久久久蜜桃| 亚洲精品,欧美精品| 免费看av在线观看网站| 国产国语露脸激情在线看| 99久久人妻综合| 亚洲av男天堂| 国产xxxxx性猛交| 美女扒开内裤让男人捅视频| 国产又色又爽无遮挡免| 精品少妇久久久久久888优播| 19禁男女啪啪无遮挡网站| 久久国产亚洲av麻豆专区| 看十八女毛片水多多多| 一本大道久久a久久精品| 中文字幕人妻丝袜制服| 97人妻天天添夜夜摸| 亚洲av国产av综合av卡| 免费看av在线观看网站| 少妇人妻 视频| 亚洲专区中文字幕在线 | 欧美精品高潮呻吟av久久| 午夜激情久久久久久久| 蜜桃在线观看..| 人人澡人人妻人| 国产一区二区三区综合在线观看| 91精品伊人久久大香线蕉| 国产av精品麻豆| 热99国产精品久久久久久7| 中文天堂在线官网| 青春草国产在线视频| 日本色播在线视频| av线在线观看网站| 中文精品一卡2卡3卡4更新| 两个人免费观看高清视频| 亚洲精品国产色婷婷电影| 久久av网站| xxxhd国产人妻xxx| 国产av精品麻豆| 色婷婷久久久亚洲欧美| 18在线观看网站| 老汉色∧v一级毛片| 精品国产乱码久久久久久小说| 伊人久久国产一区二区| 啦啦啦在线观看免费高清www| 国产精品久久久人人做人人爽| 久久综合国产亚洲精品| 亚洲成色77777| 一本久久精品| 母亲3免费完整高清在线观看| 亚洲熟女毛片儿| 国产精品免费大片| 少妇被粗大的猛进出69影院| 观看美女的网站| 久久久国产精品麻豆| 日韩免费高清中文字幕av| 中文天堂在线官网| 超碰97精品在线观看| 亚洲美女视频黄频| 日韩 欧美 亚洲 中文字幕| 国产视频首页在线观看| 精品人妻熟女毛片av久久网站| 在线观看免费高清a一片| 中文字幕人妻丝袜制服| 免费黄色在线免费观看| 精品国产乱码久久久久久小说| 丁香六月天网| av一本久久久久| 99re6热这里在线精品视频| 啦啦啦视频在线资源免费观看| 午夜福利在线免费观看网站| 亚洲欧美中文字幕日韩二区| 老汉色∧v一级毛片| 日韩伦理黄色片| 午夜福利视频在线观看免费| 伦理电影免费视频| 美女高潮到喷水免费观看| 一区二区三区乱码不卡18| 久久99一区二区三区| 亚洲精品第二区| 国产熟女午夜一区二区三区| 丁香六月天网| √禁漫天堂资源中文www| 亚洲国产精品999| 亚洲成人手机| 亚洲一码二码三码区别大吗| 丰满饥渴人妻一区二区三| 国产精品秋霞免费鲁丝片| 搡老岳熟女国产| 中文字幕最新亚洲高清| 午夜福利免费观看在线| av女优亚洲男人天堂| 亚洲美女黄色视频免费看| 人人妻,人人澡人人爽秒播 | 日本av手机在线免费观看| 亚洲av电影在线进入| 2021少妇久久久久久久久久久| 婷婷色麻豆天堂久久| 女人被躁到高潮嗷嗷叫费观| 精品午夜福利在线看| 久久av网站| netflix在线观看网站| 美女大奶头黄色视频| 黄色 视频免费看| 日本vs欧美在线观看视频| 午夜福利乱码中文字幕| 亚洲精品av麻豆狂野| 国产有黄有色有爽视频| 国产乱来视频区| 亚洲国产av影院在线观看| 一区福利在线观看| 久久97久久精品| 制服丝袜香蕉在线| 亚洲av综合色区一区| 成人国产av品久久久| 成人免费观看视频高清| 成年人午夜在线观看视频| 91aial.com中文字幕在线观看| 新久久久久国产一级毛片| 久久久久精品国产欧美久久久 | 亚洲精品国产av蜜桃| av又黄又爽大尺度在线免费看| 国产伦理片在线播放av一区| 一区二区三区乱码不卡18| 亚洲av国产av综合av卡| 亚洲专区中文字幕在线 | 亚洲精品美女久久久久99蜜臀 | 嫩草影视91久久| 亚洲国产中文字幕在线视频| 国产在线视频一区二区| 色婷婷久久久亚洲欧美| 亚洲一卡2卡3卡4卡5卡精品中文| 欧美97在线视频| 最近中文字幕高清免费大全6| 人人妻人人澡人人爽人人夜夜| 97人妻天天添夜夜摸| 久久精品久久久久久噜噜老黄| 日韩 欧美 亚洲 中文字幕| 久久久久久久精品精品| 免费观看人在逋| 久久精品久久久久久久性| 最近最新中文字幕免费大全7| 欧美老熟妇乱子伦牲交| 美国免费a级毛片| 免费高清在线观看视频在线观看| 国产日韩欧美亚洲二区| 9色porny在线观看| 男女之事视频高清在线观看 | 91成人精品电影| 亚洲国产精品一区三区| 黑丝袜美女国产一区| 最近的中文字幕免费完整| 久久这里只有精品19| 国产又色又爽无遮挡免| 大片免费播放器 马上看| 亚洲精品自拍成人| 极品少妇高潮喷水抽搐| 亚洲情色 制服丝袜| 免费女性裸体啪啪无遮挡网站| 妹子高潮喷水视频| 自拍欧美九色日韩亚洲蝌蚪91| 91精品三级在线观看| 色婷婷久久久亚洲欧美| 免费在线观看黄色视频的| 精品一品国产午夜福利视频| 91精品国产国语对白视频| 色精品久久人妻99蜜桃| 亚洲少妇的诱惑av| 欧美精品av麻豆av| 一级毛片黄色毛片免费观看视频| 亚洲精品国产区一区二| 日韩av免费高清视频| 日韩熟女老妇一区二区性免费视频| 97人妻天天添夜夜摸| 精品久久久久久电影网| avwww免费| 99久久综合免费| 丝袜人妻中文字幕| 在线观看人妻少妇| xxxhd国产人妻xxx| 母亲3免费完整高清在线观看| av线在线观看网站| 黑人欧美特级aaaaaa片| 狠狠婷婷综合久久久久久88av| 老汉色∧v一级毛片| 熟女少妇亚洲综合色aaa.| 亚洲中文av在线| 亚洲五月色婷婷综合| 日韩大片免费观看网站| 欧美日本中文国产一区发布| 欧美精品亚洲一区二区| 国产成人免费观看mmmm| 99re6热这里在线精品视频| 亚洲国产精品成人久久小说| 久久这里只有精品19| 久久av网站| 中文乱码字字幕精品一区二区三区| 日本一区二区免费在线视频| 蜜桃在线观看..| av不卡在线播放| 免费在线观看黄色视频的| 国产成人午夜福利电影在线观看| 美国免费a级毛片| av免费观看日本| 欧美变态另类bdsm刘玥| 无限看片的www在线观看| 如日韩欧美国产精品一区二区三区| 美女中出高潮动态图| 王馨瑶露胸无遮挡在线观看| 欧美精品一区二区免费开放| 精品一区二区三卡| 王馨瑶露胸无遮挡在线观看| 国产精品无大码| 久久精品aⅴ一区二区三区四区| 咕卡用的链子| 美女主播在线视频| 免费看不卡的av| 欧美 亚洲 国产 日韩一| 日本一区二区免费在线视频| 亚洲成人国产一区在线观看 | 午夜福利乱码中文字幕| 女人爽到高潮嗷嗷叫在线视频| 欧美人与性动交α欧美精品济南到| 欧美变态另类bdsm刘玥| 欧美 亚洲 国产 日韩一| 人人妻人人澡人人看| 18禁国产床啪视频网站|