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

    基于地址空間標識符的QEMU動態(tài)跳轉(zhuǎn)優(yōu)化①

    2022-09-20 04:10:30位金弈梁洪亮
    計算機系統(tǒng)應用 2022年9期
    關(guān)鍵詞:頁表版本號標識符

    位金弈, 梁洪亮

    (北京郵電大學 計算機學院, 北京 100876)

    1 引言

    指令集架構(gòu)仿真技術(shù)能夠在缺少對應硬件設備的情況下輔助完成相關(guān)軟件的開發(fā)和測試工作, 以及方便硬件設計者更早地對設計方案進行評估. 以近年來新興的RISC-V[1]指令集架構(gòu)和開源領(lǐng)域主流的指令集架構(gòu)仿真器QEMU[2]為例, RISC-V指令集中對應向量指令的V擴展[3]和對應硬件加速虛擬化的H擴展[4]等指令擴展模塊均是先在QEMU中以0.x版本進行實現(xiàn), 經(jīng)過軟硬件磨合迭代到1.0版本后才由RISC-V基金會批準并正式寫入指令集規(guī)范.

    隨著硬件技術(shù)的不斷演進和軟件需求的持續(xù)增長,人們對仿真器的執(zhí)行性能也提出了更高的要求. 間接跳轉(zhuǎn)的處理方式是決定仿真器執(zhí)行效率的關(guān)鍵因素[5],特別是在全系統(tǒng)仿真的場景下, 目標架構(gòu)處理器的虛擬內(nèi)存功能允許跳轉(zhuǎn)目標的物理地址在運行時動態(tài)變化, 這一特性為仿真器正確和高效地實現(xiàn)間接跳轉(zhuǎn)和跨頁直接跳轉(zhuǎn)(后統(tǒng)稱為動態(tài)跳轉(zhuǎn))的語義帶來了許多挑戰(zhàn).

    本文分析了仿真目標架構(gòu)支持虛擬內(nèi)存的場景中QEMU翻譯塊間跳轉(zhuǎn)機制的不足, 并結(jié)合常見虛擬內(nèi)存模型的特點提出了基于地址空間標識符的動態(tài)跳轉(zhuǎn)改進方案. 該方案將地址翻譯從動態(tài)跳轉(zhuǎn)執(zhí)行的關(guān)鍵路徑中移除, 在保證正確解析跳轉(zhuǎn)目標的前提下提升仿真執(zhí)行性能. 本文在QEMU主線6.2.0版本中實現(xiàn)了這一方案, 并以RISC-V架構(gòu)的操作系統(tǒng)xv6-riscv[6]為例對方案的有效性進行評估, 實驗結(jié)果表明, 改進后的QEMU在8個測試程序中實現(xiàn)了約12%的平均運行性能提升.

    2 QEMU的現(xiàn)有翻譯塊間跳轉(zhuǎn)機制

    為了避免重復的取指譯碼開銷, QEMU使用動態(tài)二進制翻譯技術(shù), 以基本塊為單位將目標架構(gòu)的匯編指令翻譯成對應的宿主機指令并進行緩存, 由此得到的仿真執(zhí)行單元被稱為翻譯塊(translation block). 系統(tǒng)仿真模式下, 執(zhí)行流在翻譯塊間的轉(zhuǎn)移分為3類: 頁內(nèi)直接跳轉(zhuǎn)、間接跳轉(zhuǎn)和跨頁直接跳轉(zhuǎn).

    2.1 頁內(nèi)直接跳轉(zhuǎn)

    對通過直接跳轉(zhuǎn)連接的目標架構(gòu)基本塊而言, 其對應的翻譯塊擁有固定的前驅(qū)后繼關(guān)系. 作為優(yōu)化,QEMU通過翻譯塊直接鏈接的方式將前驅(qū)翻譯塊的退出操作重定向到后繼翻譯塊的入口處, 以消除后續(xù)執(zhí)行中動態(tài)查找后繼翻譯塊的運行時開銷.

    該機制借助QEMU的中間表示(intermediate representation, IR)指令goto_tb和exit_tb完成. 以64位RISC-V架構(gòu)為例, 當允許翻譯塊直接鏈接時, QEMU的翻譯前端為直接跳轉(zhuǎn)生成的IR指令和對應的x86_64宿主機代碼示例如圖1所示.

    圖1 直接跳轉(zhuǎn)IR序列在x86_64后端生成代碼舉例

    翻譯塊tb首次執(zhí)行時, 執(zhí)行流將通過goto_tb對應的空跳轉(zhuǎn)指令, 更新程序計數(shù)器(PC)后經(jīng)exit_tb返回QEMU查找或生成后繼翻譯塊, 并將tb中對應分支的空跳轉(zhuǎn)指令重定向到后繼翻譯塊的宿主機指令入口處. 后續(xù)執(zhí)行翻譯塊tb時將在goto_tb處完成直接跳轉(zhuǎn), 不再更新PC或進行翻譯塊查找.

    2.2 間接跳轉(zhuǎn)

    間接跳轉(zhuǎn)的目標地址不能在QEMU進行指令翻譯時確定, 且在運行時有多種可能(如相同函數(shù)的不同返回地址和面向?qū)ο竽J街邢嗤惖牟煌摲椒ǖ?, 故無法使用翻譯塊直接鏈接的方式進行優(yōu)化, 需要借助運行時的翻譯塊查找機制確定當次跳轉(zhuǎn)的目標.這一查找過程涉及兩級翻譯塊緩存, 即: 1)以PC地址通過哈希直接映射方式索引的vCPU線程私有緩存數(shù)組tb_jmp_cache; 2)以翻譯塊的虛擬地址和物理地址等信息作為鍵的全局共享哈希表QHT[7,8], QHT緩存了由QEMU翻譯得到且依然有效的所有翻譯塊. 為了后續(xù)敘述的方便, 本文以H0和H2分別指代QEMU現(xiàn)有的兩級翻譯塊緩存, 前述查找過程的具體流程如圖2所示, 其中虛線框代表對應環(huán)節(jié)的輸入.

    圖2 QEMU的翻譯塊查找流程

    翻譯塊執(zhí)行間接跳轉(zhuǎn)時, 需要更新PC后再通過上述翻譯塊查找機制獲取跳轉(zhuǎn)目標翻譯塊的入口地址(調(diào)用輔助函數(shù)helper_lookup_tb_ptr), 并通過goto_ptr對應的宿主機間接跳轉(zhuǎn)指令完成跳轉(zhuǎn). 以64位RISC-V架構(gòu)為例, QEMU的翻譯前端為間接跳轉(zhuǎn)生成的IR指令和對應的x86_64宿主機代碼示例如圖3所示.

    圖3 間接跳轉(zhuǎn)IR序列在x86_64后端生成代碼舉例

    2.3 跨頁直接跳轉(zhuǎn)

    跨頁直接跳轉(zhuǎn)擁有翻譯時可獲知的目標地址, 但其跳轉(zhuǎn)目標與當前基本塊位于目標架構(gòu)的不同虛擬內(nèi)存頁面上. 在全系統(tǒng)仿真模式下, 運行在QEMU中的特權(quán)軟件可以通過修改頁表等方式?jīng)Q定任意內(nèi)存頁的映射物理地址和訪問權(quán)限, 導致運行時跳轉(zhuǎn)目標發(fā)生變更, 這使得跨頁直接跳轉(zhuǎn)擁有了與間接跳轉(zhuǎn)類似的動態(tài)特性. 因此, QEMU保守地禁止對跨頁直接跳轉(zhuǎn)使用翻譯塊直接鏈接的優(yōu)化, 轉(zhuǎn)而使用與間接跳轉(zhuǎn)完全相同的動態(tài)查找機制完成跳轉(zhuǎn).

    2.4 現(xiàn)有跳轉(zhuǎn)機制存在的不足

    H0本身的查找開銷較低, 但其基于直接映射的組織方式使得緩存沖突的概率較大; 由于H0僅使用虛擬地址進行索引, QEMU必須在內(nèi)存映射發(fā)生改變時刷新H0以避免歧義. 上述因素導致翻譯塊查找的流程需要相對頻繁地訪問H2, 并使用物理地址確定跳轉(zhuǎn)的目標翻譯塊. 然而, QEMU中目標架構(gòu)地址翻譯過程本身所依賴的softTLB同樣不能在內(nèi)存映射改變后保持有效, 往往需要重新訪問softMMU獲取PC對應的物理地址. 因為QEMU不區(qū)分數(shù)據(jù)TLB與指令TLB, 仿真運行過程中由翻譯塊查找需求導致的地址翻譯還將與翻譯塊本身的數(shù)據(jù)讀寫操作爭用TLB, 帶來反復的頁表查詢開銷, 降低仿真執(zhí)行的效率.

    另一方面, QEMU保守地使用運行時查找翻譯塊的方式確??珥撝苯犹D(zhuǎn)的正確性. 單次翻譯塊查找的運行時開銷為數(shù)十條至數(shù)千條宿主機匯編指令(取決于H0和TLB是否命中), 且需要占用相應的緩存空間, 故代價遠高于頁內(nèi)直接跳轉(zhuǎn)(鏈接后通過單條宿主機跳轉(zhuǎn)指令即可完成). 而且, 對于任何稍具規(guī)模的軟件而言, 絕大多數(shù)由某一模塊發(fā)起, 以位于其他模塊中函數(shù)為目標的調(diào)用行為都會是跨越虛擬內(nèi)存頁面直接跳轉(zhuǎn), 且相關(guān)內(nèi)存映射在軟件的整個執(zhí)行過程中不會改變. 因此, 我們認為, 基于簡化程序執(zhí)行常見路徑的原則, 這一不足是有改進空間的.

    3 觀察與討論

    虛擬內(nèi)存是現(xiàn)代通用處理器的一項關(guān)鍵特性, 通過對內(nèi)存訪問進行抽象, 使特權(quán)軟件可以在運行時配置任意虛擬地址的映射內(nèi)存位置和訪問權(quán)限. 虛擬內(nèi)存機制的運作依賴軟硬件的配合, 包含以基數(shù)樹形式存在于內(nèi)存中的頁目錄、用于在頁目錄中查找虛擬地址對應映射描述條目的硬件單元MMU和用于緩存MMU查找結(jié)果的地址翻譯緩存TLB. 針對這一虛擬內(nèi)存的主流實現(xiàn)模型(單頁目錄、MMU、TLB), 關(guān)于虛擬內(nèi)存存在場景下內(nèi)存映射的不確定性對動態(tài)跳轉(zhuǎn)帶來的影響, 本文有以下3點觀察.

    3.1 翻譯塊查找無需使用完整物理地址

    為了區(qū)分虛擬地址相同而物理地址不同的翻譯塊,H2使用翻譯塊的物理地址輔助翻譯塊的索引和比對,而這也正是目前翻譯塊查找需要物理地址的原因. 對于前文提到的虛擬內(nèi)存的主流實現(xiàn)模型, 內(nèi)存映射完全由vCPU所使用的頁目錄(包含其下各級頁表)所決定, 因此我們可以嘗試為“頁目錄整體”建立一個地址空間標識符, 并將其作為額外的索引替代物理地址對翻譯塊進行標識, 免去查找時的地址翻譯開銷.

    3.2 TLB刷新本身不涉及內(nèi)存映射內(nèi)部的改變

    一般而言, TLB刷新只是為了迫使MMU重新訪問頁表, 使用更新后的頁目錄進行地址翻譯, 對頁目錄本身的修改或切換操作并不是由TLB刷新導致的. 但QEMU目前并不維護頁表頁相關(guān)的狀態(tài), 因而在TLB刷新后默認內(nèi)存映射可能發(fā)生任何變化, 無法區(qū)分地址空間的整體切換和局部修改. 一種改進方法是: 在仿真運行時監(jiān)測對頁目錄的寫入操作, 并據(jù)此修正已經(jīng)建立的地址空間標識符. 如果決定內(nèi)存映射的頁目錄在切換間隙未發(fā)生變化, 則之前運行過程中為其建立的地址空間標識符亦不需改變.

    3.3 對頁目錄的監(jiān)測只需關(guān)注被使用過的部分

    QEMU翻譯基本塊時, 需要首先根據(jù)當前PC進行地址翻譯以獲取取指使用的物理地址, 該過程會通過softMMU訪問當前頁目錄中的相關(guān)頁表頁. 另一方面,頁目錄中那些從未因指令地址翻譯的需求而被訪問的頁表頁可以被視為尚未加入當前地址空間, 對這些頁面的修改并不會影響該地址空間下翻譯塊查找的結(jié)果, 以及任何跨頁直接跳轉(zhuǎn)的有效性. 由此, 我們可以將監(jiān)測范圍局限于已生效的頁表頁, 從而消除主動探測頁目錄完整結(jié)構(gòu)所帶來的開銷. 當已生效頁表頁被修改時, 先前建立的地址空間標識符不再有效, 需要為其分配新的標識符以指代經(jīng)過內(nèi)部修改后得到的新地址空間.

    4 基于地址空間標識符的動態(tài)跳轉(zhuǎn)機制

    基于上述觀察與討論, 我們?yōu)镼EMU引入地址空間標識符的概念, 并對其動態(tài)跳轉(zhuǎn)處理機制進行優(yōu)化.

    4.1 地址空間標識符的定義與維護

    4.1.1 地址空間標識符的定義

    本文使用頁目錄的物理頁號和一個單調(diào)遞增的版本號共同作為由該頁目錄所決定內(nèi)存映射的地址空間標識符. 版本號的值初始化為零, 并在每次檢測到頁目錄變化時增一以示區(qū)別. 在頁目錄部分相同的情況下,若vCPU線程記錄的地址空間標識符版本號高于先前存儲于某處的標識符版本號, 則說明對應地址空間的內(nèi)存映射在仿真運行期間發(fā)生了改變.

    由此, 地址空間標識符提供了可用于區(qū)分不同內(nèi)存映射和檢測地址空間內(nèi)存映射是否發(fā)生改變的簡單機制. 在后續(xù)描述中, 將以QASID代指此處引入的地址空間標識符以簡化行文, 并區(qū)別于一般意義上的硬件ASID.

    4.1.2 地址空間標識符的維護

    與QEMU中代碼頁寫保護的建立過程類似, 我們采用如下方式對頁表頁進行寫保護: 維護新的物理頁狀態(tài)位圖DIRTY_MEMORY_PTE, 并在softMMU因為指令地址翻譯的需要而訪問各級頁表頁時標記此位圖中代表相應頁面的比特. 當QEMU為softTLB添加新的地址映射條目時, 將根據(jù)頁面在前述位圖中的狀態(tài)對應設置TLB表項的TLB_NOTDIRTY標志位, 從而截獲后續(xù)所有對受保護頁表頁的寫操作.

    頁表頁修改導致的版本號更新代表著對相應舊QASID的棄用, 在一些情況下, 修改并不會影響對動態(tài)跳轉(zhuǎn)目標的解析, 作為這類場景中寫保護觸發(fā)時的剪枝優(yōu)化, 我們進一步做如下3點設計:

    1)若被修改位置并非目標架構(gòu)中所規(guī)定的有效的頁表項, 則不需要更新版本號. 該方式可以過濾部分由動態(tài)內(nèi)存分配或進程按需調(diào)頁引起的頁表頁修改, 減少無謂的QASID棄用.

    2)保護頁表頁時記錄頁目錄的版本號, 若寫保護發(fā)生時, 頁目錄版本號已經(jīng)大于先前記錄的版本號, 則不需要繼續(xù)作更新. 版本號不同代表先前內(nèi)存映射對應的QASID已被丟棄, 而新的內(nèi)存映射尚未包含該頁表頁.

    3)目標架構(gòu)的有效頁表項被修改時, 立即取消對頁面的保護. 單個頁表項變化導致的內(nèi)存映射改變足以使原本的地址空間失效, 故其余的映射條目也不需要繼續(xù)被保護. 在原物理頁面不再作為頁表使用后, 該方法可以減少清空頁面導致的重復寫保護開銷.

    4.1.3 vCPU線程對地址空間標識符的獲取

    我們把vCPU當前使用的QASID作為vCPU線程私有數(shù)據(jù)存儲在vCPU的控制結(jié)構(gòu)中. 其中, 頁目錄物理頁號在目標軟件設置頁目錄(如寫入RISC-V 架構(gòu)中的SATP 寄存器)時同步作更新. 版本號在TLB刷新時設為非法值, 并按需從頁目錄的頁描述符PageDesc中獲取, 無需隨頁表頁修改而更新. 其原因在于TLB與頁表頁內(nèi)存的數(shù)據(jù)一致性是由軟件手動維護的, 而QASID作為對內(nèi)存映射的整體描述應具有相同的特性.

    4.2 地址空間標識符在動態(tài)跳轉(zhuǎn)處理中的應用

    4.2.1 間接跳轉(zhuǎn)

    QASID唯一決定了當前的內(nèi)存映射, 因而可以在翻譯塊的查找過程中替換原本使用的物理地址, 以省去地址翻譯的開銷. 為此, 本文修改QEMU現(xiàn)有的兩級翻譯塊緩存結(jié)構(gòu), 引入另外一個借助QASID進行索引的共享翻譯塊緩存H1, 并在查找間接跳轉(zhuǎn)目標時優(yōu)先查詢該緩存.

    H1亦基于QHT實現(xiàn), 其與H2的區(qū)別主要在于鍵值對的選取上. 對于鍵, 我們將H2中原本使用的物理地址替換為QASID的頁目錄物理頁號; 對于值, 我們把原本H2中指向翻譯塊的指針改為指向翻譯塊包裝的指針. 翻譯塊包裝(translation block wrapper)由翻譯塊指針和對應QASID構(gòu)成. 不在H1中直接插入翻譯塊的原因是翻譯塊可能被多個地址空間所共享, 此時單一的翻譯塊數(shù)據(jù)結(jié)構(gòu)無法存儲多個QASID, 因而基于哈希表的查找也就無從談起. 引入修改后QEMU對翻譯塊間接跳轉(zhuǎn)目標的查找流程如圖4所示.

    查找H1的過程不涉及版本號信息, 因而在命中后還需要與vCPU中記錄的QASID版本號進行比對. 版本號相等代表內(nèi)存映射未發(fā)生改變, 視為翻譯塊查找命中, 而版本號不相等的場景可以分為3類, 其中(1)和(2)對應圖4中檢查版本號不通過的情形, 需要進一步根據(jù)物理地址查詢H2以判斷跳轉(zhuǎn)目標是否發(fā)生改變.

    圖4 引入哈希表H1后的間接跳轉(zhuǎn)目標查找流程

    (1)翻譯塊包裝版本號小于vCPU版本號, 但H2中使用物理地址查找到相同的翻譯塊——說明地址空間的內(nèi)存映射發(fā)生改變, 但并未影響當前跳轉(zhuǎn)的目標地址, 因此我們只需更新翻譯塊包裝中的版本號信息.

    (2)翻譯塊包裝版本號小于vCPU版本號, 且H2中使用物理地址未查找到或查找到不同的翻譯塊——說明地址空間發(fā)生改變且影響了當前跳轉(zhuǎn)的目標地址,因此我們需要創(chuàng)建新的翻譯塊包裝替換H1中的原有元素.

    (3)翻譯塊包裝版本號大于vCPU版本號——說明內(nèi)存映射發(fā)生改變但當前vCPU尚未刷新 TLB, 較高的版本號來自并行執(zhí)行的其他vCPU線程, 因此我們視為翻譯塊查找命中.

    4.2.2 跨頁直接跳轉(zhuǎn)

    目前QEMU跨頁直接跳轉(zhuǎn)的主要困境在于缺乏高效的手段在運行時驗證跳轉(zhuǎn)目標的正確性, 因而其現(xiàn)有實現(xiàn)方案放棄對翻譯塊進行鏈接, 轉(zhuǎn)向使用徹底的動態(tài)查找. 我們提出的地址空間標識符(QASID)提供了檢驗跳轉(zhuǎn)目標正確性的輕量級方法, 基于QASID和第4.2.1節(jié)中引入的哈希表H1, 可以實現(xiàn)更加高效且語義相同的跨頁直接跳轉(zhuǎn).

    新方案為每個包含跨頁直接跳轉(zhuǎn)的翻譯塊分配用于存儲QASID的額外緩存空間, 并引入一條用于檢查內(nèi)存映射是否改變的IR指令asid_check, 配合頁內(nèi)翻譯塊直接鏈接機制中原有的goto_tb和exit_tb完成跨頁場景中的翻譯塊直接鏈接, 跨頁直接跳轉(zhuǎn)對應的IR指令序列如圖5所示.

    圖5 跨頁直接跳轉(zhuǎn)對應的IR指令序列

    asid_check讀取當前vCPU的QASID并與翻譯塊內(nèi)緩存的QASID進行比較以檢測內(nèi)存映射是否發(fā)生改變. 二者相等時執(zhí)行后續(xù)goto_tb和exit_tb對應的指令, 流程與頁內(nèi)直接跳轉(zhuǎn)相同; 二者不等時代表內(nèi)存映射可能發(fā)生變化, 執(zhí)行流進入slow path, 調(diào)用asid_check對應的輔助函數(shù)asid_check_helper做進一步處理. 以x86_64后端為例, asid_check對應的宿主機代碼如圖6.

    圖6 IR指令asid_check在x86_64后端生成代碼示例

    我們設計QASID的寬度為8字節(jié)以便在64位宿主機上通過單條匯編指令完成QASID的比較操作, 其中頁目錄物理頁號和版本號分別占據(jù)4字節(jié), 可以處理至多16 TB的物理地址空間. QASID緩存分配在翻譯塊尾部, 其基地址可由%rip作偏移得到. 由于多線程場景下可能出現(xiàn)多個vCPU使用不同QASID并行執(zhí)行相同翻譯塊的場景, 需要避免緩存爭用導致的slow path開銷, 因而緩存的大小由vCPU線程的數(shù)量決定, 在運行時使用vCPU編號進行索引. 另一方面, vCPU的編號和當前QASID可以從位于%rbp低地址的CPUNegativeOffsetState結(jié)構(gòu)體中讀取, 這一結(jié)構(gòu)體用于存儲仿真運行時需要頻繁使用的架構(gòu)無關(guān)數(shù)據(jù)(如softTLB和外設中斷請求等), 我們在其中增加vCPU編號和QASID兩個字段以簡化asid_check的實現(xiàn).

    當asid_check的執(zhí)行流進入slow path時, 輔助函數(shù)使用vCPU當前的QASID和傳入的跳轉(zhuǎn)目標虛擬地址查找H1, 根據(jù)查找H1的結(jié)果和當前翻譯塊的鏈接狀態(tài), 有以下兩種處理方式:

    (1) H1查找命中, 且翻譯塊包裝中記錄的版本號匹配, 且后繼goto_tb已經(jīng)鏈接了H1查找所返回的翻譯塊——此時可以看作翻譯塊共享導致的緩存沖突,因此我們只需更新翻譯塊的QASID緩存并直接返回.

    (2)其余情況——表明內(nèi)存映射發(fā)生變化, 或翻譯塊被多個地址空間所共享且在其中擁有若干個不同的后繼翻譯塊, 或翻譯塊尚未鏈接, 此時后繼跳轉(zhuǎn)的合法性有待進一步確認, 因此我們需要將翻譯塊中的goto_tb重置后返回.

    輔助函數(shù)asid_check_helper結(jié)束后, slow path將返回與其相鄰的goto_tb指令處, 根據(jù)輔助函數(shù)是否斷開了記錄在goto_tb中的直接鏈接, 執(zhí)行流將會在此處完成跳轉(zhuǎn), 或通過exit_tb回到QEMU查找后繼翻譯塊并嘗試重新鏈接.

    跨頁直接跳轉(zhuǎn)的重鏈接過程比較復雜, 因為vCPU線程共享翻譯塊, 我們需要保證各線程對共享翻譯塊的跳轉(zhuǎn)目標達成一致. 為此本文對翻譯塊鏈接的過程增加如下同步機制:

    (1)使用翻譯塊本身的jmp_lock保護翻譯塊的鏈接過程. 原本的翻譯塊鏈接機制只需要獲取跳轉(zhuǎn)目標翻譯塊的jmp_lock, 并結(jié)合了一些無鎖編程技巧.我們將其修改為一并獲取目標翻譯塊和跳轉(zhuǎn)翻譯塊本身的jmp_lock, 為避免可能導致的死鎖問題, 加鎖通過trylock的方式進行, 在失敗時釋放已有鎖并作重試.

    (2)引入新翻譯塊字段link_resolving并使用jmp_lock保護. 具體而言, 我們在斷開鏈接時設置link_resolving字段中對應當前線程的比特位, 以表明vCPU線程對當前翻譯塊的鏈接意圖, 嘗試對翻譯塊進行鏈接時清除link_resolving中對應當前線程的比特位, 且僅當這一字段為零時才真正進行鏈接.

    在上述同步機制的保護下, 翻譯塊的重鏈接過程可以對以下兩種場景進行甄別.

    (1)內(nèi)存映射發(fā)生改變導致翻譯塊跳轉(zhuǎn)目標變化;

    (2)跳轉(zhuǎn)目標同時存在多個對應物理地址.

    其中第2種情況無法由被共享翻譯塊末尾的直接跳轉(zhuǎn)語義處理, 需要將其丟棄, 并使用原本基于動態(tài)查找完成跳轉(zhuǎn)的方式重新翻譯. 我們通過維護翻譯塊的跳轉(zhuǎn)候選對象jmp_candidate完成對多跳轉(zhuǎn)目標物理地址的檢測, 具體流程如偽代碼1所示.

    偽代碼1. 多跳轉(zhuǎn)目標物理地址的檢測輸入: 翻譯塊tb, 跳轉(zhuǎn)方向n, 目標翻譯塊tb_next輸出: 翻譯塊跳轉(zhuǎn)是否存在多個目標物理地址if (tb→asid_cache[n]僅包含單一地址空間)tb→jmp_candidate[n] = RAM_ADDR_INVALID endif if (tb→jmp_candidate[n] == RAM_ADDR_INVALID)tb→jmp_candidate[n] = tb_next→phys_pc else if (tb→jmp_candidate[n] != tb_next→phys_pc)return TRUE endif return FALSE

    5 實驗評估

    本節(jié)以64位RISC-V架構(gòu)的教學用UNIX操作系統(tǒng)xv6-riscv及其用戶程序為測試對象, 對本文設計并實現(xiàn)的QEMU動態(tài)跳轉(zhuǎn)優(yōu)化算法進行評估. 我們的實現(xiàn)基于QEMU主線6.2.0版本, 測試操作系統(tǒng)內(nèi)核與用戶程序均使用前綴為riscv64-elf-的交叉編譯器和二進制工具進行編譯, 其中GCC版本為11.1.0, binutils版本為2.36.1. 編譯C語言文件時所使用的代碼生成相關(guān)編譯選項為-O -fno-omit-frame-pointer -mcmodel=medany -ffreestanding -fno-common -fno-pie -no-pie -nostdlib -fno-stack-protector, 需要說明的是, 我們?nèi)コ?mno-relax選項以啟用鏈接器的松弛化(linker relaxation)操作, 以便將RISC-V編譯器生成的函數(shù)調(diào)用指令序列auipc+jalr按照鏈接時地址盡可能轉(zhuǎn)換成對應直接跳轉(zhuǎn)的jal指令.

    測試使用的用戶程序為xv6-riscv自帶的測試用例集usertests, 該測試集共包含61個測試程序, 涵蓋了用戶進程管理、虛擬內(nèi)存管理、文件系統(tǒng)等諸多方面,其中運行時間較長的8個測試程序如表1所示.

    表1 測試集usertests中部分程序的名稱與邏輯描述

    我們以連續(xù)模式(對應命令行選項-c)執(zhí)行usertests測試集兩次, 并將收集到的執(zhí)行時長累加作為各測試用例的最終運行時間. 為了記錄單個測試用例的執(zhí)行時長, 我們在usertests的代碼中插樁, 使用xv6的uptime系統(tǒng)調(diào)用獲取每個測試測試用例執(zhí)行前后的時間戳,取其差值作為程序的運行時間, 另外將xv6內(nèi)核中的時鐘中斷周期調(diào)整為10 ms以獲取相對精確的計時.前述設定下usertests測試集中測試程序的運行時間節(jié)選如圖7所示.

    圖7中QEMU代表使用主線6.2.0版本運行時記錄的各測試用例的運行時間, QEMU-PTE代表加入頁表頁保護時各測試用例的運行時間, QEMU-H1表示實現(xiàn)了完整的動態(tài)跳轉(zhuǎn)優(yōu)化算法時各測試用例的運行時間, 所有數(shù)據(jù)均保留一位小數(shù). 圖8是將上述數(shù)據(jù)以原生QEMU運行時間做正則化后得到的相對比例.

    圖7 usertests 測試程序運行時間節(jié)選

    圖8 usertests測試程序正則化運行時間

    分析QEMU-PTE的運行時間可以得出, 引入頁表頁寫保護并未對測試程序的整體執(zhí)行時間造成很大影響——最差情況下在execout這一測試用例中引入了6%的執(zhí)行開銷. 進一步分析可以發(fā)現(xiàn), execout在執(zhí)行過程中需要反復使用sbrk系統(tǒng)調(diào)用將系統(tǒng)擁有的虛擬內(nèi)存全部分配完畢, 而OS為應用程序分配內(nèi)存的過程即是將物理頁地址寫入應用程序頁表頁的過程, 因而execout的運行過程涉及到較多對已受保護頁表頁的寫操作, 引入了一定的開銷. 本測試中仿真環(huán)境使用RISC-V的Sv39虛擬內(nèi)存模型, 共包含三級頁表頁, 由于保護代碼映射同時需要保護涉及到的所有非葉節(jié)點高層頁表頁, 因此, 當頁表級數(shù)隨著虛擬地址空間的擴大而增加時, 對高層頁表頁的保護會引入更多的開銷.

    另一方面, 圖8表明 QEMU-H1在選取的8個測試用例中實現(xiàn)了約12%的平均運行性能提升, 在涉及大量文件操作的bigdir, manywrites, concreate和createdelete四個測試用例上表現(xiàn)尤為明顯, 而在reparent2, twochildren和sbrkfail上帶來的變化則并不顯著. 我們通過分析xv6-riscv相關(guān)內(nèi)核功能實現(xiàn), 認為上述性能變化的原因如下: 文件操作的完成過程涉及較多的對代碼規(guī)模較小函數(shù)的調(diào)用, 包含文件系統(tǒng)日志、inode管理與查找、用戶空間數(shù)據(jù)交換和磁盤塊讀寫等, 相關(guān)函數(shù)的實現(xiàn)分散在內(nèi)核的不同模塊中, 因而產(chǎn)生了數(shù)量較多的函數(shù)返回與跨頁直接跳轉(zhuǎn); 與此相對地, 其余測試用例中大量使用的fork, wait, exit, sbrk系統(tǒng)調(diào)用的實現(xiàn)相對獨立, 僅使用少量接口與外部模塊交互. 我們反匯編內(nèi)核二進制文件發(fā)現(xiàn), 相關(guān)接口函數(shù)的代碼規(guī)模較大且數(shù)量少, 對應跳轉(zhuǎn)目標及返回地址可以被很好地緩存在H0中, 故QEMU-H1中額外引入的動態(tài)跳轉(zhuǎn)優(yōu)化沒有對其產(chǎn)生明顯的影響.

    6 相關(guān)工作

    目標架構(gòu)虛擬內(nèi)存特性的仿真對模擬器的整體設計和運行效率有深刻影響. Tong等人[9]在特定工作負載上定量研究了QEMU中內(nèi)存仿真模塊的運行開銷,并探索了softTLB的若干改進設計方案, 包含自適應擴容的動態(tài)大小TLB和為TLB額外添加全相聯(lián)后備緩沖等. Cota等人[10]改進了QEMU中TLB的擴容策略, 根據(jù)時間窗口內(nèi)的TLB占用率選擇合適的TLB大小以平衡TLB的命中率與刷新開銷. Hong等人[11]提出使用內(nèi)聯(lián)緩存的方式加速Q(mào)EMU的動態(tài)跳轉(zhuǎn), 對應目前QEMU中使用的lookup_and_goto_ptr邏輯.

    以上工作旨在優(yōu)化QEMU仿真過程中與地址翻譯相關(guān)的緩存結(jié)構(gòu)以增加命中概率, 但由軟件實現(xiàn)的緩存查詢操作本身亦導致了一定的開銷. 對此, Chang等人[12]提出了嵌入式影子頁表(ESPT)的方案, 將目標架構(gòu)的頁表嵌入QEMU進程自身的頁表中, 從而利用x86_64宿主機的地址翻譯硬件完成單指令的目標架構(gòu)內(nèi)存訪問. 在ESPT的基礎(chǔ)上, Wang等人[13]通過Linux系統(tǒng)的mmap系統(tǒng)調(diào)用完成對QEMU自身頁表的操作, 去除了對內(nèi)核模塊的依賴. Huang等人[14]借助龍芯3A4000處理器的對偶硬件TLB實現(xiàn)了更加通用的跨指令集架構(gòu)內(nèi)存虛擬化, 解決了ESPT方案中目標架構(gòu)地址空間需要嚴格小于宿主架構(gòu)地址空間的局限,且可以處理目標架構(gòu)與宿主架構(gòu)內(nèi)存頁面大小不匹配的情形.

    7 結(jié)語

    本文介紹了QEMU中翻譯塊間跳轉(zhuǎn)機制的原理,詳細分析了仿真目標架構(gòu)支持虛擬內(nèi)存的場景下現(xiàn)有跳轉(zhuǎn)機制的不足之處, 并針對常見的單頁目錄虛擬內(nèi)存模型提出和實現(xiàn)了基于地址空間標識符的動態(tài)跳轉(zhuǎn)改進方案. 該方案通過監(jiān)視對頁表頁的寫操作維護QEMU內(nèi)部的地址空間標識符, 并利用該標識符優(yōu)化動態(tài)跳轉(zhuǎn)目標的查找過程. 最后, 本文使用運行在RISC-V架構(gòu)上的教學用UNIX操作系統(tǒng)xv6-riscv對提出的方案進行了性能評估, 驗證了本文工作的有效性: 引入頁表頁寫保護對程序的執(zhí)行時間開銷影響較小, 動態(tài)跳轉(zhuǎn)優(yōu)化方案實現(xiàn)了約12%的平均運行性能提升.

    本文方案的局限在于QASID由頁目錄唯一決定,因而不能高效處理內(nèi)存映射受頁目錄以外因素影響的場景, 如RISC-V中可能開啟的物理內(nèi)存保護機制PMP和由H-擴展引入的兩階段地址翻譯等. 后續(xù)可以考慮設計綜合各項因素的QASID分配算法, 以提高方案的泛用性.

    猜你喜歡
    頁表版本號標識符
    淺析5G V2X 通信應用現(xiàn)狀及其側(cè)鏈路標識符更新技術(shù)
    基于底層虛擬機的標識符混淆方法
    計算機應用(2022年8期)2022-08-24 06:30:36
    更正
    中國糖料(2022年4期)2022-03-15 22:37:37
    作者更正
    基于區(qū)塊鏈的持久標識符系統(tǒng)①
    勘 誤
    更正
    認識vSphere安裝程序
    數(shù)字美術(shù)館“數(shù)字對象唯一標識符系統(tǒng)”建設需求淺議
    深入淺出 全面獲知系統(tǒng)版本號
    国产视频一区二区在线看| 国产aⅴ精品一区二区三区波| 亚洲av第一区精品v没综合| 免费高清视频大片| 欧美精品国产亚洲| 久久精品夜夜夜夜夜久久蜜豆| eeuss影院久久| 午夜福利在线观看免费完整高清在 | 久久久久国内视频| 午夜激情欧美在线| 乱码一卡2卡4卡精品| 熟妇人妻久久中文字幕3abv| 男女啪啪激烈高潮av片| 五月玫瑰六月丁香| 在现免费观看毛片| 国产色爽女视频免费观看| 欧美激情久久久久久爽电影| 亚洲精品成人久久久久久| 女生性感内裤真人,穿戴方法视频| 最后的刺客免费高清国语| 精品午夜福利视频在线观看一区| 老司机深夜福利视频在线观看| 日韩人妻高清精品专区| 日韩欧美三级三区| 最后的刺客免费高清国语| 蜜桃久久精品国产亚洲av| 欧美高清成人免费视频www| 在线天堂最新版资源| 一a级毛片在线观看| 久久久精品欧美日韩精品| 97热精品久久久久久| 久久精品国产99精品国产亚洲性色| 色尼玛亚洲综合影院| 欧美人与善性xxx| 99久久久亚洲精品蜜臀av| 国产高清激情床上av| 一个人免费在线观看电影| 午夜激情欧美在线| 亚洲精华国产精华液的使用体验 | 18+在线观看网站| av在线蜜桃| 亚洲美女视频黄频| 久久天躁狠狠躁夜夜2o2o| 99久国产av精品| 欧美日本视频| 国产高潮美女av| 国产精品人妻久久久影院| 嫩草影院入口| 直男gayav资源| 伊人久久精品亚洲午夜| 精品久久久久久久久亚洲 | 日韩精品中文字幕看吧| avwww免费| 精品免费久久久久久久清纯| 人妻久久中文字幕网| 国产伦一二天堂av在线观看| 亚洲国产精品sss在线观看| 少妇裸体淫交视频免费看高清| 国内精品久久久久久久电影| 99热这里只有是精品50| 在线观看av片永久免费下载| 久久久精品欧美日韩精品| 国内精品久久久久久久电影| 国内精品一区二区在线观看| 国内揄拍国产精品人妻在线| 日韩欧美精品免费久久| 亚洲欧美日韩高清在线视频| 久久精品91蜜桃| 亚洲中文字幕一区二区三区有码在线看| 亚洲av五月六月丁香网| 简卡轻食公司| 99精品久久久久人妻精品| 男人的好看免费观看在线视频| 免费看美女性在线毛片视频| 国产精品久久视频播放| 国产精华一区二区三区| 很黄的视频免费| 国产精品伦人一区二区| 欧美成人免费av一区二区三区| 欧美国产日韩亚洲一区| 天堂网av新在线| 91在线观看av| .国产精品久久| 国产极品精品免费视频能看的| 日韩欧美国产一区二区入口| 亚洲美女视频黄频| 亚洲狠狠婷婷综合久久图片| 18禁裸乳无遮挡免费网站照片| 国产69精品久久久久777片| 欧美最黄视频在线播放免费| 成人国产综合亚洲| 亚洲经典国产精华液单| 女同久久另类99精品国产91| 久久精品91蜜桃| 大型黄色视频在线免费观看| av中文乱码字幕在线| 3wmmmm亚洲av在线观看| 91麻豆精品激情在线观看国产| 国产av不卡久久| 最近视频中文字幕2019在线8| 欧美日韩乱码在线| 色播亚洲综合网| 俺也久久电影网| 国产人妻一区二区三区在| 两人在一起打扑克的视频| 国产精品久久久久久久久免| 性欧美人与动物交配| 日本三级黄在线观看| 天堂网av新在线| 日日摸夜夜添夜夜添av毛片 | 免费高清视频大片| 69人妻影院| 美女 人体艺术 gogo| 干丝袜人妻中文字幕| 免费一级毛片在线播放高清视频| 一区二区三区激情视频| avwww免费| 嫁个100分男人电影在线观看| 蜜桃久久精品国产亚洲av| 99热这里只有精品一区| 亚洲,欧美,日韩| 日韩欧美精品v在线| 成人午夜高清在线视频| 黄色丝袜av网址大全| 久久精品国产亚洲av涩爱 | 国产av麻豆久久久久久久| 国产精品一区二区三区四区免费观看 | 在线a可以看的网站| 婷婷色综合大香蕉| 亚洲四区av| 精品久久久久久成人av| 成年女人看的毛片在线观看| 国产高清激情床上av| 久久国内精品自在自线图片| 国产aⅴ精品一区二区三区波| ponron亚洲| 高清日韩中文字幕在线| 在线免费观看不下载黄p国产 | 色哟哟·www| 俺也久久电影网| 亚洲欧美日韩高清在线视频| 亚洲专区中文字幕在线| 五月玫瑰六月丁香| 很黄的视频免费| 99riav亚洲国产免费| 亚洲不卡免费看| 精品一区二区三区人妻视频| 在线观看av片永久免费下载| 最近最新免费中文字幕在线| 成人鲁丝片一二三区免费| 色综合婷婷激情| 国产真实伦视频高清在线观看 | 国产在线男女| 久久久久久久久中文| 国产一区二区在线av高清观看| 国产蜜桃级精品一区二区三区| www日本黄色视频网| 国产av在哪里看| 午夜福利18| 精品久久久久久久久亚洲 | 婷婷六月久久综合丁香| 日韩欧美三级三区| 一级毛片久久久久久久久女| 欧美精品国产亚洲| 99九九线精品视频在线观看视频| 国内毛片毛片毛片毛片毛片| 亚洲狠狠婷婷综合久久图片| 国产高清激情床上av| 少妇丰满av| 亚洲精品日韩av片在线观看| 久久久午夜欧美精品| 欧美日本亚洲视频在线播放| 久久国产乱子免费精品| 美女免费视频网站| 欧美又色又爽又黄视频| 老熟妇仑乱视频hdxx| 男女边吃奶边做爰视频| 国产高清激情床上av| 黄色女人牲交| 久久精品国产自在天天线| 亚洲成人免费电影在线观看| 日韩 亚洲 欧美在线| 我的女老师完整版在线观看| 国产av在哪里看| 亚洲av二区三区四区| 欧美最新免费一区二区三区| 欧美日韩瑟瑟在线播放| 在线观看免费视频日本深夜| 欧美激情久久久久久爽电影| 欧美激情久久久久久爽电影| 999久久久精品免费观看国产| 人妻夜夜爽99麻豆av| 一区二区三区高清视频在线| 亚洲精品亚洲一区二区| 成人毛片a级毛片在线播放| 看免费成人av毛片| 国产精品永久免费网站| 一卡2卡三卡四卡精品乱码亚洲| 精品久久久久久成人av| 成熟少妇高潮喷水视频| 国产在线精品亚洲第一网站| 九九爱精品视频在线观看| a在线观看视频网站| 久久6这里有精品| 在线观看美女被高潮喷水网站| 日日干狠狠操夜夜爽| 男插女下体视频免费在线播放| 三级毛片av免费| 蜜桃久久精品国产亚洲av| 观看免费一级毛片| 日日摸夜夜添夜夜添小说| 欧美日韩国产亚洲二区| 成人国产综合亚洲| 欧美区成人在线视频| 男女啪啪激烈高潮av片| 中文字幕av成人在线电影| 搡女人真爽免费视频火全软件 | 国产在线男女| 亚洲真实伦在线观看| 日韩强制内射视频| 中亚洲国语对白在线视频| 午夜免费男女啪啪视频观看 | 国产一区二区三区视频了| 日韩强制内射视频| 99热6这里只有精品| 黄色一级大片看看| 亚洲精品成人久久久久久| 欧美在线一区亚洲| 国产在线男女| av在线观看视频网站免费| 午夜a级毛片| 成人性生交大片免费视频hd| 中文字幕高清在线视频| 国产精品久久久久久精品电影| 国产成人影院久久av| 免费av观看视频| 欧美+亚洲+日韩+国产| 97热精品久久久久久| 真实男女啪啪啪动态图| 午夜影院日韩av| 99九九线精品视频在线观看视频| 精品国内亚洲2022精品成人| 美女免费视频网站| 99热这里只有是精品在线观看| av在线亚洲专区| 五月玫瑰六月丁香| 在线观看午夜福利视频| 欧美精品啪啪一区二区三区| 久久人人爽人人爽人人片va| 久久精品国产99精品国产亚洲性色| 三级国产精品欧美在线观看| 免费看美女性在线毛片视频| 99久久精品一区二区三区| 91午夜精品亚洲一区二区三区 | 亚洲国产精品合色在线| 国产精品三级大全| 无人区码免费观看不卡| 99精品在免费线老司机午夜| 亚洲精品在线观看二区| 成人无遮挡网站| 日韩大尺度精品在线看网址| 国产伦精品一区二区三区视频9| 久久午夜福利片| 尾随美女入室| 国产伦精品一区二区三区视频9| 午夜激情福利司机影院| 亚洲精品一卡2卡三卡4卡5卡| 国产一区二区三区在线臀色熟女| 老司机午夜福利在线观看视频| 一区二区三区高清视频在线| 91在线精品国自产拍蜜月| 欧美潮喷喷水| 亚洲精品一区av在线观看| 国产精华一区二区三区| 国产午夜精品论理片| 国产国拍精品亚洲av在线观看| 国产美女午夜福利| 日本黄色视频三级网站网址| 国产精品爽爽va在线观看网站| 99热这里只有是精品50| 午夜免费成人在线视频| 亚洲国产色片| 国产伦一二天堂av在线观看| 欧美性感艳星| 亚洲精品乱码久久久v下载方式| 国产三级在线视频| 长腿黑丝高跟| 国内精品久久久久精免费| 国产高清激情床上av| 亚洲国产色片| 搡老熟女国产l中国老女人| 黄色女人牲交| 久久久国产成人精品二区| 欧美精品啪啪一区二区三区| 免费大片18禁| 亚洲在线观看片| 91av网一区二区| 可以在线观看的亚洲视频| 在线观看免费视频日本深夜| 听说在线观看完整版免费高清| 天堂网av新在线| 亚洲色图av天堂| 天美传媒精品一区二区| 久久精品国产鲁丝片午夜精品 | 欧美成人一区二区免费高清观看| 国产欧美日韩精品一区二区| 久久精品久久久久久噜噜老黄 | 熟妇人妻久久中文字幕3abv| 99久久精品热视频| 免费黄网站久久成人精品| 国产高潮美女av| 午夜福利视频1000在线观看| 亚洲av中文字字幕乱码综合| 亚洲av日韩精品久久久久久密| 99热这里只有是精品在线观看| 99久久九九国产精品国产免费| 国产一区二区激情短视频| 国产精品久久久久久久久免| 亚洲自拍偷在线| 男女视频在线观看网站免费| 伊人久久精品亚洲午夜| 成年女人永久免费观看视频| 级片在线观看| 亚洲美女黄片视频| 最近在线观看免费完整版| 国产又黄又爽又无遮挡在线| 婷婷色综合大香蕉| 中亚洲国语对白在线视频| 免费观看精品视频网站| 欧美日韩精品成人综合77777| 啦啦啦啦在线视频资源| 免费观看在线日韩| 国产精华一区二区三区| 日日摸夜夜添夜夜添小说| 国产私拍福利视频在线观看| 亚洲欧美激情综合另类| 2021天堂中文幕一二区在线观| 久久久久久国产a免费观看| 国内久久婷婷六月综合欲色啪| 亚洲精品成人久久久久久| 最近在线观看免费完整版| 国产午夜福利久久久久久| 九九热线精品视视频播放| 成人美女网站在线观看视频| 少妇被粗大猛烈的视频| 亚洲av不卡在线观看| 国产精品亚洲一级av第二区| 久久久久国内视频| 国产欧美日韩精品一区二区| 日本 av在线| 亚洲av熟女| 99精品在免费线老司机午夜| 国产黄a三级三级三级人| 免费看av在线观看网站| 婷婷色综合大香蕉| 观看美女的网站| 亚洲,欧美,日韩| 久久久精品欧美日韩精品| 亚洲不卡免费看| 国产主播在线观看一区二区| 国产真实乱freesex| 免费在线观看影片大全网站| 18禁裸乳无遮挡免费网站照片| 亚洲,欧美,日韩| 免费观看人在逋| 亚洲在线自拍视频| 免费高清视频大片| 校园春色视频在线观看| av国产免费在线观看| 又爽又黄无遮挡网站| 国产一级毛片七仙女欲春2| 高清毛片免费观看视频网站| 中国美白少妇内射xxxbb| 欧美性猛交╳xxx乱大交人| 国产精品久久电影中文字幕| 香蕉av资源在线| 99在线视频只有这里精品首页| 免费在线观看影片大全网站| 精品人妻熟女av久视频| 九九在线视频观看精品| 日韩欧美精品免费久久| 欧美+日韩+精品| 免费大片18禁| 又黄又爽又刺激的免费视频.| 色吧在线观看| 中出人妻视频一区二区| 欧美bdsm另类| 精品无人区乱码1区二区| 日本五十路高清| 亚洲五月天丁香| 亚洲av二区三区四区| 夜夜爽天天搞| 亚洲,欧美,日韩| 最近中文字幕高清免费大全6 | 精品国产三级普通话版| 国内精品久久久久久久电影| 日日啪夜夜撸| 精品一区二区三区视频在线| 日本免费一区二区三区高清不卡| 日本免费a在线| 乱码一卡2卡4卡精品| 国产成年人精品一区二区| 又爽又黄无遮挡网站| 五月伊人婷婷丁香| 国产麻豆成人av免费视频| 动漫黄色视频在线观看| 日本欧美国产在线视频| 看免费成人av毛片| 性色avwww在线观看| 18+在线观看网站| 久久久精品欧美日韩精品| 又黄又爽又刺激的免费视频.| 日日撸夜夜添| 99热精品在线国产| 久久久久久久久大av| 国产在线精品亚洲第一网站| 搡老岳熟女国产| 亚洲人与动物交配视频| 午夜福利18| 午夜爱爱视频在线播放| 国产午夜精品久久久久久一区二区三区 | 久久精品91蜜桃| 嫁个100分男人电影在线观看| 熟妇人妻久久中文字幕3abv| 一个人观看的视频www高清免费观看| 亚洲成av人片在线播放无| 俄罗斯特黄特色一大片| 窝窝影院91人妻| 噜噜噜噜噜久久久久久91| 又爽又黄a免费视频| 亚洲一级一片aⅴ在线观看| 成人美女网站在线观看视频| 99热网站在线观看| 精品久久久久久久久久免费视频| 热99在线观看视频| 久久久精品大字幕| 午夜a级毛片| 老师上课跳d突然被开到最大视频| 亚洲av.av天堂| 色av中文字幕| 97超视频在线观看视频| 日韩欧美在线二视频| 在线免费观看的www视频| 亚洲avbb在线观看| 天堂动漫精品| 99热精品在线国产| АⅤ资源中文在线天堂| 在线播放无遮挡| 国产黄a三级三级三级人| 亚洲中文日韩欧美视频| 色吧在线观看| 国产激情偷乱视频一区二区| 我要看日韩黄色一级片| 国产91精品成人一区二区三区| 久9热在线精品视频| 色哟哟哟哟哟哟| 一进一出抽搐动态| 深夜a级毛片| a在线观看视频网站| 国产精品综合久久久久久久免费| 久久99热6这里只有精品| 国产乱人视频| 成熟少妇高潮喷水视频| 丰满人妻一区二区三区视频av| 精品日产1卡2卡| 久久中文看片网| 99热这里只有精品一区| 日韩中字成人| 干丝袜人妻中文字幕| 国产伦精品一区二区三区视频9| 久久久精品大字幕| 国产私拍福利视频在线观看| 中文字幕av在线有码专区| 九九久久精品国产亚洲av麻豆| 国产高清三级在线| 国国产精品蜜臀av免费| 欧美潮喷喷水| 校园人妻丝袜中文字幕| 欧美日韩国产亚洲二区| 最后的刺客免费高清国语| 悠悠久久av| 好男人在线观看高清免费视频| 国产男靠女视频免费网站| 能在线免费观看的黄片| 3wmmmm亚洲av在线观看| 精品久久久噜噜| 亚洲av.av天堂| 国产在线男女| av视频在线观看入口| 日韩,欧美,国产一区二区三区 | 午夜激情福利司机影院| 午夜福利欧美成人| 亚洲人成网站高清观看| 九九久久精品国产亚洲av麻豆| 日日夜夜操网爽| 我要看日韩黄色一级片| 欧美高清成人免费视频www| 少妇猛男粗大的猛烈进出视频 | bbb黄色大片| 国产午夜精品久久久久久一区二区三区 | 国产精品一区二区性色av| 俺也久久电影网| 中文字幕久久专区| 精品无人区乱码1区二区| .国产精品久久| 免费不卡的大黄色大毛片视频在线观看 | 亚洲欧美精品综合久久99| 不卡视频在线观看欧美| 国产伦人伦偷精品视频| 国产综合懂色| 亚洲美女视频黄频| 禁无遮挡网站| 尾随美女入室| 国产精品精品国产色婷婷| 成人精品一区二区免费| 嫩草影院入口| 亚洲 国产 在线| 国产真实乱freesex| 精品久久久久久久久亚洲 | 91午夜精品亚洲一区二区三区 | 婷婷精品国产亚洲av在线| 中文字幕免费在线视频6| 色在线成人网| 老师上课跳d突然被开到最大视频| 国产男靠女视频免费网站| 天堂影院成人在线观看| a级毛片a级免费在线| 免费在线观看日本一区| 日本a在线网址| 日本-黄色视频高清免费观看| 日韩高清综合在线| 神马国产精品三级电影在线观看| 精品99又大又爽又粗少妇毛片 | 欧美一级a爱片免费观看看| 一进一出好大好爽视频| 在线国产一区二区在线| 最后的刺客免费高清国语| 熟女电影av网| 日本撒尿小便嘘嘘汇集6| 精品一区二区免费观看| 亚洲天堂国产精品一区在线| 免费大片18禁| 国产午夜精品论理片| 国产亚洲av嫩草精品影院| 2021天堂中文幕一二区在线观| 韩国av在线不卡| 国产91精品成人一区二区三区| 欧美高清成人免费视频www| 少妇裸体淫交视频免费看高清| 中文亚洲av片在线观看爽| 久久久久性生活片| 日本五十路高清| av在线老鸭窝| 九九久久精品国产亚洲av麻豆| 亚洲avbb在线观看| 成人特级av手机在线观看| 一卡2卡三卡四卡精品乱码亚洲| 亚洲成人中文字幕在线播放| 久久草成人影院| 亚洲美女视频黄频| 亚洲午夜理论影院| 亚洲av日韩精品久久久久久密| 日韩欧美在线乱码| 男插女下体视频免费在线播放| 色5月婷婷丁香| 亚洲av免费高清在线观看| 美女大奶头视频| 极品教师在线视频| 国产一区二区亚洲精品在线观看| 国产白丝娇喘喷水9色精品| 97热精品久久久久久| 婷婷精品国产亚洲av在线| 日本一本二区三区精品| 精品午夜福利在线看| 天天一区二区日本电影三级| 久久久国产成人免费| 麻豆久久精品国产亚洲av| 欧美成人免费av一区二区三区| 哪里可以看免费的av片| 久久久久久久久中文| 男人的好看免费观看在线视频| 国产三级在线视频| 亚洲欧美精品综合久久99| 国国产精品蜜臀av免费| 国产精品1区2区在线观看.| 午夜免费激情av| 日韩中字成人| 亚洲av中文字字幕乱码综合| 日本免费a在线| 久久久久久九九精品二区国产| 成人亚洲精品av一区二区| 国产精品免费一区二区三区在线| 伊人久久精品亚洲午夜| 99精品久久久久人妻精品| av天堂在线播放| 日韩大尺度精品在线看网址| 日韩av在线大香蕉| 国产极品精品免费视频能看的| 91麻豆av在线| 国产黄a三级三级三级人| 精品国内亚洲2022精品成人| 午夜福利在线观看吧| 亚洲国产精品合色在线| 免费在线观看成人毛片| 亚州av有码| 国产成人a区在线观看| 成人午夜高清在线视频| 99国产极品粉嫩在线观看| 久久精品国产99精品国产亚洲性色| 精品久久国产蜜桃| 全区人妻精品视频| 中亚洲国语对白在线视频| 自拍偷自拍亚洲精品老妇| 黄色欧美视频在线观看| 色综合站精品国产|