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

    基于軟硬件協(xié)同設(shè)計(jì)的解釋器指令分派方法①

    2016-12-05 03:17:31靳國(guó)杰章隆兵
    高技術(shù)通訊 2016年3期
    關(guān)鍵詞:分派表項(xiàng)字節(jié)

    傅 杰 靳國(guó)杰 章隆兵* 王 劍*

    (*中國(guó)科學(xué)院大學(xué) 北京 100049)(**計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京 100190)(***中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京 100190)(****龍芯中科技術(shù)有限公司 北京 100095)

    ?

    基于軟硬件協(xié)同設(shè)計(jì)的解釋器指令分派方法①

    傅 杰②******靳國(guó)杰****章隆兵*****王 劍*****

    (*中國(guó)科學(xué)院大學(xué) 北京 100049)(**計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京 100190)(***中國(guó)科學(xué)院計(jì)算技術(shù)研究所 北京 100190)(****龍芯中科技術(shù)有限公司 北京 100095)

    為了降低指令分派造成的運(yùn)行開(kāi)銷以提高解釋器的性能,提出了一種采用軟硬件協(xié)同設(shè)計(jì)的解釋器指令分派方法。其核心思想是在軟件層面通過(guò)對(duì)指令分派表進(jìn)行優(yōu)化以消除了代價(jià)較高的地址常量加載操作,在硬件層面通過(guò)擴(kuò)展處理器的訪存指令進(jìn)一步實(shí)現(xiàn)基于硬件支持的訪存加速。軟硬件協(xié)同設(shè)計(jì)可以最大限度地降低由指令分派引入的運(yùn)行時(shí)開(kāi)銷,從而提升解釋執(zhí)行的效率。試驗(yàn)結(jié)果表明,該方法能夠顯著提升解釋器的性能。對(duì)于SPECjvm98和DaCapo測(cè)試集,解釋器總體性能提升了11.5%,且單項(xiàng)性能的最大提升幅度高達(dá)15.4%。該方法通用性強(qiáng),實(shí)現(xiàn)代價(jià)低,適用于現(xiàn)代主流處理器平臺(tái)上高性能解釋器的設(shè)計(jì)和優(yōu)化。

    解釋器, 指令分派, 軟硬件協(xié)同設(shè)計(jì), 虛擬機(jī), 優(yōu)化

    0 引 言

    解釋器(interpreter)是一種處理計(jì)算機(jī)語(yǔ)言的系統(tǒng)軟件,常用于高級(jí)編程語(yǔ)言的實(shí)現(xiàn)[1-3]。從20世紀(jì)60年代著名的Lisp語(yǔ)言到新興的Java、Python及JavaScript等編程語(yǔ)言,均使用解釋器構(gòu)建其執(zhí)行引擎。由于具有結(jié)構(gòu)簡(jiǎn)單、易于實(shí)現(xiàn)以及運(yùn)行時(shí)資源消耗少等優(yōu)勢(shì)[4],解釋器被廣泛應(yīng)用于各種實(shí)際系統(tǒng)中。解釋器和即時(shí)(just-in-time, JIT)編譯器[5]通常以互補(bǔ)的形式共同組成Java等高級(jí)語(yǔ)言虛擬機(jī)[6-8]的執(zhí)行引擎。應(yīng)用程序由解釋器開(kāi)始執(zhí)行,JIT編譯器僅編譯程序中頻繁執(zhí)行的部分。因此,解釋執(zhí)行的速度直接影響系統(tǒng)的啟動(dòng)性能。對(duì)于客戶端瀏覽器中的JavaScript引擎,解釋器的性能在很大程度上決定了系統(tǒng)的響應(yīng)速度,直接影響用戶的使用體驗(yàn)。與此同時(shí),在工業(yè)機(jī)器人和高檔數(shù)控機(jī)床等領(lǐng)域,控制指令和加工程序的執(zhí)行也普遍采用解釋器來(lái)實(shí)現(xiàn)。解釋器的性能決定了智能化控制的實(shí)時(shí)性和自動(dòng)化生產(chǎn)的效率。隨著人類社會(huì)信息化的不斷發(fā)展,由解釋器運(yùn)行速度慢而導(dǎo)致的性能和效率等問(wèn)題將變得越來(lái)越普遍和突出。因此,進(jìn)行解釋器的優(yōu)化以改善其性能,對(duì)提高生產(chǎn)效率具有十分重要的意義。

    解釋執(zhí)行的基本單位以字節(jié)碼最為常見(jiàn)。每個(gè)字節(jié)碼都對(duì)應(yīng)一段特定的本地指令序列。字節(jié)碼的解釋執(zhí)行最終由其所對(duì)應(yīng)的本地指令序列在硬件上的執(zhí)行來(lái)實(shí)現(xiàn)。解釋執(zhí)行分為取字節(jié)碼、指令分派、取操作數(shù)和執(zhí)行等四個(gè)步驟。其中,指令分派是指當(dāng)前字節(jié)碼執(zhí)行完畢后,查找并跳轉(zhuǎn)到下一個(gè)字節(jié)碼的本地指令序列入口的過(guò)程。指令分派的頻繁發(fā)生會(huì)引入大量額外的運(yùn)行時(shí)開(kāi)銷,嚴(yán)重影響解釋執(zhí)行的性能。因此,對(duì)指令分派進(jìn)行優(yōu)化是提升解釋器性能的有效途徑。本文研究了解釋器指令分派的優(yōu)化技術(shù),提出了一種采用軟硬件協(xié)同設(shè)計(jì)的指令分派方法。實(shí)驗(yàn)結(jié)果表明,本文方法大幅降低了指令分派時(shí)查找本地指令序列入口地址的開(kāi)銷,顯著提升了解釋器的性能。

    1 相關(guān)工作

    早期的解釋器大都采用Switch結(jié)構(gòu)來(lái)實(shí)現(xiàn)[9]。20世紀(jì)70年代,Bell[1]研究發(fā)現(xiàn)Switch結(jié)構(gòu)的解釋器在指令分派時(shí)存在二次跳轉(zhuǎn)和邊界檢查等冗余操作,嚴(yán)重影響解釋器的性能,從而提出了著名的線索化代碼(threaded code)結(jié)構(gòu)的解釋器[1],以加速指令分派的過(guò)程。線索化代碼結(jié)構(gòu)的解釋器通過(guò)在本地指令序列的末尾獨(dú)立實(shí)現(xiàn)指令分派,消除了Switch結(jié)構(gòu)解釋器中的冗余操作,從而獲得了更高的性能。此后,線索化代碼結(jié)構(gòu)成為高性能解釋器設(shè)計(jì)的主流。

    然而,線索化代碼結(jié)構(gòu)的解釋器進(jìn)行指令分派時(shí)依然存在較大開(kāi)銷。為了進(jìn)一步提升指令分派的速度,文獻(xiàn)[2]提出了超級(jí)指令(superinstruction)技術(shù)。該技術(shù)將頻繁執(zhí)行的連續(xù)字節(jié)碼序列等效替換為一條新定義的字節(jié)碼(稱為“超級(jí)指令”),以消除被替換的字節(jié)碼之間的指令分派。隨后,Casey等人[3]的研究表明,由于指令分派中用于實(shí)現(xiàn)跳轉(zhuǎn)功能的間接轉(zhuǎn)移指令存在多個(gè)跳轉(zhuǎn)目標(biāo)地址,導(dǎo)致處理器對(duì)間接轉(zhuǎn)移猜測(cè)的正確率下降,從而降低解釋器的性能。針對(duì)上述問(wèn)題,他們提出了指令冗余(instruction redundancy)技術(shù),通過(guò)增加若干語(yǔ)義功能相同的冗余的字節(jié)碼,以減少間接轉(zhuǎn)移指令可能的跳轉(zhuǎn)目標(biāo)數(shù)目,從而提升分支預(yù)測(cè)的準(zhǔn)確性。但是,由于受字節(jié)碼中操作碼域編碼長(zhǎng)度的限制,實(shí)際能夠提供的超級(jí)指令或冗余字節(jié)碼的數(shù)量十分有限,因而其優(yōu)化空間較小。

    文獻(xiàn)[10]設(shè)計(jì)了一種新型的分支預(yù)測(cè)器。該方法利用字節(jié)碼指針來(lái)區(qū)分不同的轉(zhuǎn)移場(chǎng)景,并在解釋器中插入引導(dǎo)指令來(lái)提升處理器對(duì)間接轉(zhuǎn)移猜測(cè)的正確率。然而該方法要求對(duì)處理器內(nèi)部的分支預(yù)測(cè)器進(jìn)行定制,硬件實(shí)現(xiàn)開(kāi)銷較大。此外,最新的研究結(jié)果表明[11],隨著分支預(yù)測(cè)技術(shù)的不斷發(fā)展,在當(dāng)今主流的處理器上,間接轉(zhuǎn)移猜測(cè)已不再是制約解釋器性能最主要的因素,因而其優(yōu)化空間非常有限。

    針對(duì)上述研究的不足,本文以降低獲取本地指令序列入口地址的開(kāi)銷為突破口,對(duì)解釋器指令分派進(jìn)行了優(yōu)化。本文首先對(duì)解釋器的性能瓶頸進(jìn)行分析,并在此基礎(chǔ)上,提出了一種軟硬件協(xié)同設(shè)計(jì)的解釋器指令分派方法。最后通過(guò)對(duì)比實(shí)驗(yàn),分析和驗(yàn)證了本文方法的有效性。

    2 解釋器性能瓶頸分析

    本節(jié)以HotSpot虛擬機(jī)[7]的解釋器為代表,介紹了現(xiàn)代高性能解釋器設(shè)計(jì)的關(guān)鍵技術(shù)。隨后,又以MIPS架構(gòu)的處理器為例,深入分析了解釋器的性能瓶頸。

    2.1 解釋器設(shè)計(jì)的關(guān)鍵技術(shù)

    HotSpot的解釋器基于線索化代碼結(jié)構(gòu)進(jìn)行設(shè)計(jì),模擬了一個(gè)基于棧式體系結(jié)構(gòu)的抽象處理器。它采用了棧頂緩存(stack caching)的優(yōu)化技術(shù)[12],將操作數(shù)棧頂?shù)囊粋€(gè)元素緩存到一個(gè)通用寄存器中,從而減少取操作數(shù)時(shí)冗余的棧頂訪存操作。

    棧頂緩存技術(shù)使得字節(jié)碼的本地指令序列存在多個(gè)不同的入口。在指令分派階段,解釋器根據(jù)下一個(gè)字節(jié)碼和當(dāng)前的棧頂緩存狀態(tài)查詢指令分派表,以獲取本地指令序列的入口地址。表1展示了所有的棧頂緩存狀態(tài)及其含義。從表1中可以看出,由于存在9種不同的棧頂緩存狀態(tài),故字節(jié)碼本地指令序列的入口最多可以有9個(gè)。圖1展示了指令分派表的基本結(jié)構(gòu),其中每列存儲(chǔ)一個(gè)字節(jié)碼的本地指令序列所有可能的入口地址。例如,圖1中陰影部分的表項(xiàng)存儲(chǔ)編碼為96的字節(jié)碼(iadd,表示整數(shù)加法)在棧頂緩存狀態(tài)為itos時(shí)的本地指令序列的入口地址。由于指令分派表在解釋執(zhí)行期間被頻繁訪問(wèn),因此合理地設(shè)計(jì)指令分派表的結(jié)構(gòu)以加快指令分派時(shí)的查表操作,是提升解釋器性能的關(guān)鍵。

    表1 解釋器棧頂緩存狀態(tài)

    圖1 解釋器指令分派表

    2.2 指令分派瓶頸分析

    解釋執(zhí)行期間,指令分派的開(kāi)銷對(duì)解釋器的性能有著很大的影響。由于直接統(tǒng)計(jì)指令分派的執(zhí)行時(shí)間較為困難且存在較大誤差,本文使用指令的數(shù)量來(lái)間接反映指令分派的開(kāi)銷。圖2統(tǒng)計(jì)了指令分派部分的指令條數(shù)占本地指令序列指令數(shù)目的比例。統(tǒng)計(jì)結(jié)果表明,在絕大多數(shù)字節(jié)碼的本地指令序列中,用于指令分派的本地指令數(shù)目占本地指令總數(shù)的25%以上,幾何均值達(dá)到21.4%,最高可達(dá)68.8%。因此,解釋器運(yùn)行時(shí),指令分派約占總執(zhí)行開(kāi)銷的20%,甚至更高。

    圖2 指令分派在本地指令序列中所占比例

    圖3展示了在MIPS架構(gòu)處理器的64位系統(tǒng)中,字節(jié)碼iadd的本地指令序列。為了更清晰地展示本地指令序列的結(jié)構(gòu)和語(yǔ)義,圖中省略了對(duì)分支指令延遲槽的優(yōu)化。由圖3可知,iadd的本地指令序列共有18條機(jī)器指令,其中用于指令分派的機(jī)器指令多達(dá)11條,占本地指令序列的61.1%。由于指令分派部分的指令總是全部執(zhí)行,并且指令分派頻繁發(fā)生,故指令分派在解釋執(zhí)行期間產(chǎn)生的額外開(kāi)銷很大,成為解釋器性能的瓶頸。

    指令分派時(shí),解釋器首先根據(jù)下一個(gè)字節(jié)碼和當(dāng)前的棧頂緩存狀態(tài)查詢指令分派表,以獲取本地指令序列的入口地址(記為Entry),隨后跳轉(zhuǎn)到Entry處繼續(xù)執(zhí)行。設(shè)下一個(gè)待執(zhí)行的字節(jié)碼編碼為x(x∈[0, 255]),當(dāng)前棧頂?shù)木彺鏍顟B(tài)為s(s∈[0, 8]),則指令分派可進(jìn)一步細(xì)分為以下幾個(gè)步驟:

    (1) 加載待查詢的指令分派表的行首地址到通用寄存器Reg中(即圖3中第8~13條指令);

    (2) 計(jì)算存儲(chǔ)Entry的表項(xiàng)在待查詢的行內(nèi)的偏移offset(即圖3中第14條指令);

    (3) 從指令分派表中地址為Reg+offset的位置加載Entry的值(即圖3中第15和16條指令);

    (4) 跳轉(zhuǎn)到Entry繼續(xù)執(zhí)行(即圖3中第17條指令)。

    上述4個(gè)步驟中,前3步為獲取Entry的操作,最后一步執(zhí)行跳轉(zhuǎn)動(dòng)作。由于獲取Entry需要9條機(jī)器指令(即圖3中第8~16條),占了指令分派的大部分執(zhí)行時(shí)間,故獲取Entry的操作構(gòu)成了指令分派的瓶頸。進(jìn)一步分析可知,第(1)步中加載待查詢的指令分派表的行首地址耗費(fèi)了6條機(jī)器指令(即圖3中第8~13條),是導(dǎo)致獲取Entry值代價(jià)過(guò)高的主要原因。

    圖3 字節(jié)碼iadd的本地指令序列

    3 軟硬件協(xié)同的指令分派設(shè)計(jì)

    本文針對(duì)指令分派時(shí)獲取本地指令序列的入口地址代價(jià)過(guò)高的問(wèn)題,設(shè)計(jì)并實(shí)現(xiàn)了一種軟硬件協(xié)同的指令分派方法,主要包括軟件優(yōu)化的指令分派表訪問(wèn)技術(shù)和基于硬件支持的訪存加速策略。

    3.1 指令分派表的優(yōu)化設(shè)計(jì)

    指令分派期間,為了查找本地指令序列的入口地址,需加載待查詢的指令分派表的行首地址到寄存器中。由圖3可知,完成該操作需要6條機(jī)器指令,實(shí)現(xiàn)代價(jià)較高。本文設(shè)計(jì)了一種便于高效訪問(wèn)的指令分派表,其結(jié)構(gòu)如圖4所示,完全消除了加載操作的開(kāi)銷。本文從以下四個(gè)方面對(duì)指令分派表進(jìn)行了優(yōu)化。

    (1)對(duì)指令分派表的行列進(jìn)行了轉(zhuǎn)置,為后文基于硬件支持的指令分派表的訪問(wèn)加速奠定了基礎(chǔ)。轉(zhuǎn)置前的指令分派表每行有256個(gè)表項(xiàng)。當(dāng)加載行中的某個(gè)表項(xiàng)時(shí),行內(nèi)偏移的取值范圍較大。對(duì)于64位的系統(tǒng),轉(zhuǎn)置前行內(nèi)偏移的范圍是[0, 211-8]?[-211, 211-1],故要求訪存指令中偏移量編碼域的長(zhǎng)度不少于12位。但是由于精簡(jiǎn)指令集架構(gòu)的處理器通常采用固定長(zhǎng)度的指令編碼格式,訪存指令中所能提供的編碼偏移量的長(zhǎng)度非常有限。本文對(duì)原有指令分派表進(jìn)行了轉(zhuǎn)置,可以減少機(jī)器指令中偏移量編碼所需的長(zhǎng)度,使得通過(guò)硬件支持的方式加速指令分派表的訪問(wèn)成為可能。

    圖4 優(yōu)化后的指令分派表結(jié)構(gòu)

    (2)剔除了三類無(wú)用表項(xiàng),減少了解釋執(zhí)行時(shí)對(duì)系統(tǒng)資源的消耗。指令分派時(shí),需根據(jù)當(dāng)前棧頂?shù)木彺鏍顟B(tài)確定下一個(gè)字節(jié)碼的本地指令序列的入口地址。由于HotSpot解釋器將緩存狀態(tài)為btos、ctos和stos的入口地址均映射到itos的入口地址,因此圖4中的指令分派表結(jié)構(gòu)在設(shè)計(jì)時(shí),消除了btos、ctos和stos相關(guān)的表項(xiàng),以進(jìn)一步減少解釋執(zhí)行對(duì)內(nèi)存等資源的消耗。

    (3)添加了兩列填充表項(xiàng),以減少查表的計(jì)算開(kāi)銷。指令分派表在添加填充表項(xiàng)前,需執(zhí)行一次乘法操作來(lái)計(jì)算待查表項(xiàng)的行偏移。由于乘法運(yùn)算的代價(jià)較高,在設(shè)計(jì)指令分派表時(shí),每行的末尾均添加了兩個(gè)填充表項(xiàng),如圖4中陰影部分所示,從而可通過(guò)一次快速的左移位操作計(jì)算出行偏移。因此,填充表項(xiàng)的引入可將代價(jià)較高的乘法運(yùn)算轉(zhuǎn)換為高效的移位操作,查表時(shí)計(jì)算代價(jià)明顯降低。

    (4)合理設(shè)計(jì)指令分派表每列的順序,提高訪存效率。圖5展示了訪問(wèn)指令分派表時(shí)棧頂緩存狀態(tài)的頻率分布。從圖中可知指令分派表的訪問(wèn)集中在對(duì)vtos、itos、atos和ftos緩存狀態(tài)的查詢。因此在設(shè)計(jì)指令分派表時(shí),將vtos、itos、atos和ftos這4個(gè)表項(xiàng)安排在相鄰的位置,以增強(qiáng)訪存的局部性,提高訪存效率。

    圖5 指令分派表訪問(wèn)時(shí)棧頂緩存狀態(tài)的頻率分布

    3.2 軟件優(yōu)化的指令分派表訪問(wèn)技術(shù)

    根據(jù)3.1節(jié)中指令分派表結(jié)構(gòu)的設(shè)計(jì),指令分派表的訪問(wèn)技術(shù)也做了相應(yīng)的軟件優(yōu)化。其核心思想是將指令分派表的起始地址緩存到一個(gè)可以高速訪問(wèn)的部件中,以消除優(yōu)化前代價(jià)較高的行首地址加載操作。

    圖6具體展示了基于軟件優(yōu)化的指令分派表查找本地指令序列入口地址的方法。本文選擇了一個(gè)通用寄存器作為指令分派表的高速緩存部件,該寄存器稱為指令分派寄存器(記為gpr)。解釋器初始化時(shí),將指令分派表的起始地址(即圖6中標(biāo)“0”的箭頭所指向的位置)保存到指令分派寄存器中。設(shè)下一個(gè)待執(zhí)行的字節(jié)碼編碼為x(x∈[0, 255]),當(dāng)前棧頂?shù)木彺鏍顟B(tài)為s(s∈[0,5]),待查找的本地指令序列的入口地址為Entry,則獲取Entry的步驟如下:

    圖6 優(yōu)化的指令分派表訪問(wèn)方法

    (1) 根據(jù)字節(jié)碼x的編碼,計(jì)算待訪問(wèn)表項(xiàng)的行偏移row_offset(即圖6中標(biāo)“1”的箭頭所指向的位置):

    row_offset=8×AddressLength×x

    (1)

    其中AddressLength表示系統(tǒng)中一個(gè)指針?biāo)嫉淖止?jié)數(shù)目,為一個(gè)固定的常量。row_offset保存在一個(gè)通用寄存器中。它的值將在解釋執(zhí)行的過(guò)程中實(shí)時(shí)計(jì)算。具體實(shí)現(xiàn)時(shí),上述乘法操作可以轉(zhuǎn)換為對(duì)x的快速左移位操作,需要左移的位數(shù)為log2(8×AddressLength)。

    (2) 根據(jù)當(dāng)前的棧頂狀態(tài)s(s∈[0, 5]),計(jì)算待訪問(wèn)表項(xiàng)的列偏移col_offset(即圖6中標(biāo)“2”的箭頭所指向的位置):

    col_offset=AddressLength×s

    (2)

    由于AddressLength≤8,故col_offset∈[0,40],為一個(gè)較小的立即數(shù)。其值在解釋器初始化時(shí)確定。

    (3) 從指令分派表中地址為gpr+row_offset+col_offset的表項(xiàng)(即圖6中標(biāo)“3”的箭頭所指向的表項(xiàng))中加載Entry的值。

    圖7展示了采用圖6中的方法實(shí)現(xiàn)的指令分派方案。行偏移row_offset的值在第1條左移位指令dsll中完成計(jì)算,結(jié)果存于寄存器t2中。在第2條加法指令daddu中,指令分派寄存器gpr與t2相加得到待查詢的指令分派表的行首地址,并將其保存到寄存器t3中。隨后,第3條訪存指令ld實(shí)現(xiàn)從地址為t3+col_offset的指令分派表中加載Entry的值。最后,通過(guò)第4條間接轉(zhuǎn)移指令jr跳轉(zhuǎn)到入口為Entry的本地指令序列中繼續(xù)執(zhí)行,從而完成一次指令分派。

    圖7 純軟件優(yōu)化的指令分派

    對(duì)比圖3可以看出,優(yōu)化前用于加載指令分派表待查詢的行首地址的6條機(jī)器指令已全部消除,指令分派部分的機(jī)器指令數(shù)目由原來(lái)的11條減少為5條。通過(guò)對(duì)SPECjvm98和DaCapo等測(cè)試集的分析知,解釋執(zhí)行期間指令分派的次數(shù)可高達(dá)數(shù)百億次。因此優(yōu)化后,可以減少千億條數(shù)量級(jí)機(jī)器指令的執(zhí)行,從而大幅度提高指令分派的效率。

    3.3 基于硬件支持的訪存加速策略

    由3.2節(jié)中的分析可知,為了獲取Entry的值,需要訪問(wèn)地址為gpr+row_offset+col_offset的內(nèi)存單元。其中g(shù)pr為基址寄存器,保存指令分派表的起始地址;row_offset為索引寄存器,保存待查詢的行的索引;col_offset為一個(gè)較小的立即數(shù),表示目標(biāo)單元在行內(nèi)的偏移。由于MIPS等精簡(jiǎn)指令集的處理器僅支持“基址+偏移”的尋址方式,故上述操作需要兩條機(jī)器指令(圖7中第2、3條)才能完成。

    為了進(jìn)一步加快指令分派的速度,本文對(duì)處理器的訪存指令進(jìn)行了擴(kuò)展,新引入了一種支持“基址+索引+偏移”的尋址方式的訪存指令,使得對(duì)Entry值的加載操作僅由一條指令即可完成,從硬件層面直接加速指令分派時(shí)對(duì)內(nèi)存地址gpr+row_offset+col_offset的訪問(wèn)速度。其硬件實(shí)現(xiàn)原理如圖8所示。擴(kuò)展指令的實(shí)現(xiàn)主要涉及對(duì)處理器流水線中指令譯碼器、寄存器重命名單元和訪存部件的擴(kuò)展。由于擴(kuò)展的訪存指令使用了新定義的指令操作碼,指令譯碼器需增加對(duì)擴(kuò)展指令的譯碼功能。同時(shí),由于擴(kuò)展指令中編碼了基址寄存器、索引寄存器和結(jié)果寄存器,故在流水線的寄存器重命名階段需要對(duì)三個(gè)寄存器進(jìn)行重命名,從而將指令中編碼的三個(gè)寄存器分別映射到物理寄存器堆中相應(yīng)的物理寄存器上。此外,由于訪存的有效地址計(jì)算需要對(duì)“基址+索引+偏移”進(jìn)行求和運(yùn)算,故訪存部件中原有的雙操作數(shù)地址運(yùn)算單元也需要進(jìn)行簡(jiǎn)單的擴(kuò)展,以支持3操作數(shù)的求和運(yùn)算。最后,根據(jù)有效地址完成相應(yīng)的訪存操作,并將訪存結(jié)果寫(xiě)回結(jié)果寄存器中。擴(kuò)展指令的硬件邏輯簡(jiǎn)單,實(shí)現(xiàn)代價(jià)低,很容易在各種處理器中實(shí)現(xiàn)。

    圖8 擴(kuò)展訪存指令的硬件實(shí)現(xiàn)原理

    在MIPS架構(gòu)中,指令編碼長(zhǎng)度固定為32位。原有的訪存指令(如ld指令等)最大僅支持16位的偏移量。而擴(kuò)展的訪存指令中需要額外使用5位用于對(duì)新增的索引寄存器進(jìn)行編碼,故無(wú)論擴(kuò)展的訪存指令如何設(shè)計(jì),其所支持的偏移量最大不能超過(guò)16-5 = 11位。由3.1節(jié)中的分析可知,優(yōu)化前的指令分派表要求訪存指令中的偏移量不少于12位,因此,本文對(duì)原有指令分派表的行和列進(jìn)行了轉(zhuǎn)置。轉(zhuǎn)置后,即使對(duì)于64位的系統(tǒng),指令分派表行內(nèi)偏移的取值范圍是[0, 40]?[-26, 26-1],故偏移量的編碼只需要7位,滿足了硬件擴(kuò)展的約束。

    基于上述分析,我們總共實(shí)現(xiàn)了12條擴(kuò)展的訪存指令,包含8條定點(diǎn)指令和4條浮點(diǎn)指令,尋址方式均為“基址+索引+偏移”的訪存模式。上述擴(kuò)展指令分別為存取字節(jié)(gssbx/gslbx)、存取半字(gsshx/gslhx)、存取字(gsswx/gslwx)、存取雙字(gssdx/gsldx)、存取單精度浮點(diǎn)數(shù)(gsswxc1/gslwxc1)和存取雙精度浮點(diǎn)數(shù)(gssdxc1/gsldxc1)。這些指令均支持長(zhǎng)度為8位的訪存偏移量,完全滿足優(yōu)化后指令分派表訪問(wèn)時(shí)對(duì)7位偏移的需求。

    圖9展示了添加了硬件支持后,指令分派的實(shí)現(xiàn)方案。圖中使用了一條擴(kuò)展訪存指令gsldx,用于從內(nèi)存中加載一個(gè)64位的雙字。對(duì)比圖7可以看出,加載Entry的操作由圖7中的兩條機(jī)器指令減少為圖9中的一條gsldx指令即可完成。由于gsldx與原有64位訪存加載指令ld所需的執(zhí)行周期相同,故擴(kuò)展指令的引入可以消除一條加法指令daddu,從而進(jìn)一步提高指令分派的效率。

    圖9 軟硬件協(xié)同的指令分派

    4 實(shí)驗(yàn)與結(jié)果分析

    4.1 實(shí)驗(yàn)平臺(tái)

    為了驗(yàn)證本文方法的有效性,本研究在OpenJDK8[13]HotSpot虛擬機(jī)的解釋器上,采用業(yè)界廣泛使用的SPECjvm98和DaCapo-9.12-bach測(cè)試集進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)中,SPECjvm98和DaCapo的輸入規(guī)模分別設(shè)為最大值100和默認(rèn)大小。由于DaCapo中batik和eclipse引用了與OpenJDK8不兼容的低版本類庫(kù),因此本文將這兩個(gè)測(cè)試項(xiàng)排除在外。

    實(shí)驗(yàn)中使用的硬件平臺(tái)為MIPS兼容的龍芯3號(hào)處理器,主頻900MHz,內(nèi)存4G,操作系統(tǒng)為64位的CentOS 6.4。本研究進(jìn)行了以下3組對(duì)比試驗(yàn):

    (1)傳統(tǒng)的實(shí)現(xiàn)方案,即圖3中的方法;

    (2)純軟件的優(yōu)化方案,即圖7中的方法;

    (3)軟硬件協(xié)同的優(yōu)化方案,即圖9中的方法。

    為了減小實(shí)驗(yàn)誤差,每個(gè)測(cè)試程序均運(yùn)行10次,取其均值作為最終的實(shí)驗(yàn)結(jié)果,并以傳統(tǒng)方案的結(jié)果為基準(zhǔn)對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行了歸一化處理。

    4.2 實(shí)驗(yàn)結(jié)果與分析

    圖10展示了解釋器在三種方案下的總體性能。從圖中可以看出,相對(duì)于傳統(tǒng)方案,采用純軟件的優(yōu)化方案,解釋器總體性能提升幅度已高達(dá)8.3%。而增加硬件支持后,解釋器總體性能進(jìn)一步提升約3.2%,最終達(dá)到11.5%的總體性能提升。

    圖10 三種方案下的解釋器總體性能

    圖11展示了解釋器在三種方案下,SPECjvm98和DaCapo測(cè)試集的性能。圖中的數(shù)據(jù)表明,軟硬件協(xié)同的優(yōu)化使得絕大多數(shù)的測(cè)試項(xiàng)目獲得10%以上的性能提升,最高性能提升幅度高達(dá)15.4%。此外,從圖11中還可以看出,使用硬件支持,解釋器的性能可在純軟件優(yōu)化的基礎(chǔ)上進(jìn)一步提升約2%~5%的性能,故硬件支持是純軟件優(yōu)化的重要補(bǔ)充。因此,軟硬件協(xié)同設(shè)計(jì)的指令分派對(duì)解釋器性能的提升具有非常好的效果。

    圖11 解釋器在SPECjvm98和DaCapo測(cè)試集上的性能

    為了進(jìn)一步揭示解釋器性能提升的原因,本文從靜態(tài)和動(dòng)態(tài)兩個(gè)方面進(jìn)行分析。從靜態(tài)角度看,字節(jié)碼本地指令序列中,指令分派部分機(jī)器指令數(shù)目的減少是解釋器性能提升的根本原因。圖12展示了軟硬件協(xié)同優(yōu)化前后,指令分派在字節(jié)碼的本地指令序列中所占的比例。圖中的結(jié)果表明,優(yōu)化后指令分派的比例顯著下降。對(duì)于絕大多數(shù)字節(jié)碼,該比例下降幅度超過(guò)了50%,所有字節(jié)碼指令分派部分所占比例的幾何均值由原來(lái)的21.4%下降為9.9%,下降幅度高達(dá)53.7%。此外,指令分派部分機(jī)器指令數(shù)目的減少,使得所有字節(jié)碼的本地指令序列中機(jī)器指令的總數(shù)減少了6.7%,解釋執(zhí)行所需的存儲(chǔ)空間進(jìn)一步降低。指令分派中機(jī)器指令數(shù)目的大幅減少,從理論上證明了軟硬件協(xié)同設(shè)計(jì)對(duì)解釋器指令分派優(yōu)化的良好效果,并且預(yù)示著動(dòng)態(tài)執(zhí)行的機(jī)器指令數(shù)目的大幅減少。

    圖12 軟硬件協(xié)同優(yōu)化前后指令分派在字節(jié)碼的本地指令序列中所占比例

    從動(dòng)態(tài)角度看,運(yùn)行時(shí)實(shí)際執(zhí)行的機(jī)器指令數(shù)目的減少是解釋器性能提升的直接原因。表2展示了軟硬件協(xié)同優(yōu)化后,在SPECjvm98和DaCapo測(cè)試集上,解釋器運(yùn)行時(shí)減少執(zhí)行的機(jī)器指令數(shù)目。由表2的數(shù)據(jù)知,軟硬件協(xié)同優(yōu)化后,解釋器減少執(zhí)行的機(jī)器指令數(shù)目高達(dá)千億條的數(shù)量級(jí),平均下降幅度為優(yōu)化前的16.67%,最高優(yōu)化幅度高達(dá)22.87%。實(shí)驗(yàn)結(jié)果與理論預(yù)期相符。由于軟硬件協(xié)同的優(yōu)化可以大幅度減少指令分派所執(zhí)行的機(jī)器指令數(shù)目,故能充分地優(yōu)化解釋器的性能。

    表2 軟硬件協(xié)同優(yōu)化后減少執(zhí)行的機(jī)器指令

    5 結(jié) 論

    解釋器指令分派一直是影響解釋器性能最關(guān)鍵的因素。本文對(duì)解釋器指令分派的開(kāi)銷進(jìn)行了分析,指出對(duì)字節(jié)碼本地指令序列入口地址的獲取構(gòu)成了指令分派的瓶頸,并且有針對(duì)性地提出了一種采用軟硬件協(xié)同設(shè)計(jì)的指令分派優(yōu)化方案。該方案具體包括優(yōu)化的指令分派表設(shè)計(jì)、軟件優(yōu)化的指令分派表訪問(wèn)技術(shù)和基于硬件支持的訪存加速策略。試驗(yàn)結(jié)果表明,本文的方案大幅降低了指令分派的開(kāi)銷,有效提升了解釋器的性能。本文的方法通用性強(qiáng),實(shí)現(xiàn)代價(jià)低,對(duì)于現(xiàn)代高性能解釋器的設(shè)計(jì)和優(yōu)化具有很好的借鑒意義。未來(lái)的工作將從軟硬件協(xié)同設(shè)計(jì)的角度出發(fā),對(duì)高級(jí)語(yǔ)言虛擬機(jī)的動(dòng)態(tài)編譯系統(tǒng)和數(shù)組越界檢查等運(yùn)行時(shí)機(jī)制做進(jìn)一步的分析和優(yōu)化。

    [1] Bell J R. Threaded code.CommunicationsoftheACM, 1973,16(6):370-372

    [2] Casey K, Gregg D, Ertl M A, et al. Towards superinstructions for java interpreters. In: Proceedings of the 7th International Workshop on Software and Compilers for Embedded Systems, Vienna, Austria, 2003. 329-343

    [3] Casey K, Ertl M A, Gregg D. Optimizingindirect branch prediction accuracy in virtual machine interpreters.ACMTransactionsonProgrammingLanguagesandSystems, 2007, 29(6):1-36

    [4] Brunthaler S. Virtual-machine abstraction and optimization techniques.ElectronicNotesinTheoreticalComputerScience, 2009, 253(5):3-14

    [5] Kulkarni P A. JIT compilation policy for modern machines. In: Proceedings of the 2011 ACM International Conference on Object Oriented Programming Systems Languages and Applications, New York, USA, 2011. 773-788

    [6] Arnold M, Fink S J, Grove D, et al. A survey of adaptive optimization in virtual machines.ProceedingsoftheIEEE, 2005, 93(2):449-466

    [7] Kotzmann T, Wimmer C, M?ssenb?ck H, et al. Design of the Java HotSpotTMclient compiler for Java 6.ACMTransactionsonArchitectureandCodeOptimization, 2008, 5(1):1-32

    [8] Jantz M R, Kulkarni P A. Exploring single and multilevel JIT compilation policy for modern machines.ACMTransactionsonArchitectureandCodeOptimization, 2013, 10(4):1-29

    [9] Mccandless J, Gregg D. Compiler techniques to improve dynamic branch prediction for indirect jump and call instructions.ACMTransactionsonArchitectureandCodeOptimization, 2012, 8(1):1-24

    [10] 黃明凱, 劉先華, 譚明星等. 一種面向解釋器的間接轉(zhuǎn)移預(yù)測(cè)技術(shù). 計(jì)算機(jī)研究與發(fā)展, 2015, 52(1):66-82

    [11] Rohou E, Swamy B N, Seznec A. Branch prediction and the performance of interpreters: Don’t trust folklore. In: Proceedings of the 13th Annual IEEE/ACM International Symposium on Code Generation and Optimization, Washington, DC, USA, 2015. 103-114

    [12] Ertl M A. Stack caching for interpreters. In: Proceedings of the ACM SIGPLAN 1995 Conference on Programming Language Design and Implementation, New York, USA, 1995. 315-327

    [13] Oracle. OpenJDK8. http://openjdk.java.net/projects/jdk8/: Oracle Corporation, 2014

    An instruction dispatch approach using hardware-software co-design for interpreters

    Fu Jie******, Jin Guojie****, Zhang Longbing*****, Wang Jian*****

    (*University of Chinese Academy of Sciences, Beijing 100049)(**State Key Laboratory of Computer Architecture, Institute of Computing Technology,Chinese Academy of Sciences, Beijing 100190)(***Institute of Computing Technology, Chinese Academy of Sciences, Beijing 100190)(****Loongson Technology Corporation Limited, Beijing 100095)

    To reduce the overhead caused by instruction dispatch to improve the performance of interpreters, an instruction dispatch approach based on hardware and software co-design is proposed. Its main idea is to eliminate the expensive operation of constant address loading by optimizing the instruction dispatch table in the aspect of sofware, and to acceleratethe speed of memory access under the support of hardware by enhancing the processor’s instruction set in the aspect of hardware. The hardware-software co-design can minimize the runtime overhead of instruction dispatch, thus improving the performance of interpreters. The experimental results showed that the proposed approach significantly improved the performance of interpreters. For benchmarks of SPECjvm98 and DaCapo, the overall performance of interpreters was improved by 11.5%, and the highest performance boost was up to 15.4%. The approach is highly versatile, easy to implement and can be applied to the design and implementation of high performance interpreters on mainstream processors.

    interpreter, instruction dispatch, hardware and software co-design, virtual machine, optimization

    10.3772/j.issn.1002-0470.2016.03.002

    ①國(guó)家“核高基”科技重大專項(xiàng)課題(2009ZX01028-002-003, 2009ZX01029-001-003, 2010ZX01036-001-002, 2012ZX01029-001-002-002, 2014ZX01020201, 2014ZX01030101),國(guó)家自然科學(xué)基金(61221062, 61133004, 61173001, 6123009, 61222204, 61432016)和863計(jì)劃(2012AA010901, 2013AA014301)資助項(xiàng)目。

    2015-11-16)

    ②男,1987年生,博士生;研究方向:虛擬機(jī),計(jì)算機(jī)系統(tǒng)結(jié)構(gòu);聯(lián)系人,E-mail: fujie@ict.ac.cn(

    猜你喜歡
    分派表項(xiàng)字節(jié)
    一種改進(jìn)的TCAM路由表項(xiàng)管理算法及實(shí)現(xiàn)
    No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
    基于ARMA模型預(yù)測(cè)的交換機(jī)流表更新算法
    No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
    《宋元學(xué)案》中程頤思想的詮釋與評(píng)價(jià)——兼論二程思想的比較及其分派
    論勞思光對(duì)宋明儒學(xué)分派問(wèn)題的研究
    SDN數(shù)據(jù)中心網(wǎng)絡(luò)基于流表項(xiàng)轉(zhuǎn)換的流表調(diào)度優(yōu)化
    簡(jiǎn)談MC7字節(jié)碼
    快遞小哥的一天
    新民周刊(2017年9期)2017-03-20 17:45:04
    跟蹤導(dǎo)練(四)
    中文精品一卡2卡3卡4更新| 国产有黄有色有爽视频| 欧美老熟妇乱子伦牲交| 特大巨黑吊av在线直播| 女的被弄到高潮叫床怎么办| 美女视频免费永久观看网站| 一本久久精品| 好男人视频免费观看在线| 午夜老司机福利剧场| 午夜福利视频精品| 18禁在线无遮挡免费观看视频| 午夜福利视频1000在线观看| 一本久久精品| 精品人妻熟女av久视频| 国产精品嫩草影院av在线观看| 一本一本综合久久| 国产精品久久久久久精品古装| 尤物成人国产欧美一区二区三区| 久久这里有精品视频免费| 不卡视频在线观看欧美| 黄片wwwwww| 在线观看美女被高潮喷水网站| 欧美xxxx性猛交bbbb| 久久精品熟女亚洲av麻豆精品| 亚洲国产高清在线一区二区三| 99久久精品热视频| 国产在视频线精品| 午夜精品一区二区三区免费看| 最近中文字幕2019免费版| 又大又黄又爽视频免费| 亚洲高清免费不卡视频| 亚洲av在线观看美女高潮| 国产精品一区二区三区四区免费观看| 草草在线视频免费看| 久久韩国三级中文字幕| 日日啪夜夜爽| 永久网站在线| 夫妻午夜视频| 99热这里只有是精品在线观看| 赤兔流量卡办理| 国产高潮美女av| 国产成人精品婷婷| 一级黄片播放器| 久久久精品免费免费高清| 1000部很黄的大片| 亚洲最大成人av| 亚洲精品成人av观看孕妇| 日韩一区二区视频免费看| 国产女主播在线喷水免费视频网站| 97超视频在线观看视频| 2021少妇久久久久久久久久久| 老女人水多毛片| 熟女电影av网| 精品久久国产蜜桃| 三级国产精品片| 人人妻人人看人人澡| 日韩一本色道免费dvd| 国产黄a三级三级三级人| 国产片特级美女逼逼视频| 国产成人精品一,二区| 在线天堂最新版资源| 我的女老师完整版在线观看| 精品一区二区三区视频在线| 秋霞伦理黄片| 91aial.com中文字幕在线观看| 成人漫画全彩无遮挡| 天堂俺去俺来也www色官网| 在线播放无遮挡| 亚洲自拍偷在线| 在线观看美女被高潮喷水网站| 热re99久久精品国产66热6| 亚洲精品一二三| 日日啪夜夜撸| 日日摸夜夜添夜夜爱| 99热这里只有精品一区| 免费观看av网站的网址| 精品一区在线观看国产| 国产亚洲一区二区精品| 白带黄色成豆腐渣| 精品国产乱码久久久久久小说| 一二三四中文在线观看免费高清| 男女那种视频在线观看| 亚洲精品视频女| 国产视频首页在线观看| 午夜精品国产一区二区电影 | 在线看a的网站| 国产精品人妻久久久影院| 五月天丁香电影| 男女无遮挡免费网站观看| 欧美精品一区二区大全| 少妇裸体淫交视频免费看高清| 超碰97精品在线观看| 人妻制服诱惑在线中文字幕| 国产精品一及| 婷婷色综合www| 夜夜爽夜夜爽视频| 亚洲精品aⅴ在线观看| 丰满乱子伦码专区| 18禁动态无遮挡网站| 亚洲色图av天堂| www.色视频.com| 美女cb高潮喷水在线观看| 国产成人a区在线观看| 国产精品一区二区性色av| 亚洲欧洲日产国产| 免费看日本二区| 岛国毛片在线播放| 97超视频在线观看视频| 熟女人妻精品中文字幕| 亚洲欧美日韩东京热| 九九久久精品国产亚洲av麻豆| 日韩欧美精品免费久久| 成人午夜精彩视频在线观看| 国产一区二区在线观看日韩| 日本一二三区视频观看| 国产精品不卡视频一区二区| 少妇人妻 视频| 性色avwww在线观看| 夜夜爽夜夜爽视频| 欧美日韩视频精品一区| 插阴视频在线观看视频| 男女国产视频网站| 精品99又大又爽又粗少妇毛片| 欧美最新免费一区二区三区| 欧美另类一区| 色视频www国产| 女人久久www免费人成看片| 亚洲伊人久久精品综合| 亚洲欧美一区二区三区国产| 欧美+日韩+精品| 亚洲第一区二区三区不卡| 波多野结衣巨乳人妻| 美女视频免费永久观看网站| 久久亚洲国产成人精品v| 91久久精品电影网| 777米奇影视久久| 美女内射精品一级片tv| av线在线观看网站| 国产探花在线观看一区二区| 色综合色国产| 伊人久久国产一区二区| 亚洲精品国产av成人精品| 欧美 日韩 精品 国产| 欧美人与善性xxx| 2022亚洲国产成人精品| 免费播放大片免费观看视频在线观看| 亚洲色图综合在线观看| 中文字幕制服av| 亚洲欧美成人精品一区二区| 午夜日本视频在线| 有码 亚洲区| 国产精品一区www在线观看| 成人午夜精彩视频在线观看| 2022亚洲国产成人精品| 综合色丁香网| 麻豆乱淫一区二区| kizo精华| 自拍偷自拍亚洲精品老妇| 欧美性猛交╳xxx乱大交人| 麻豆乱淫一区二区| 亚洲国产精品999| 亚洲自拍偷在线| 观看美女的网站| 国产亚洲一区二区精品| 91精品一卡2卡3卡4卡| 国产女主播在线喷水免费视频网站| 九九久久精品国产亚洲av麻豆| 一二三四中文在线观看免费高清| 亚洲人与动物交配视频| 久久精品国产a三级三级三级| 又爽又黄a免费视频| 亚洲欧美成人精品一区二区| 亚洲精品,欧美精品| 一区二区三区四区激情视频| 亚洲av不卡在线观看| 黄色一级大片看看| 亚洲伊人久久精品综合| av国产久精品久网站免费入址| 欧美高清性xxxxhd video| 三级男女做爰猛烈吃奶摸视频| 少妇人妻久久综合中文| 丰满少妇做爰视频| 亚洲国产精品国产精品| 女人久久www免费人成看片| 久久99热这里只有精品18| 天天躁日日操中文字幕| 亚洲精品一区蜜桃| 三级男女做爰猛烈吃奶摸视频| 日韩伦理黄色片| av在线天堂中文字幕| 午夜激情福利司机影院| 日韩一区二区视频免费看| 男人舔奶头视频| 激情 狠狠 欧美| 性色av一级| 国产伦理片在线播放av一区| 日韩av在线免费看完整版不卡| 有码 亚洲区| 免费黄色在线免费观看| 日韩在线高清观看一区二区三区| 国产亚洲5aaaaa淫片| 少妇的逼好多水| 熟女人妻精品中文字幕| 午夜视频国产福利| 国产爱豆传媒在线观看| 免费不卡的大黄色大毛片视频在线观看| 国产精品久久久久久av不卡| 久久精品国产a三级三级三级| 国产白丝娇喘喷水9色精品| 免费观看a级毛片全部| 欧美一区二区亚洲| 成人鲁丝片一二三区免费| 亚洲无线观看免费| 欧美日韩视频精品一区| 欧美zozozo另类| 亚洲国产成人一精品久久久| 亚洲最大成人中文| 精品人妻视频免费看| 精品一区在线观看国产| 97精品久久久久久久久久精品| 午夜免费观看性视频| 国产高潮美女av| 九色成人免费人妻av| 乱系列少妇在线播放| 午夜视频国产福利| 国产极品天堂在线| 在线观看国产h片| 国产乱来视频区| 欧美人与善性xxx| 婷婷色综合大香蕉| 国产av国产精品国产| 亚洲精品456在线播放app| 不卡视频在线观看欧美| 国产 一区精品| 精品少妇久久久久久888优播| 91精品国产九色| 少妇高潮的动态图| 亚洲怡红院男人天堂| 毛片一级片免费看久久久久| 乱码一卡2卡4卡精品| 色网站视频免费| av免费在线看不卡| 国产亚洲精品久久久com| 中文在线观看免费www的网站| 99视频精品全部免费 在线| 国产精品一及| 美女cb高潮喷水在线观看| 黄色欧美视频在线观看| 国产女主播在线喷水免费视频网站| 国国产精品蜜臀av免费| 欧美xxxx性猛交bbbb| 久久久a久久爽久久v久久| 国产午夜福利久久久久久| 国产精品秋霞免费鲁丝片| 久久久精品欧美日韩精品| 久久国内精品自在自线图片| 中文字幕人妻熟人妻熟丝袜美| 久久久久久久久久久免费av| 亚洲熟女精品中文字幕| 亚洲av男天堂| 99九九线精品视频在线观看视频| 超碰97精品在线观看| 久久女婷五月综合色啪小说 | 亚洲精品自拍成人| 狂野欧美激情性xxxx在线观看| 亚洲精品第二区| 国产成人一区二区在线| 日韩中字成人| 欧美成人一区二区免费高清观看| 又爽又黄a免费视频| 麻豆久久精品国产亚洲av| 国产亚洲最大av| 超碰97精品在线观看| 小蜜桃在线观看免费完整版高清| 免费高清在线观看视频在线观看| 一区二区三区四区激情视频| 男人狂女人下面高潮的视频| 国产精品一区二区三区四区免费观看| 久久久久久伊人网av| 午夜老司机福利剧场| 国产乱人偷精品视频| 国产午夜福利久久久久久| 欧美另类一区| 国产亚洲精品久久久com| 成年av动漫网址| 人体艺术视频欧美日本| 最近最新中文字幕免费大全7| 国产精品久久久久久av不卡| 亚洲精品456在线播放app| 女人久久www免费人成看片| 少妇被粗大猛烈的视频| 视频中文字幕在线观看| 欧美极品一区二区三区四区| 久久鲁丝午夜福利片| xxx大片免费视频| 国产精品久久久久久精品古装| 岛国毛片在线播放| 久久久久精品久久久久真实原创| 男人爽女人下面视频在线观看| 一个人看视频在线观看www免费| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 美女视频免费永久观看网站| 精品熟女少妇av免费看| 18禁裸乳无遮挡动漫免费视频 | 看免费成人av毛片| 只有这里有精品99| 国产av国产精品国产| 老师上课跳d突然被开到最大视频| 欧美最新免费一区二区三区| 亚洲综合色惰| 亚洲av免费高清在线观看| 日韩电影二区| 国产白丝娇喘喷水9色精品| 国产一区二区三区av在线| 少妇的逼好多水| 免费观看的影片在线观看| 国产高清三级在线| 国产永久视频网站| 国产av不卡久久| 成人二区视频| 一级毛片黄色毛片免费观看视频| 亚洲精品色激情综合| 在线免费观看不下载黄p国产| 女人久久www免费人成看片| 日本wwww免费看| 好男人视频免费观看在线| 中文字幕制服av| 亚洲欧美日韩东京热| 日韩大片免费观看网站| 国产精品久久久久久精品电影小说 | 成人国产麻豆网| 丰满少妇做爰视频| 亚洲人成网站在线观看播放| 亚洲欧美日韩无卡精品| 一本久久精品| 日韩一区二区视频免费看| 美女主播在线视频| 久久久色成人| 欧美人与善性xxx| 丰满人妻一区二区三区视频av| 麻豆乱淫一区二区| 色网站视频免费| 偷拍熟女少妇极品色| 免费黄频网站在线观看国产| 亚洲成人精品中文字幕电影| 少妇猛男粗大的猛烈进出视频 | 视频区图区小说| 亚洲综合精品二区| 国产探花在线观看一区二区| 婷婷色麻豆天堂久久| 久久人人爽av亚洲精品天堂 | 青春草国产在线视频| 精品少妇黑人巨大在线播放| 国产成人免费观看mmmm| 97精品久久久久久久久久精品| 国产白丝娇喘喷水9色精品| 国产精品三级大全| 高清在线视频一区二区三区| 22中文网久久字幕| 91在线精品国自产拍蜜月| 国产色爽女视频免费观看| 男人舔奶头视频| 最后的刺客免费高清国语| 亚洲国产精品999| 精华霜和精华液先用哪个| 亚洲四区av| 久久精品国产亚洲av涩爱| 草草在线视频免费看| 一级黄片播放器| 大香蕉久久网| 一边亲一边摸免费视频| 亚洲人成网站在线播| 寂寞人妻少妇视频99o| 亚洲精品色激情综合| 成年免费大片在线观看| 国产精品不卡视频一区二区| 大码成人一级视频| 国产欧美日韩一区二区三区在线 | 99久久中文字幕三级久久日本| 成人二区视频| 国产乱人视频| 一区二区三区免费毛片| 久热这里只有精品99| 免费看a级黄色片| 国产在线男女| 黄片wwwwww| 日韩 亚洲 欧美在线| 国产精品.久久久| eeuss影院久久| 欧美精品国产亚洲| 在现免费观看毛片| 亚洲久久久久久中文字幕| 波多野结衣巨乳人妻| 97人妻精品一区二区三区麻豆| 好男人在线观看高清免费视频| 看免费成人av毛片| 国产黄a三级三级三级人| 国产乱人偷精品视频| 精华霜和精华液先用哪个| 少妇熟女欧美另类| av网站免费在线观看视频| 亚洲va在线va天堂va国产| 亚洲在久久综合| 91久久精品国产一区二区三区| 成人综合一区亚洲| 久久久久久伊人网av| 免费黄网站久久成人精品| 亚洲av中文av极速乱| 18禁在线无遮挡免费观看视频| 色5月婷婷丁香| 麻豆国产97在线/欧美| av在线app专区| 美女主播在线视频| 久久久色成人| 色综合色国产| 亚洲欧洲日产国产| 亚洲av在线观看美女高潮| 一区二区三区精品91| 日本一二三区视频观看| 亚洲在久久综合| 亚洲内射少妇av| 亚洲av在线观看美女高潮| 亚洲精品,欧美精品| 日本一二三区视频观看| 不卡视频在线观看欧美| 国产成人福利小说| 伊人久久国产一区二区| 日韩人妻高清精品专区| 精品久久久精品久久久| 国产成人freesex在线| 久久久国产一区二区| 久久久久久久久久久丰满| 深夜a级毛片| 国产人妻一区二区三区在| h日本视频在线播放| 噜噜噜噜噜久久久久久91| 国产精品麻豆人妻色哟哟久久| 少妇人妻一区二区三区视频| 午夜爱爱视频在线播放| 国产精品久久久久久久电影| 69人妻影院| 亚洲欧美成人精品一区二区| 亚洲国产欧美在线一区| 国产精品久久久久久精品古装| 身体一侧抽搐| 亚洲综合精品二区| 色综合色国产| 中国国产av一级| av在线老鸭窝| 亚洲精品日韩在线中文字幕| 黄色怎么调成土黄色| 国产一级毛片在线| 网址你懂的国产日韩在线| 精品久久国产蜜桃| av线在线观看网站| 日本黄大片高清| 能在线免费看毛片的网站| 久久女婷五月综合色啪小说 | 激情 狠狠 欧美| 如何舔出高潮| av国产免费在线观看| 男插女下体视频免费在线播放| 国产日韩欧美亚洲二区| 亚洲精品,欧美精品| 一本一本综合久久| 大香蕉久久网| 欧美性感艳星| 人妻 亚洲 视频| 日韩制服骚丝袜av| 最近的中文字幕免费完整| 国产黄a三级三级三级人| 少妇 在线观看| 久久久久久久久久人人人人人人| 一级毛片久久久久久久久女| 成人综合一区亚洲| 99热网站在线观看| 亚洲av不卡在线观看| 国产黄频视频在线观看| 黄色视频在线播放观看不卡| 在线天堂最新版资源| 国产成人a∨麻豆精品| 色5月婷婷丁香| 精品一区在线观看国产| 欧美一级a爱片免费观看看| www.色视频.com| 晚上一个人看的免费电影| av在线观看视频网站免费| 亚洲人与动物交配视频| 纵有疾风起免费观看全集完整版| 亚洲av免费高清在线观看| 寂寞人妻少妇视频99o| av国产久精品久网站免费入址| 女人久久www免费人成看片| 欧美激情在线99| 岛国毛片在线播放| 69人妻影院| 国产探花极品一区二区| 亚洲精品国产色婷婷电影| 亚洲丝袜综合中文字幕| 精品午夜福利在线看| av在线app专区| 一区二区av电影网| 国产爽快片一区二区三区| 日本色播在线视频| 国产乱来视频区| 亚洲激情五月婷婷啪啪| 乱系列少妇在线播放| av在线蜜桃| 热99国产精品久久久久久7| 国产熟女欧美一区二区| 能在线免费看毛片的网站| 大陆偷拍与自拍| 国产免费视频播放在线视频| 成人高潮视频无遮挡免费网站| 国产综合精华液| av在线亚洲专区| 国产精品精品国产色婷婷| 国产成人一区二区在线| 国产精品精品国产色婷婷| 伦精品一区二区三区| 国产高清国产精品国产三级 | 男人添女人高潮全过程视频| 日韩三级伦理在线观看| 中文在线观看免费www的网站| 久久久久久伊人网av| 国产在线一区二区三区精| 九九久久精品国产亚洲av麻豆| 亚洲人成网站在线播| 国产一区二区在线观看日韩| 成人亚洲精品av一区二区| 国产av码专区亚洲av| 久久精品久久精品一区二区三区| 亚洲国产日韩一区二区| 日日摸夜夜添夜夜爱| 九草在线视频观看| 久久久久久久精品精品| 伊人久久精品亚洲午夜| 国产精品女同一区二区软件| 国产精品不卡视频一区二区| 在线观看美女被高潮喷水网站| 精品少妇黑人巨大在线播放| 日本爱情动作片www.在线观看| 特级一级黄色大片| 黄色怎么调成土黄色| 国产一区二区三区综合在线观看 | 男女边摸边吃奶| 麻豆成人午夜福利视频| 国产女主播在线喷水免费视频网站| 五月天丁香电影| 纵有疾风起免费观看全集完整版| 色婷婷久久久亚洲欧美| 人妻夜夜爽99麻豆av| av女优亚洲男人天堂| 边亲边吃奶的免费视频| 水蜜桃什么品种好| 三级国产精品欧美在线观看| 国产精品嫩草影院av在线观看| 永久网站在线| 国产黄色视频一区二区在线观看| 日韩av在线免费看完整版不卡| 天堂俺去俺来也www色官网| 国产精品成人在线| 国产69精品久久久久777片| 自拍偷自拍亚洲精品老妇| 亚洲精品456在线播放app| 看非洲黑人一级黄片| 亚洲精品国产av蜜桃| 高清日韩中文字幕在线| 成人综合一区亚洲| 久久久久久久午夜电影| 久久久欧美国产精品| 久久久久久久精品精品| 女人久久www免费人成看片| 97热精品久久久久久| 成年女人看的毛片在线观看| av女优亚洲男人天堂| 午夜福利在线在线| 热re99久久精品国产66热6| 日韩精品有码人妻一区| 久久精品国产a三级三级三级| 99久久中文字幕三级久久日本| 国产日韩欧美在线精品| 国产亚洲91精品色在线| 赤兔流量卡办理| 免费大片18禁| 一个人看的www免费观看视频| 亚洲国产最新在线播放| 身体一侧抽搐| 久久久久国产精品人妻一区二区| 只有这里有精品99| 成人亚洲精品av一区二区| 亚洲国产精品专区欧美| 天堂网av新在线| 男女边吃奶边做爰视频| 日韩国内少妇激情av| 国产成人免费无遮挡视频| 精品国产露脸久久av麻豆| 国产黄色视频一区二区在线观看| 91aial.com中文字幕在线观看| 久久精品国产亚洲av天美| 亚洲av免费在线观看| 少妇的逼水好多| 欧美日韩视频高清一区二区三区二| 久久久久国产网址| 最近手机中文字幕大全| 日韩人妻高清精品专区| 免费看日本二区| 亚洲伊人久久精品综合| 成人综合一区亚洲| 少妇裸体淫交视频免费看高清| av福利片在线观看| 日韩亚洲欧美综合| 久久久亚洲精品成人影院| 亚洲成人一二三区av| 一区二区av电影网|