99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

ARMv8/v9 Generic Timer虛擬化深度解析:從硬件到KVM實現(xiàn)

ARMv8/v9 Generic Timer虛擬化深度解析:從硬件到KVM實現(xiàn) ARMv8/v9 Generic Timer虛擬化架構(gòu)拆解做虛擬化平臺的老哥們應該都有同感時間不對一切白給。無論是虛擬機的時鐘漂移、線程調(diào)度延遲還是容器網(wǎng)絡的超時重傳底層都是定時器在撐著。而ARM平臺上這個定時器地基就是Generic Timer。今天這篇不聊泛泛的架構(gòu)概念直接進到ARMv8/v9 Generic Timer在虛擬化場景下的內(nèi)部機制從硬件視圖、軟件分層到KVM落地實現(xiàn)一整套拆開揉碎講清楚。先說清楚這文章解決什么問題如果你正在做KVM虛擬化開發(fā)、BSP適配、或者排查虛擬機時鐘異常類問題這篇文章能幫你建立起從硬件定時器到KVM虛擬中斷的完整鏈路認知。如果你只是聽說過Generic Timer想入門跟著走一遍也能搞清楚它的核心機制后面遇到問題至少知道去哪一層排查。標題里V-15和A-40是我們內(nèi)部項目對虛擬化和架構(gòu)兩塊內(nèi)容的編號不必糾結(jié)具體含義下面直接進正題。1. 定時器虛擬化的三個核心難題1.1 時間在虛擬化世界里為什么這么難虛擬化最容易被低估的復雜度就是時間。CPU、內(nèi)存、設備都可以通過硬件虛擬化擴展來加速唯獨時間這個東西它的設備是每顆CPU核心自帶的而且它的讀取頻率極高——操作系統(tǒng)的時鐘節(jié)拍、調(diào)度器的tick、協(xié)議棧的超時計算全都在高頻讀時間。想象一下你有一個物理鬧鐘現(xiàn)在要把它分給10個人用每個人都想在自己的時間線上設置鬧鈴、讀取當前時間而且互相不能干擾。更麻煩的是每個人虛擬機還希望自己可以隨意撥快撥慢手表修改系統(tǒng)時間但不能影響別人。這就是定時器虛擬化的本質(zhì)難題。具體拆解成三個問題來看時間來源一致性所有虛擬機看到的當前時間必須有一個統(tǒng)一的基準不能每顆CPU各說各話否則遷移和多核場景直接崩。虛擬時間隔離每臺虛擬機需要自己的時間線這個時間線的起點可以不同比如虛擬機剛啟動時時間是2010年宿主機已經(jīng)是2024年而且虛擬機修改自己的時間不能影響宿主機和其他虛擬機。定時中斷路由每臺虛擬機要能設置自己的鬧鐘時間到了要正確觸發(fā)對應的虛擬中斷并且要精確到微秒級別不能靠軟件輪詢。這三個問題ARM Generic Timer的虛擬化架構(gòu)就是專門為它們設計的。1.2 ARM沒有給定時器單獨開一條虛擬化捷徑這里要說一個容易誤解的點。ARM在虛擬化上做了很多硬件加速比如GIC (Generic Interrupt Controller) 對虛擬中斷的直接注入MMU有Stage-2地址轉(zhuǎn)換。但定時器這個模塊ARM并沒有提供一個虛擬定時器設備讓你直接操作。它采用的方式是提供一組精心設計的硬件機制讓Hypervisor用trap-and-emulate的方式來實現(xiàn)虛擬定時器但是把這個過程的開銷壓縮到極低。為什么不像PCIe直通那樣直接把定時器直通給虛擬機因為定時器不是獨立設備它是CPU核心的一部分而且多個虛擬機共享同一顆物理CPU。直通等于讓一個虛擬機霸占硬件資源其他虛擬機就沒法用定時器了。所以說ARM Generic Timer的虛擬化架構(gòu)本質(zhì)上是一個硬件輔助的軟件虛擬化方案。理解這一點后面看KVM的代碼邏輯就會順很多。2. Generic Timer硬件機制全景拆解2.1 系統(tǒng)計數(shù)器整個時間世界的基準ARM Generic Timer的頂層是一套系統(tǒng)級的計數(shù)器叫System Counter。這個計數(shù)器是唯一的、全局的、單調(diào)遞增的整個SoC上所有核心看到的值都是一樣的。它通常由主板上的晶振驅(qū)動頻率一般在1MHz到50MHz之間。System Counter在軟件側(cè)體現(xiàn)為兩個寄存器視圖CNTPCT物理計數(shù)器和CNTVCT虛擬計數(shù)器。這兩個寄存器都是64位的單位是tick。但是注意ARM的spec規(guī)定軟件不能直接讀System Counter本身必須通過每個核心上的CNTPCT/CNTVCT寄存器來讀。為什么要區(qū)分物理和虛擬兩套計數(shù)器視圖答案很簡單物理計數(shù)器給宿主機用虛擬計數(shù)器給虛擬機用。虛擬計數(shù)器 物理計數(shù)器 - Offset這個Offset由Hypervisor設置。這就是前面說的虛擬時間線的實現(xiàn)基礎。2.2 每個核心上的定時器組件結(jié)構(gòu)每個ARM核心上有兩組重要的定時器組件一組是給非安全世界的一組是給安全世界的。我們做虛擬化主要關注非安全世界也就是EL1和EL2這兩層下面的結(jié)構(gòu)以這套為主。每個核心上有四種定時器物理定時器 (Physical Timer)通常用于EL1/EL0非安全世界中斷號是PPI 13。虛擬定時器 (Virtual Timer)通常用于給虛擬機提供定時中斷中斷號是PPI 14。EL2物理定時器 (EL2 Physical Timer)給Hypervisor自己用的定時器中斷是PPI 26。安全物理定時器 (Secure Physical Timer)給TrustZone安全世界用的虛擬化場景一般用不到。每一種定時器都有自己的一組寄存器CompareValue比較值、Control控制、Status狀態(tài)。定時器的原理很簡單當前計數(shù)值 CompareValue 的時候觸發(fā)一次中斷。2.3 關鍵寄存器與作用域劃分把寄存器按訪問權(quán)限和虛擬化角色拆開看落實到代碼和調(diào)試上會更有操作性寄存器訪問層級虛擬化角色CNTPCT_EL0EL0/EL1可讀物理計數(shù)器Hypervisor讀物理時間用CNTVCT_EL0EL0/EL1可讀虛擬計數(shù)器虛擬機讀當前時間CNTVOFF_EL2僅EL2可寫虛擬計數(shù)器偏移量虛擬機時間線原點CNTP_TVAL_EL0EL0/EL1可寫物理定時器的遞減計數(shù)值CNTP_CTL_EL0EL0/EL1可寫物理定時器控制使能、屏蔽、狀態(tài)CNTP_CVAL_EL0EL0/EL1可寫物理定時器比較值CNTV_TVAL_EL0EL0/EL1可寫虛擬定時器的遞減計數(shù)值CNTV_CTL_EL0EL0/EL1可寫虛擬定時器控制CNTV_CVAL_EL0EL0/EL1可寫虛擬定時器比較值CNTHP_TVAL_EL2僅EL2EL2物理定時器CNTHP_CTL_EL2僅EL2EL2物理定時器控制CNTHP_CVAL_EL2僅EL2EL2物理定時器比較值CNTHCTL_EL2僅EL2控制EL0對計數(shù)器和定時器的訪問權(quán)限CNTKCTL_EL1EL1可寫控制EL0對內(nèi)核定時器寄存器的訪問這張表建議存一下排問題的時候會反復用到。特別是CNTVOFF_EL2和CNTHCTL_EL2這兩個是整個虛擬化的樞紐。2.4 計數(shù)器讀路徑為什么虛擬機讀時間也要被攔截這里有一個很多初學者沒注意到的設計點虛擬機執(zhí)行CNTVCT_EL0讀取時間在KVM的默認配置下是不需要trap到EL2的。ARM通過硬件機制讓CNTVCT_EL0直接讀出來一個已經(jīng)減去了CNTVOFF_EL2的值整個過程發(fā)生在硬件層面虛擬機根本不知道偏移的存在。但是有一個例外當虛擬機運行在32位模式而Hypervisor需要讀取CNTPCT的時候情況就變得復雜了。32位guest訪問CNTPCT會拆成兩次32位load高32位和低32位這中間可能發(fā)生高低位不一致的問題。KVM內(nèi)核對這個問題有專門的patch處理路徑后面在常見問題部分會講到。3. KVM定時器虛擬化架構(gòu)設計3.1 分層模型Host Timer和Guest TimerKVM在arch/arm64/kvm/arch_timer.c中實現(xiàn)了完整的定時器虛擬化邏輯。整套設計圍繞兩條時間線展開Host時間線基于CNTPCT物理計數(shù)器KVM用它來調(diào)度vCPU的執(zhí)行、計算虛擬機的運行時間。Guest時間線基于CNTVCT虛擬計數(shù)器虛擬機里的操作系統(tǒng)看到的時間。兩條時間線之間的橋梁就是CNTVOFF_EL2。KVM在加載vCPU到物理CPU上的時候?qū)懭脒@個寄存器vCPU切走的時候不需要恢復因為下個vCPU加載時會重新寫這個操作在關鍵路徑上只有一次MSR寫開銷極低。定時器的虛擬化用到的核心結(jié)構(gòu)體在KVM中分成兩層struct arch_timer_cpu { struct arch_timer_context timers[NR_KTIMERS]; struct hrtimer hrtimer; bool is_timer_running; }; struct arch_timer_context { struct kvm_vcpu *vcpu; enum kvm_arch_timers timer; u64 cnt_cval; u64 cnt_ctl; bool loaded; bool ready; };第一層是per-CPU結(jié)構(gòu)的每個vCPU一組第二層是具體的物理定時器和虛擬定時器各自獨立的上下文。從結(jié)構(gòu)體上就能看出設計意圖物理和虛擬兩個定時器分別模擬各自維護比較值和控制位kvm根據(jù)guest的配置決定用哪個。3.2 Virtual Timer和Physical Timer的分工策略這是KVM定時器虛擬化設計里最精彩的部分。為什么要有兩套定時器給guest用表面上看有虛擬定時器就夠了guest設鬧鐘就用CNTV_CVAL_EL0時間到了觸發(fā)PPI 14中斷不就行了嗎真實原因是某些guest操作系統(tǒng)會直接操作物理定時器而不是虛擬定時器。比如Linux內(nèi)核早期的arch timer驅(qū)動它在某些配置下直接使用物理timer。還有32位的ARM guest內(nèi)核某些版本的代碼路徑上會讀取CNTPCT來校準時間。如果guest運行在EL1虛擬機里它訪問CNTP_TVAL_EL0和CNTP_CTL_EL0是會直接透過到硬件物理定時器的在trap沒有配置的情況下它會在沒有Hypervisor掌控的情況下直接產(chǎn)生物理中斷這個中斷會直接送進guest卻沒有任何虛擬化層的管理成為一顆無法關閉的定時炸彈。所以KVM的做法是分兩層guest的物理定時器和虛擬定時器操作都必須經(jīng)過KVM的接管和控制。它最終映射到Host側(cè)的實現(xiàn)是用Host的一個真正的物理定時器來backing guest的某個定時器再通過vGIC把中斷以虛擬中斷的形式注入回guest。具體到實現(xiàn)上KVM的策略是虛擬定時器用虛擬計數(shù)器CNTVCT作為時間基準backing hrtimer基于host的CLOCK_MONOTONIC實際讀取cntpct換算中斷走PPI 14通過vgic注入。物理定時器用物理計數(shù)器CNTPCT作為時間基準backing hrtimer同樣基于host時間中斷走PPI 13通過vgic注入。兩個timer的backing hrtimer在host上共用同一個hrtimer實體arch_timer_cpu-hrtimer通過hrtimer_start重新指定到期時間來實現(xiàn)兩個timer的切換和共享。3.3 中斷的虛擬化路徑從硬件中斷到Guest IRQ定時器中斷是整個虛擬化鏈路里最長的路徑之一值得完整走一遍Host物理定時器超時觸發(fā)host的timer中斷handler。KVM的timer handlerkvm_timer_irq_handler被調(diào)用。這個handler識別中斷來源是backing timer到期。KVM檢查對應的arch_timer_context確認是否應該向guest注入中斷。如果要注入調(diào)用kvm_timer_update_irq通過irqchipvgic設置對應的虛擬中斷為pending狀態(tài)。vCPU在下一次進入guest模式時vgic會把pending中斷通過list register注入guest在EL1收到中斷。這里面有一個容易被忽略的關鍵細節(jié)KVM在判斷是否應該向guest注入中斷的時候不是簡單看hrtimer到期就注入而是要對比當前的虛擬計數(shù)器值和guest設置的定時器比較值。因為hrtimer的精度和實際timer的精度存在微小偏差KVM需要做一次校準static bool kvm_timer_irq_can_fire(struct arch_timer_context *timer_ctx) { u64 cnt; u64 cval, ctl; cval timer_ctx-cnt_cval; ctl timer_ctx-cnt_ctl; if (kvm_timer_should_fire(timer_ctx)) return false; cnt kvm_phys_timer_read(); if (cnt cval) return false; return (ctl ARCH_TIMER_CTRL_ENABLE) !(ctl ARCH_TIMER_CTRL_IT_MASK); }注意最后兩個條件ENABLE位和IT_MASK位。這說明KVM嚴格遵循ARM定時器的硬件語義即使hrtimer到點了如果guest屏蔽了中斷或者禁用了定時器也不能硬注入。3.4 KVM如何處理Guest屏蔽定時器中斷這個場景在真實運行中經(jīng)常出現(xiàn)而且坑特別多。Guest的Linux內(nèi)核在處理定時器中斷時會先屏蔽中斷設置IMASK位清掉pending狀態(tài)處理完再重新使能。如果KVM在guest屏蔽中斷期間直接把hrtimer停了guest重新使能時會發(fā)現(xiàn)定時器已經(jīng)沒有在走時間直接卡住。KVM的處理方式是即使guest屏蔽了中斷hrtimer也要繼續(xù)跑因為hrtimer的到期只是一個信號真正的是否注入中斷還要看guest的屏蔽狀態(tài)。而且KVM在hrtimer到期時如果發(fā)現(xiàn)guest屏蔽了中斷會通過編程硬件定時器的比較值讓它在下一個預期的到期點再次觸發(fā)形成輪詢等待的效果。這個繼續(xù)跑、不注入的策略保證了guest重新使能定時器后馬上就能收到一個pending的中斷時間線不會斷。但是代價是host側(cè)會多次觸發(fā)定時器中斷增加一定的CPU開銷。這塊在性能敏感場景值得做profile看看是不是有大量的spurious wakeup。4. 定時器的生命周期管理與vCPU調(diào)度聯(lián)動4.1 vCPU加載與卸載時定時器狀態(tài)保存KVM在vCPU切入和切出時對定時器有明確的狀態(tài)管理。切出的場景是vCPU被搶占、運行時間片到期或者需要退出到用戶空間處理IO。切入的時候KVM做這么幾件事void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu) { struct arch_timer_cpu *timer vcpu_to_timer(vcpu); struct arch_timer_context *vtimer vcpu_vtimer(vcpu); struct arch_timer_context *ptimer vcpu_ptimer(vcpu); kvm_timer_update_state(vcpu); if (timer-is_timer_running) return; timer-is_timer_running true; /* Set the offset for the virtual timer */ timer_set_voffset(vcpu-kvm, vcpu-arch.timer_irq.offset); kvm_timer_vcpu_load_nogic(vcpu); kvm_timer_unblock(vcpu); }關鍵在于寫入CNTVOFF_EL2把這條vCPU的虛擬時間線切到自己的坐標。更新vtimer和ptimer的硬件寄存器讓guest看到的定時器狀態(tài)連續(xù)。如果backing hrtimer已經(jīng)啟動過切回來時不需要重新啟動hrtimer它一直在跑只是到期事件可能因為vCPU不在而錯過了。這里有一個補課機制后面講。切出的時候邏輯對稱但要額外注意void kvm_timer_vcpu_put(struct kvm_vcpu *vcpu) { struct arch_timer_cpu *timer vcpu_to_timer(vcpu); struct arch_timer_context *vtimer vcpu_vtimer(vcpu); /* If the timer has expired, inject the interrupt */ if (kvm_timer_should_fire(vtimer)) kvm_timer_update_irq(vcpu, true, vtimer); if (!timer-is_timer_running) return; timer-is_timer_running false; timer_save_state(vcpu); timer-hrtimer.cancel(cancel_phys_timer); }這里有一個設計亮點即使vCPU被切出hrtimer也不是被cancel掉取消而是保留。如果guest設置的定時器到期時間還沒到hrtimer留在host的timer wheel里到期時照樣觸發(fā)如果guest設置的到期時間已經(jīng)過了那么在切出的時候KVM會立刻把虛擬中斷的pending狀態(tài)置上等vCPU下一次進入時直接處理。這就是為什么虛擬機的定時器即使在高負載宿主上也不會出現(xiàn)明顯漂移——因為KVM用的是host的硬件定時器來保證到期精度而不是依賴vCPU的調(diào)度。4.2 補課機制Guest錯過定時器中斷怎么辦展開講一下上面提到的補課機制。場景是這樣的guest的定時器在10ms后到期但是host負載很高vCPU在8ms的時候被切出了物理CPU直到20ms后才重新被調(diào)度回來。如果沒有補課機制這10ms的定時器事件就丟了guest醒來后發(fā)現(xiàn)時間已經(jīng)過去了20ms但它的定時器中斷一個都沒收到所有依賴定時器的邏輯全都錯亂。KVM的補課邏輯在kvm_timer_vcpu_load里static void kvm_timer_update_state(struct kvm_vcpu *vcpu) { struct arch_timer_cpu *timer vcpu_to_timer(vcpu); struct arch_timer_context *vtimer vcpu_vtimer(vcpu); struct arch_timer_context *ptimer vcpu_ptimer(vcpu); if (kvm_timer_should_fire(vtimer) ! vtimer-irq.level) kvm_timer_update_irq(vcpu, !vtimer-irq.level, vtimer); if (kvm_timer_should_fire(ptimer) ! ptimer-irq.level) kvm_timer_update_irq(vcpu, !ptimer-irq.level, ptimer); timer-hrtimer_active false; }kvm_timer_should_fire會做一次當前虛擬計數(shù)器和比較值的大小判斷。如果vCPU回來時發(fā)現(xiàn)當前時間已經(jīng)超過了guest設置的值就把中斷狀態(tài)更新為pending。因為這段時間guest的定時器中斷本質(zhì)上一直在pendingKVM通過這此判斷來模擬這個狀態(tài)。這個機制背后反映的設計哲學是定時器中斷本質(zhì)上是一個事件攜帶的機制只要最終狀態(tài)正確中間的丟失可以用狀態(tài)同步來彌補不需要逐個事件追溯。這與中斷控制器虛擬化中l(wèi)evel trigger的處理思路一脈相承。4.3 32位Guest的特殊處理與CNTPCT陷阱談32位guest之前先解釋一下為什么會有trap問題。當虛擬機運行在32位模式AArch32ARM架構(gòu)規(guī)定訪問某些64位寄存器的行為會primary變化。比如32位guest訪問CNTPCT_EL0會被trap到EL2。為什么因為32位guest無法一次完成64位load只能拆成兩次32位load兩次之間的高32位值可能已經(jīng)變了。如果不做trap處理guest會讀到撕裂的時間值。KVM的處理是接受這個trap然后模擬讀取用一次原子的64位讀拿到CNTPCT再拆成高32位和低32位返回給guest。所以這里多出來的開銷是必然的不是KVM實現(xiàn)的問題。但這里有一個嚴重的性能隱患如果guest的Linux內(nèi)核在時鐘校準里頻繁讀CNTPCT每次都會有trap整個系統(tǒng)時間校準路徑會變得特別慢。實際的KVM在arch/arm64/kvm/hyp/hyp-entry.S中有對應的handlertableel0_32_pc: ... el0_32_cntpct: ...它做了這樣的處理在hyp階段直接讀出CNTPCT拆成兩個32位值設置好返回寄存器后直接eret回guest全程不退出到host kernel。這個路徑把多次trap的開銷降到了單次trap一次內(nèi)存讀算是在架構(gòu)限制下的最優(yōu)解。我記得還有一處是CNTVCT的訪問在ARMv8.0的某個勘誤表里有提到32位guest讀CNTVCT_EL0也可能產(chǎn)生詭異的撕裂值個別內(nèi)核版本會在head.S里做一次重讀校準這里就不再展開了。5. KVM定時器實驗復現(xiàn)搭建一個最小觀測環(huán)境5.1 環(huán)境準備與內(nèi)核配置要點紙上談兵沒用。我自己的調(diào)試環(huán)境是QEMU KVM跑ARM64 guesthost是樹莓派的Ubuntu Server內(nèi)核5.15和另外一臺鯤鵬920服務器兩邊邏輯一致只是性能差很多。要復現(xiàn)本文講的定時器虛擬化行為需要確認以下配置項CONFIG_KVMyCONFIG_KVM_ARM_HOSTy這個不用多說。CONFIG_ARM_ARCH_TIMERyARM的arch timer驅(qū)動。CONFIG_ARM_GIC_V3y中斷控制器的v3版本。CONFIG_HZ_250或者CONFIG_HZ_1000guest里配置的時鐘頻率會影響定時器中斷頻率方便觀察差異。調(diào)試輸出方面建議打開tracefs的timer相關事件mount -t tracefs tracefs /sys/kernel/tracing echo 1 /sys/kernel/tracing/events/kvm/kvm_timer_update_irq/enable echo 1 /sys/kernel/tracing/events/kvm/kvm_hrtimer_start/enable echo 1 /sys/kernel/tracing/events/kvm/kvm_hrtimer_cancel/enable cat /sys/kernel/tracing/trace_pipe這三個trace event能完整還原KVM定時器的生命周期全貌從hrtimer啟動到中斷注入全鏈路可見。實測里面kvm_timer_update_irq的觸發(fā)頻率和guest的HZ配置強相關可以直觀看到虛擬定時器的tick節(jié)奏。5.2 一個觀測腳本確認CNTVOFF在不同VM間隔離要驗證CNTVOFF_EL2確實起到了虛擬機時間隔離的作用可以這樣操作在宿主機寫一個內(nèi)核模塊讀取CNTVCT_EL0和CNTPCT_EL0的差值不過這需要root權(quán)限和內(nèi)核模塊不是每個環(huán)境都方便更輕量的方式是跑一個只讀虛擬計數(shù)器的小程序#include stdint.h #include stdio.h #include time.h static inline uint64_t cntvct_read(void) { uint64_t val; asm volatile(mrs %0, cntvct_el0 : r (val)); return val; } static inline uint64_t cntpct_read(void) { uint64_t val; asm volatile(mrs %0, cntpct_el0 : r (val)); return val; } int main(void) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, ts); uint64_t v cntvct_read(); uint64_t p cntpct_read(); printf(CNTVCT%lu CNTPCT%lu diff%ld tick\n, v, p, p - v); return 0; }在宿主機上編譯運行diff會是一個固定值0或者某個常數(shù)取決于kernel啟動時是否設置了CNTVOFF為0在虛擬機里編譯運行同一個程序diff就是KVM設置的CNTVOFF_EL2值。兩個VM看到的diff不同這就能非常直觀地驗證虛擬時間線的隔離。實測中diff值通常是一個非常大的隨機偏移這就是KVM為每個VM分配的獨立時間原點。5.3 用ftrace驗證hrtimer與注入的因果關系更深入地驗證中斷注入路徑可以同時打開kvm和timer的trace事件echo 1 /sys/kernel/tracing/events/kvm/enable echo 1 /sys/kernel/tracing/events/timer/enable cat /sys/kernel/tracing/trace在guest里跑一個高頻率的定時器程序比如nanosleep 1msguest產(chǎn)生的定時器中斷會導致host側(cè)對應的backing hrtimer反復到期。trace里可以看到hrtimer_expire_entry到kvm_timer_update_irq之間通常只有幾微秒的延遲這說明中斷注入路徑是硬實時鏈路沒有經(jīng)過workqueue之類的延遲機制。如果發(fā)現(xiàn)hrtimer到期到中斷注入之間出現(xiàn)了超過100微秒的間隔那就要懷疑是不是host上有其他高優(yōu)先級中斷搶占了CPU或者vCPU沒有在物理CPU上運行導致hrtimer回調(diào)無法及時執(zhí)行。這個時候要改成per-cpu的hrtimerHRTIMER_MODE_ABS_HARD來保證硬中斷上下文中處理后面調(diào)優(yōu)部分會講怎么改。6. 高頻問題排查與性能調(diào)優(yōu)實錄6.1 虛擬機時鐘漂移最快排查清單虛擬機上最常被人吐槽的問題就是時鐘漂移本來以為是網(wǎng)絡問題查半天發(fā)現(xiàn)是時間不對導致TCP時間戳錯亂。遇到時鐘漂移按以下順序排查現(xiàn)象可能原因排查方法guest時間比host慢CNTVOFF配置異常host讀CNTVCT與guest讀CNTVCT對比guest時間跳變遷移后CNTVOFF未正確恢復檢查migration代碼路徑確認寫入CNTVOFF_EL2guest時間完全不動CNTFRQ未設置或異常dmesg看arch_timer驅(qū)動初始化日志定時中斷抖動大hrtimer模式不是HARD查/sys/kernel/debug/tracing看hrtimer回調(diào)上下文32位guest時間異常CNTPCT trap路徑問題strace guest內(nèi)讀時間函數(shù)看是否有頻繁trap最坑的一次經(jīng)歷是某個guest內(nèi)核版本里CNTKCTL_EL1的配置有bug導致guest無法在EL0訪問CNTVCT_EL0結(jié)果guest的vDSO里的時鐘讀取全部走了系統(tǒng)調(diào)用性能掉了一個量級。這種問題靠監(jiān)測是看不出來的要學會用perf trace去看guest內(nèi)時間系統(tǒng)調(diào)用的頻率是否異常。6.2 中斷風暴問題hrtimer空轉(zhuǎn)與RESCHED經(jīng)常有老哥反饋宿主機負載不高但CPU0的中斷占用率很高irqtop里看arch_timer中斷每秒觸發(fā)幾萬次。大概率是guest里的定時器配置了過高的頻率比如1000Hz而且guest處于idle狀態(tài)不斷進入WFI。KVM對guest的WFI處理會直接退出到host讓vCPU線程睡在hrtimer上等到下次虛擬定時器到期再喚醒。如果guest設置了非常短的定時器間隔vCPU就會不停地醒來再睡每次醒來都要走一遍完整的vCPU加載流程開銷非常大。調(diào)優(yōu)方向有兩個在guest里調(diào)低HZ從1000降到250能減少3/4的中斷觸發(fā)頻率絕大多數(shù)服務器場景完全夠用。在host側(cè)確認hrtimer的HRTIMER_MODE_ABS_HARD配置是否正確。KVM默認對timer hrtimer用的是hard模式在硬中斷上下文執(zhí)行hrtimer回調(diào)如果降級成了soft模式回調(diào)會進softirq延遲會明顯增加。同時要檢查KVM是否開啟了irqchip in-kernel模式。如果使用userspace irqchip比如老的kvmtool或者某些嵌入式場景虛擬中斷要通過eventfd通知到用戶空間再寫回每次注入都是兩次ioctl的開銷性能會差幾十倍。6.3 遷移場景下的定時器連續(xù)性保障vCPU熱遷移時定時器狀態(tài)遷移是一塊特別容易出bug的地方。KVM的遷移相關代碼在arch/arm64/kvm/arch_timer.c里有如下關鍵函數(shù)int kvm_timer_get_state(struct kvm_vcpu *vcpu) int kvm_timer_set_state(struct kvm_vcpu *vcpu)這兩個函數(shù)負責把當前vCPU的定時器狀態(tài)比較值、控制位保存到kvm_timer_context里然后在目標機上恢復。正常情況下遷移流程是源端暫停vCPU。kvm_timer_get_state保存vtimer和ptimer的cnt_cval、cnt_ctl。用戶空間QEMU/kvmtool把這些狀態(tài)傳給目標端。目標端kvm_timer_set_state恢復這些狀態(tài)。目標端vCPU啟動后在kvm_timer_vcpu_load時把cval寫入硬件寄存器。這里的坑在于目標機的CNTVCT值和源機的CNTVCT值不一樣因為兩臺機器的CNTVOFF_EL2不同?;謴蜖顟B(tài)時必須把源機的cval換算成目標機的cval換算公式是new_cval old_cval (new_vo - old_vo)。KVM在kvm_timer_set_state里會調(diào)用timer_set_voffset重新設置新VM的偏移然后根據(jù)偏移差調(diào)整cval。如果這一步做錯了guest遷移后定時器要么立即觸發(fā)一次虛假中斷要么延后好久才觸發(fā)。調(diào)試這個問題的辦法是在遷移前后各打印一下kvm_timer_get_state和kvm_timer_set_state出的cval和offsetecho 1 /sys/kernel/tracing/events/kvm/kvm_timer_get_state/enable echo 1 /sys/kernel/tracing/events/kvm/kvm_timer_set_state/enable對比兩份日志里的cnt_cval差值應該和兩邊的CNTVOFF差值完全一致如果不一致就是換算邏輯出了問題。6.4 從KVM向pKVM/槍口式虛擬化演進的影響ARMv9開始力推的CCAConfidential Compute Architecture和pKVMprotected KVM對定時器虛擬化的架構(gòu)影響值得提前關注。pKVM里Hypervisor本身被拆成了兩個世界root world高特權(quán)控制所有硬件和protected world受限的VMM運行環(huán)境。這意味著原來運行在EL2的KVM代碼被一分為二其中一部分降級到EL1。定時器虛擬化里最重要的CNTVOFF_EL2寫入操作在pKVM下由root world完成protected world的VMM不能再直接操作這個寄存器。整個中斷注入路徑也變了定時器中斷需要經(jīng)過root world的中轉(zhuǎn)才能到達protected world的VMM再到guest。這對系統(tǒng)軟件開發(fā)者意味著什么以前在KVM里直接操作timer寄存器做優(yōu)化的代碼路徑需要重新審視。比如原來用戶態(tài)通過KVM_CAP_ARM_TIMER控制定時器行為的方式在pKVM里可能不再可用因為那個狀態(tài)不在protected world的掌控范圍內(nèi)。好在ARM在硬件層面考慮了這一點EL2物理定時器PPI 26就是給hypervisor自己用的它不參與guest的定時器虛擬化所以hypervisor可以在不干擾guest虛擬定時器的情況下做自己的調(diào)度計時。pKVM也延續(xù)了這套設計用EL2物理定時器做自己的時間基準不和guest的時間線混在一起。7. 寫在最后的個人經(jīng)驗定時器虛擬化這塊看起來只是虛擬化體系里的一小塊但它牽扯到硬件架構(gòu)、中斷子系統(tǒng)、調(diào)度器、遷移等多個方向的交叉知識。串起來理解之后再去看其他設備的虛擬化比如vgic中斷虛擬化、PMU虛擬化很多設計思路都是相通的。我個人在做這套東西的過程中的幾個體會第一別上來就看KVM源碼先把ARM ARMARM Architecture Reference Manual里Generic Timer那章過一遍。很多KVM代碼里的常量和不直觀的位操作都是直接從寄存器語義翻譯過來的。第二排查時間相關問題的時候建立時間線世界觀特別有用。時刻問自己我現(xiàn)在看的是host時間線還是guest時間線CNTVOFF在中間扮演了什么角色一旦把坐標系分清楚至少70%的問題都能定位到正確方向。第三性能調(diào)優(yōu)不要憑空想。裝好ftrace和perf實測幾組數(shù)據(jù)再動代碼。很多時候你以為瓶頸在中斷注入的路徑上實際測出來的結(jié)果可能完全相反。沒有測量就沒有優(yōu)化。最后說一個調(diào)試小技巧如果你需要快速確認一個guest當前用的是vtimer還是ptimer只需要在guest里執(zhí)行cat /proc/interrupts | grep -E arch_timer|timer看中斷號。如果你看到的是一個外設中斷號非13/14說明guest代碼里做了自定義處理這時候就要懷疑它是不是在EL1直接操作物理定時器繞過KVM的虛擬化了。這種情況在改裝過內(nèi)核的安卓環(huán)境里尤其常見值得多留個心眼。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
深情五月天| 91精品熟女| 色99在线观看| 思思热精品免费视频| 久久天堂女人| 26uuu国产| 丁香五月中文字幕久色| 男人的天堂999| 色逼综合网| 五月婷婷综合久久| 婷婷五月天狠狠搞干| 日韩有码一区| 中文字幕乱轮| 欧洲亚洲最新精品| 婷婷六月天天| 欧美日本97| 99久久极情精品一区| 中文aV网| 五月激情久久综合| 99久热这里只有精品视频删减版| 丁香五月在线自慰| 九九精品亚洲| 婷香狠狠爱五月| 丝袜大香蕉| 久久婷婷五月天激情| 五月天成人网婷婷| 久热只有这里有精品| www.色情五月天.com| 综合六月激情婷婷| 亚洲色欲欧美一区二区三区| 99这里有精品久久97| 日韩激情网站| 天堂网亚洲色图| 色色操| 久久久无码精品成人A片小说 | 1024在线视频| 亚洲三A| 狠狠操综合| 激情五月天伊人av| 丁香五月乱中文字幕| 久久AAAA片一区二区| 久久与婷婷| 久草婷婷视频| 大香人妻| 色婷婷综合电影| 欧美日本免费一道免费视频| 五月天开心色色网| 久9精品视频在线| 日韩色色视频| 99熟女| 色色丁香婷婷| 婷婷五月六月丁香| 激情丁香婷婷| 国产又色又爽又黄又免费| 日本九九九九| 9l视频自拍9l九色成人| 婷婷丁香18| 日本婷久久| 欧美这里只有精品| 婷婷午夜精品久久久| 五月天色婷婷伊人网| 天天日夜夜操五月| 九九99九九99| 激情另类综合| 开心五月激情| 久久九九综合| 亚洲天堂热| 思思热在线精品视频| 色婷婷香蕉| www.色综合.com| 超碰猛烈的性猛交| 丁香五月婷婷在线| 少妇人妻丰满做爰XXX| 中文字幕在线免费观看视频| 亚洲乱码日产精品BD| 色婷婷影院| 色99在线| 免费色婷婷| 精品综合网在线| 国产精品男人AV不卡| 丁五月激情视频免费| 看久久性爱99视频| 丁香五月性爱| 日韩成人无码| 五月天大香蕉AV| 国产精产国品一二三在观看| 国产精品久久久久久久久久免费| 亚洲婷婷综合视频| 99re6热在线精品视频播放速度| 五月婷视频久久| 欧洲99视频在线| 婷婷黄色五月天在线视频| 青青操avbb| 青青夜夜狠狠夜夜狠狠| 久热网在线视频| 五月亭亭直播| 在线只有精品| 激情五月丁香色色去久久| www,com,五月色色| 777丁香六月青青草婷婷综合久月| xxx综合在线| 天天做天天爱天天要| 五月婷婷插一插| 噜噜久| 色情成人五月天| 亚洲欧美成人在线| 爱穴久久| 天天骑日日爽| 五月婷婷丁香婷婷| 婷婷色婷婷| 一区二区成人电影免费播放| 丁香六月欧美| 激情六月五月婷婷综合网| 亚州AV超碰人人操| 国产精品色| 中文字幕精品无码一区二区| 五月丁香久| 在线VA视频| 五月综合影院| 色色五月婷婷| 人妻aV在线| 色七色九九| 天天爽夜夜爽天天爽夜夜爽| 婷婷五月天色色| 99热热热天天人人人超超碰| 婷婷色婷婷亚洲成人| 五月婷婷无码专区| 丁香婷婷五月| 91精产品自偷自偷综合| 99精品网站| 精品人妻伦一二三区久久| 亚洲日日操| 狠狠色丁香| 久久性都花花世界成人免费视频| 六月婷婷网| 亚洲久久激情| 97色 五月天丁香| 操操啪| 久久这里只有精品视频1| 五月天综合在线观看视频| 啊v视频在线观看| 久久久.COM| 99re视频在线播放| 久久这里只有欧美| 国产高清av黄色看片| 激情综合色图| 综合在线色婷婷| 极品少妇XXXX精品少妇偷拍 | 玖玖五月丁香| 久久五月天 91| 激情五婷精品网在线观看网址| 99精在线| 精品九九久久| 久久五月婷天天干| 91中文狠狠综合| 亚洲欧洲另类| 激情色播| 99在线观看| 色99综合视频| 美日韩成人| 天堂色婷婷| 夜夜骑天天玩天天日| 色狠狠色| 99亚洲综合| 五月婷精品| 五月天激情综合网| 丁香五月六月综合欧美| www.五月婷| 日日操,夜夜撸| 99热久| 婷婷综合亚洲| www99精品| 欧美毛卡| 天天日天天插| 人人97操| 中文av网站| 久久天堂女人| 思思热在线观看| 97碰 在线视频观看| 插插五月天| 久热超碰| 这里只有国产精品在线| 婷婷五月激情基地| 丁香五月婷久久| 沈娜娜av| 久久视频婷婷| 另类视频综合| 婷婷在线视频| 思思热在线视频99| 丁香九月色| 天天夜天天色天天| 亚洲天堂色| 激情五月天色婷婷综合| 久草五月婷| 日韩AAAAAAAAAAA片| 97婷婷久久丁香| 日本毛片内射| 色五月色五天色情网| 伊人五月婷婷| 996er热| www.久久| 久久色大香蕉| 五月天成人综合| 啪啪黄页网| 久9热在线视频| 色色色色色色色色色色色色色97| 五月色婷婷综合| 久草a片| 久婷婷婷| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 99国产精品白浆在线观看免费| 五月情四婷婷| 手机在线视频观看9| 久久婷婷六月综合综合色| 嫩草国产| 精品人妻伦九区久久AAA片| 五月综合激情图片| 色婷婷激情四射视频| www.97碰碰com| 99热1| 伊人五月综合网| 天天草天天舔| 99超碰人人| 久久人操| 久久99成人性爱高清视频| 大香蕉久久久久久久久| 国产无套精品一区二区| 伊人狠狠操| 亚洲图色五月天| 99热国内精品| 色综合色综合色综合| 97九色视频| 欧美日本黄色| 怡红院精品视频久久久久久久久| 丁香婷婷91在线观看视频| h在线看免费版在线看| 五月天艹天天| 丁香婷婷大香蕉| 噼里啪啦完整版中文在线观看| 激情丁香五月婷婷啪啪| www.婷婷| 色停停影院五月天| 国产精品色色| 色噜噜狠狠色综合成人99| 久久er+| 91九色无码内射| 99亚洲精品视频| 六月丁香啪啪| 久久婷婷五月综合色奶水99啪| 日韩无码专区| 久久久五月四色| 久热大香蕉| 精品一二三区久久AAA片| 26uuu精品一区二区| 色啪影院| 日本在线观看91| www狠狠| 亚洲婷婷成人五月天| 情色五月天网站| 99欧美| 五月综合色| WWW、日本色丁香、co m| 99热精品10| 男男野外做爰全过程69| 第四色五月天| 99热综合网| 思思热99er在线视频| 婷婷丁香黄色| 国产干逼片| 九九热最新地址| 天天做好综合色| 日韩欧美一区二区三区四区| 99久在线精品| 狠狠99| ZpRSw| 五月婷婷激情五月| 丁香五月激情婷婷| 欧美色久| AV操操操| 79色色| 人妻内射麻豆视频| 4399在线观看免费高清电视剧| 成人网站av免费网站推荐| 荫道BBWBBB高潮潮喷| 99热综合网| 五月丁香六月婷婷综合网缴情| 激情文学 综合 色| 亚洲激情丁香五月天色| 丁香婷婷五月激情| 91色涩| 婷婷丁香www视频日本韩国| 久久无码成人| http:色情日本com| 亚洲亚洲人成综合网络| 亚洲日本韩国| 操一区| 99精品色| 激情五月天婷婷| 91碰碰碰| 六月天婷婷| 99色综合网| 久久六月综合| 色五月欧美| 色色A| 深爱激清网| 亚洲五月天狠狠| 色婷婷影院| 玖玖婷婷五月天| 亚洲成人AV在线播放| 五月婷婷激情日本| 久热 91| 久久综合播放| 五月婷中文字幕| 99re热在线观看| 色青五月天| 大香蕉狠狠爱主页| 色99在线视频| 这里只有精品热| 五月婷婷激情四季| 亚洲六月婷| 综合网五月天123| 天天色域综合网| 青青福利网| 色5月婷婷| 日操五月婷| 久久99久久99精品免观看软件 | 亚洲成人AV一区在线观看| 五月天久久色| 五月天基地| 久草狼人| 激情综合网激情五月天| 99re热精品在线视频| 久久三级视频| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 久九色| 天天玩夜夜操| www五月婷婷| 日噜噜色| 色色婷婷五月天| 人人操日| 天天舔天天摸天天透| 激情综合色播| 五月综合视频| www.韩日视频| 区美毛片子| 久久这里都是精品免费| 色综合综合网| 色五月婷婷在线| 丁香五月人妻| 亚洲人成网站999综合| 91久久免费| 久操福利| www.久久66| 五月丁香六月花| 美国十月色婷婷在线观看| 色五月激情婷婷| 色狠狠色噜噜AV天堂五区| www.第四色99| 国产激情久久| 色中色综合| 五月丁香狠狠爱| 一级黄在线| 大香蕉九九操| 开心日韩丁香婷婷五月| 色五月婷婷av| 99热在线中出| 丁香五月综合激情久久潮喷| 泰州成人视频| 风流少妇A片一区二区蜜桃| 看逼中文字幕| 激情丁香五月激情婷婷| 大香蕉九九| 九九99精品免费播放| aa久久| 精品三区影院| 超碰AAAAAAV| 99在线观看精品视频| 97色色网| 99在线69| 九热视频| 91re色综合视频| 九九精品热| 九九热在线观看视频网站| 免费看欧美成人A片无码| 日本狠狠干| 婷婷五月天中文字幕| 五月天 综合 在线| 综合色情网| 亚洲视频在线网| 丁香五月综合激情久久潮喷| 久久婷婷国产| 亭亭玉月丁香| 五月天色婷婷网| 91热爆在线| 中文字幕五月久久婷| 亚洲五月婷天天操| 婷婷色网| 涩涩五月天综合| 天天综合色丁香| 免费看片操逼| 五月婷婷激情网| 亚洲激情五月| 五月天婷婷在线播放免费| 五月丁香婷婷综合| 婷婷九九视频| 26uuu欧美日本| 久久99最新地址| 九九激情网| 伊人久久大香网| 成人在线观看一区| 26uuu欧美日本| A片试看120分钟做受视频红杏| 色伊人婷婷| 色噜噜狠狠色综无码久久合欧美 | 夜夜干夜夜操| 久操操| 99re免费精品视频| 日本精品99网站| 伊人婷婷五月天| 日本97在线看片| 丁香涩涩五月天| 在线观看国产高清视频免费网站| 《战争与艾拉》完整版| 成人免费120分钟啪啪| 热99国产精品| 五月天婷婷小说| 五月天社区| 女婷久久| 99热9| 另类图片天天影视在线观看| 婷婷亚洲综合| 99视频| 99热最新精品| 色综合99| 亚洲婷婷婷| 丁香五月婷婷欧美性爱| 五月丁香花激情综合网| 另类图片五月天激情| 五月天另类小说| 国产婷婷久久| 五月婷婷色播| 风流少妇A片一区二区蜜桃| 六月丁香啪| 婷婷色导航| 99热这里只有精品手机在线观看| 无码免费人妻A片AAA毛片西瓜| 天天日夜夜B久久| 日本久久网| 99热青青草原| 婷婷玖玖丁香| 久久婷综合| 色10月婷婷视频| 日日夜夜狠狠| 日韩乱玛久久| 久久婷婷五月天激情四射| 久99久视频| 新激情五月天| 色色a| g00d人体西西| 丁香成人五月天| 中文不卡一二三区| 丁香婷婷五月人体| 狠狠做婷婷| 五月www| 亚洲日比视频| av在线中文| 激情无码五月天| 色综合综合综合| 色婷婷丁香五月| 国产激情av| www.zbzhongsen.com| 激情五月天综合图片小说网站| 91se精品国产| 亚洲成人网在线观看| 中文字幕丰满乱孑伦无码专区| 少妇AB又爽又紧无码网站| 色五XX| 伊人www22综合色| 99色婷婷| 激情综合网丁香| 久久XX| 五月天婷婷在线播放免费| 五月丁香综合成人社区| 久久精品99| 五月天无码视屏播放| 色婷婷aV四虎| 91丨九色丨大屁股| 丁香婷婷九月| α久久| 丁香六月婷| 俺去也五月| 五月婷婷官网色| 深爱激情网婷婷| 五五月丁香花激情综合网| 91偷拍视频| 久久久久久欧美精品se一二三四| 丁香五月婷婷综合视频| 五月婷婷影| 色综合天天天天做夜夜| 六月婷欧美| 日本精品人妻无码77777| 2017人人操| www.色窝| 国产色网站| 91人妻人人操人人爽| 七七九色| 欧美日韓成人亚洲精品另类| 丁香五月在线观看完整版| 亚洲情欲| 丁香五月六月婷婷综合| 丁香色五月天| 中国女人做爰A片| 天天综合区| 99久久亚洲国产| w婷婷五月婷婷w| 九九综合视频在线观看| 五月情综合| www.深爱激情| 中文字幕永久在线| 久久精品熟女亚洲AV麻豆| 91/九色黑人| 国产成人高清| 99热精品一区| 超碰97人人操| 超碰在线成人| 久久小视频| 天天情色综合网| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | cao视频,现在观看| 九九九热精品| 南京搡BBBB搡BBBB| 91久久精品无码一区二区三区| 色99在线| 99re视频在线| 婷婷六月网| 婷婷久月| 欧美97超碰| 亚洲九九夜夜| 激情六月色| 欧美黄色一级录像| 亚洲五月婷婷| 五月婷婷丁香六月| 在线只有精品| 色情成人五月天| 一区二区成人电影| 日本啪啪天堂| 激情婷婷| 婷婷在线播放| 美女美女美女三级色天天天天天| 婷婷丁香五月天中文字幕| 六月丁香婷婷尤物| 99re这里只有精品首页| 九九久久综合网站| 五月婷婷自拍| www天天色天天射| 深情五月天| 天天久综合| 色在线视频网2025| 色欲午夜无码久久久久久张津瑜| 婷婷玖玖五月天| 激情五月婷黄版| 丁香激情五月| 99色精品| 超碰人人在线| 激情丁香婷婷| 色狠久| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 色丁香六月| 超碰1999| 五月天堂婷婷| 激情综合亚洲| 婷婷久久综合| 老司机视频lsj爱就色| 亚洲精品九九| www.日韩国产| 丁香蜜臀黄色婷婷五月天| 120分钟婬片免费看| 轮奸综合网| 色五月丁香一区在线| 天天射天天射一道本日本社区| 欧美英丁香开心快乐六月天网| 婷婷色网站| 亚洲VA口| 色情五月综合婷婷| 波多婷婷久久| 婷婷丁香宗合888| 婷婷操无码| 在线色婷婷| 99久久精品国产色欲| 成人短视频在线| www.99热国产| 蜜桃五月天色| 色婷天天| 青草青草视频2免费观看| 五月婷婷很很色| 九色综合五月天婷五月| 色五月婷婷综合| 婷婷丁香五月天综合网| 五月天伊人网| 丁香六月婷婷综合| 国产中文字幕在线视频免费观看| 丁香五月电影| 丁香五月婷婷激情中文| 91ncom.色| 热思思九九| 欧美丁香五月| 丁香五月天婷婷久久综合| 欧美丁香婷婷五月| 欧美成人va| 九月婷婷激情久久| 日本无va视频| 成人电影AV在线观看| 国色天香成人网| 色婷婷香蕉在线| 五月天久久www| 五月天激情中文字幕| 伊人婷婷综合| 免费日本aⅴ中文字幕 | A1片久久久| 中文字幕丰满孑伦无码专区| 婷婷五月天最新网址| 色综合中文色综合网| 99久久思思| 在线成人视频免费| 欧美A片在线视频免费观看| 成人网址在线观看| 丁香五月婷婷色偷偷| 久久视频婷婷视频| 色99最新网址| 台湾综合丁香五月蜜桃| A久久| 午夜天堂一区人妻| 激情综合网五月在线播放| www,色色色网站| 免费看欧美成人A片无码| 影音先锋91| 亚洲色情网站| 免费超碰在线观看| 日本三级日本三级99| 婷婷五月天激情在线| 1024人妻| 婷婷爱五月| 天天草天天日| 国产午夜成人AV在线播放| 热九九精品| 亚洲激情久久| 天天网曰日曰夜夜综合永久免费| 另类色视频| 久久久久久久97| 天天综合网~91| 99视频热| 99A片| 狠狠大香婷婷爱| 激情四射婷婷| 九月综合| 婷婷五月天激情电影| 久久婷婷色综合老司机| 五月丁香狠狠| 91色五月在线观看| 欧洲综合色| 亚洲中文字幕在线观看| 丁香婷婷五月天网站| 婷婷五月天激情小说| 日91高清无玛| 激情综合网五月激情网| 九月大香蕉| 日日狠狠久久偷偷四色综合免费| 六月婷婷综合网2| 亚洲女婷婷五月基地综合久久久| 大地资源色婷婷视频在线| 亚洲 综合中文| 午夜爱爱网站| AA久久| 色婷久久| 亚洲天堂啪啪| 天天色粽合合合合合合合| 97超级啪啪在线观看| 久久伊人婷婷| 五月婷婷综合精品| 狠色色狠网| 丁香五月激情视频在线| 五月婷婷中文网| VA国产在线综合网站| 久久久久久久久久8888| 超碰成人电影| 超碰人人操在线| 97丁香婷婷| 99九无网码| 91色逼| jiujiujiuwuyuetian| 丁香五月婷婷大香蕉| 色99超碰| 日韩黄色电影| 五月久熟女| av在线免费网站| 九热久| 超碰com| 色久女| 97av在线视频| 99操久久| 五月婷婷六月丁| 狠狠色激情在线| 先锋资源 996| 色停停五月天| 天天摸天天做天天爱天天爽| 久久hd| 99人人干| 久久精品99国产精品日本| 蜜桃人妻无码AV天堂三区| 国产做A爰片毛片A片美国| 婷婷五月影院| 91丨九色丨大屁股| 伊人久久丁香狠狠婷婷综合香蕉 | 色天堂操| 玖玖精品婷婷| 色性综合| 色五月天综合| 一级性爱视频| 九九99精品| 成人无码髙潮喷水A片| 99国产在线精品视频| 婷婷五月天丁香综合网| 久久总和99| 天天色情站| 天天色综合网吨吧| 日韩狠狠色| 亚洲色综合| 狠狠狠狠狠狠草| 婷婷射图五月天| 激情丁香五月天综合| 精品人妻久久久| 欧美五月婷婷| 五月综合激情婷婷六月色窝| 超91在线视频| 99热在线观看| 丁香五月五婷| 能看的AV| 97五月综合网| 激情5月婷婷狠狠干| 精品五月天| 婷婷大香蕉| 久99视频| 久操操| 日本婷久久| 人人九色| 五月丁香综合网| 综合色久| 六月丁香六月婷婷欧美| 五月丁香日本在线视频观看| 超碰在线资源| 六月婷婷中文字幕| 欧美成人Va| 欧美综合在线五月天色婷婷| 久久香视频| 狠狠干,狠狠操| WWW.17C亚洲精品| 热99视频| 99riAV国产精品视频| 九九色网专区| 色播综合| 九九色人| 大香蕉欧美在线| 色五月婷婷久久大| 久久国产性爱A V| www99在线观看视频| 婷婷99狠狠躁天天久久久九九九| 丁香六月婷婷久久综合| 五月天激情综合| 婷婷五月天美女视频| WWW夜夜| 久操激情| 天堂成人A片永久免费网站| 久热一本| 亚洲情欲| 玖玖婷婷五月天毛片| 亚洲综合久| 天天综合网在线| 182tv992tv人之初午夜免费观看| 精品一二三区视频立| AV五月丁香| 777影视理论片大全在线观看 | 国av网| 激情图片婷婷| 婷婷99热| 超碰色婷婷| 色五月激情网| 99热官网精品在线| 精品少妇蜜臀91| 午夜天堂一区人妻| 性婷婷| 五月天激情网图片| 色亚洲视频| 99热精品中文字幕| 婷婷五月天成人导航| 99色热| 99日本黄站| 久久婷婷综| 操B五月天| 久操热线| 久久人人九| 8区视频在线| AV九九| 性色做爰片在线观看WW| 国精产品一区二区三区| 亚洲黄色av网站| 婷婷伊人久久| 美女五月天婷婷| 日韩在线看AV| 丁香五月在线观看| 激情丁香久久| 婷婷午夜综合| 日韩av在线电影| 天天色综网| 五月天婷婷一起草| 日本少妇裸体做爰高潮片| 婷婷丁香高潮了| 日韩丁香涩| 79精品视频| 久久视频婷婷| 日日爽日日| 国产成人VA| 婷婷丁香18| 99综合一区| 亚洲成片在线观看| www99热| 色婷婷丁香五月丁香| 九月丁香八月婷婷加勒比| 99热这里只有精品3| 人人性久久| 热九九精品| 五月天深爱激情网| 激情丁香六月| 欧美激情性做爰免费视频| av网站中文| 色五月婷婷影院| 久久久久久人妻| 亚洲另类婷婷五月综合| 九九十99视频| 99免费视频| 天天精品视频免费观看| 色狠狠999综合| 色婷婷六月性| 亚洲精品九九| 久操热| 色婷婷先锋| 任你日视频| 国产熟妇乱子伦hd| 五月婷婷激情中文字幕| 精品九九在线观看| 久久狠婷婷| 日本色色色| 六月丁香综合| 思思99精品视频在线观看| 99操免费视频| 97激情五月天| 久99久精品视频| 嫩草AV久久伊人妇女超级A| 开心五月激情网| 六月丁香啪啪| 99欧美三级视频| 丁香五月天啪啪| 婷婷五月天人妻| 色噜噜狠狠色综合成人99| 色色色热| 4399在线日本A片| 操你av| 日日骑夜夜撸| 婷婷九月狠狠色| 韩国中文字幕91| 狠狠干狠狠干| 九九黄色网| www.91在线观看| 九九精品热| 日本AAAAAAAAAAAAAA片| 五月亭亭六月激情| 婷婷五月色花丁香社区| 97综合在线| 啪啪综合| 五月婷婷偷拍| 精品99视频| 9伊人网| 亚州激情九月| 色婷婷综合电影| 九一牛视频探花| 超碰国产一区| 丁香五月色情av| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 久久久com| 伊人激情影院| 天天色天天操天天射| 欧美婷婷| 婷婷开心激情| 99网| 91精品91久久久中77777| 婷婷中文字幕| 久久HD| 丁香五月影院| 99ER热精品视频| 午夜无码熟熟妇丰满人妻 | 五月婷婷久久网| 久久五月丁香综合| 欧美碰碰| 久色激情| 六月激情婷婷| 婷婷国产综合| 婷婷黄色五月天在线视频| 亚洲亚洲激情| 99热日| 婷婷色成人| 激情欧美五月丁香| 九热免费视频| 日日天天干| 欧美肉大捧一进一出免费视频| 国产精品第一国产精品| 日韩人妻AV在线| 色婷婷六月精品| 影音先锋日本三级资源| 色五月开心开心五月激情五月| 黄桃AV无码免费一区二区三区| 天天日狠狠| 国产欧美日韩综合精品一区二区| 日韩砖区| 欧美日本免费一道免费视频| 丁香五月激情视频在线| 97色精品视频 | 六月婷婷综合| 六月丁香婷婷网| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 任你草| 只有精品在线观看| 亚洲色综合性| 日韩操逼小电影| 婷婷丁香六月天| 99久在线精品99re8热| 亚洲V国产V欧美V久久久久久| 一级片无码| 狼人婷婷久久| 久久在这里有精品| 色婷婷丁香五月在线观看| 久婷婷| 99久久99综合| www.maotanji.com| 色情丁香五月天| 亚洲婷婷免费| 午夜一区| 久久9RE热视频精品98| 五月婷婷另类| av性爱网站| 99色在线视频| 免费成片在线观看| 狠狠色五月激情| 综合色五月| 激情五月综合| 九久久九精品视频| 五月婷婷开心六月激情小说| 91干在线视频| 久久九九99| 亚洲六月婷| 伊人综合婷婷| 五月婷婷激情综合| 在热视频精品| 久久久www| 全部老头和老太XXXXX| 婷婷五月天色| 婷婷在线播放av| 九九九九九九热| 激情综合色婷婷啪啪六月天| 美女va| 色开心五月婷婷丁香HD| 色丁香五月婷婷| 婷婷丁香五月天小说| 婷婷六月色情| av在线资源| 99re思思久久| 99久热这里只有精品视频删减版| 99热传媒| 97久久视频| 99久久视频| 国产精品国产成人国产三级| 色五月婷婷综合| 丁香五月婷婷六月婷婷| 9999热在线| 人人操AV| 99色视频在线| 久久视频这里都是精品| 性爱激情小说AV五月丁香花| 五月天激情四射| 色婷婷五月在线| 第二色AⅤ| 亚洲婷婷激情综合激情999精品| 啪啪综合网| 日韩另类在线观看| 丁香五月在线视频黑人| 9操在线| 思思热99er| 亚洲综合成人网| 亚洲五月天激情| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 综合久久久婷| 欧美性生交XXXXX无码小说| 久久大香蕉同僚| 色操b| 天天天天天天天干| 九色无码| 香港九九六区八区99| 婷婷五月天综合网| 日本久久人| 色色色色色色综合| 五月在线婷色| 色欲天天综合| www亚洲无码| 爱久久小说下载网| 天天干天天日天天操| 狠狠狠狠狠干| 丁香五月乱中文字幕| 激情99热| 婷婷色五月激情| av激情在线| 丁香五月很很肏| 久久五月婷天天干| 五月婷婷五月天| av中文在线| 久久九九@| 99爱视频在线观看这里只有精品| 操逼福利视频| 欧美成人无码一区二区三区| 亚洲AV成人片无码网站| 久99视频| 手机在线日韩视频中文字幕| 亚洲精品99| eeuus五月婷| 激情丁香五月婷婷| 9色视频在线| 丁香九月综合激情| 看片视频在线免费日产在线看| 99视频热| 可以直接看的AV网站| 色婷婷六月综合| se色99| 丁香五月婷婷无码AV| 99操逼| 婷婷四色五月| 婷婷五月丁香综合| 黄色AV日韩| 香蕉综合在线| 久久9久| 99ri精品视频在线观看| 亚洲av成人在线| 色婷婷97| 免费黄色视频网址| 久久婷婷视频| 天天情天天狠天天透| 99视频精品| 这里只有精品视频222| 丁香成人五月天| 五月天激情综合网俺也去| 五月丁香大香蕉| 五月开心婷婷中文字幕| 5月色婷婷| 欧美婷婷五月无砖| 啪啪干伊人婷婷| 热久久国产视频| 色婷婷九月| 丁香六月激情国产| 99热综合| 欧美天堂久久| 婷婷激情综合| 青青草五月天| 年轻的妺妺伦理HD中文| 色伊人91在线视频| 99精品九九| 色婷婷文字幕| 日韩人妻在线观看| 五月天色色色| 久久ER视频com| 蜜臀九九九九| 十月丁香九月婷婷综合| 天天摸天天做天天爱天天爽| 欧美日韩成人高清在线| 9色在线| 99精品视频在线观看| 婷婷视频在线| 99热在线看| 久99久在线| 久久99热免费| 丁香婷婷五月基地| 九九大香蕉黄色影院| 国产激情久久久| 少妇AB又爽又紧无码网站| 欧美在线ee日韩| 狠狠se| AV色五月婷婷| 婷婷五月天首页| 少妇搡BBBB搡BBB搡毛茸茸 | 99精品在线| 亚洲欧美日韩VIP| 色涩影院六月丁香| 激情婷婷五月天| 婷婷天天综合| WWW.17C亚洲精品| 99热亚洲| www.亚洲激情.com| 色色色婷婷五月| 国产va在线视频| 六月久久狠狠| 免费亚洲婷婷中文字幕| 国产亚洲精品久久久久苍井松| 丁香久久激情俄| 九九精品网站| 五月天久久丁香| 日韩欧美颜射| 色和综合网| 婷婷五月综合网| 激情婷婷狠狠干| 激情久久久久久久久| 日本人妻伦在线中文字幕| 婷婷色五月天色色| 性爱先锋AV| 久久黄色片| 色色色99| 丁香婷婷久久综合在线| 六月丁香啪啪| 五月丁香婷婷成人综合网| 99日韩| 丁香亚洲色综合| 亚洲婷婷视频| 噜噜五月天综合| 天天综合色| 97色视频网| 婷婷五月天无码视频| 婷婷激情图片| 成人美女网| 51XX午夜影福利| 五月婷婷综合潮喷| 中文av网| 中文字幕网站在线观看| 综合狠狠五月婷婷| 超碰免费99| 国产亚洲AV人片在线| 丁香五月婷婷六月婷婷| 无人精品在线视频| 国产亚洲成AV人片在线观黄桃| 99操无码视频观看| 亚洲情a| 色五月网址| 综合久久五月天| 97色婷婷五月天| 99精品网| 久久超级碰碰| 色XX综合网| 午夜不卡久久精品无码免费| 中文字幕黄色片| 国产密乳av一区二区三区四区| 内射人妻视频国内| 丁香五月自拍| 激情五月天偷拍综合网| 亚洲精品一二三| WWW色综合| 操操人人| 婷婷中文字幕在线| 好激情在线综合网| 无码人妻少妇色欲AV一区二区| 久久综合丁香| 99热在线只有精品| 超碰人人插| 亚洲综合网激情小说| 99热这里只有精彩| 大香蕉天堂| 丁香五月成人婷婷| 欧美超碰亚洲| 五月婷婷欲色| 成人无码精品1区2区3区免费看| 婷婷五月天色色| 97人凄人人操人人爽| 黄色91在线观看| 久久性爱视频这里只有精品| 农村熟妇高潮精品A片| 五月色婷婷在线观看| 97香蕉碰碰人妻国产欧美| 精品人妻在线| 五月丁香婷婷五月| 色色草97| 五月婷婷丁香狠狠撸久久| 久久无码成人| 天天操九九插| 第九色区av天堂| 丁香六月天AV| www.狠狠操| 99热综合在线| 这里只有精品免费| 久久精彩免费视频精彩免费视频| 久激情网| 超碰在线国产| 九九热超碰| www.狠狠| 亚洲国产99| 久鲁鲁色网| 丁香五月电影| 色色色视频免费无码| 91综合在线| 五月婷伊人| 黄色国久久| 国语精品探花| 色丁香五月婷婷综合久久| 久久婷婷五月免费视频| www.99免费视频| 人人操人人干AV| 婷婷丁香激情综合色情| 婷婷综合网站| 538午夜激情| 色五月婷婷成人视频| 天天色,天天操,天天射| 亚洲精品又粗又大又爽A片 | 爱草视频在线观看| 男人大jjc女人免费视频| 天天免费日日夜夜夜夜| 五月深情久久| 99色在线观看视频| 丁香婷婷五月激情| 日日操日日撸| 天天插天天草人人玩| 黄色录像网点| 久色婷婷200| 99在线视频播放| 日日操天天操| 欧美丁香六月激情视频| 啪啪视频99| 极品另类| 热九九精品| 国产特级毛片AAAAAAA高清| 伍月婷丁香花全集| 久久婷婷夜| 五月婷婷丁香| 色婷婷丁香五月天在线视频 | 99久久久99久久91熟女| 激情丁香婷婷五月天| 一区二区三区四日本| 五月天婷婷爱| 国产婷婷五月天| 九九综合| 一本伊人色婷| 99久久视频| 婷婷成人五月天成人文学| 天天天添天天操| 97碰碰人人视频| 五月婷婷啪| 色五月婷婷大| 欧美WW在线网| 久久99网| 伍月婷婷六月丁香| 久久久久久久久99精品| 色综合久| 最新丁香六月婷婷| 激情五月丁香五月| 色婷婷丁香花五月天| 色婷婷综合影院| 99久久国产成人精品| 亚洲情欲久久| 国产精品久久久久久白浆色欲| 色青青五月| 中文在线成人| 久热无码| 天天天天操| 欧美天天综合网站上去吧| 91视频久久久| 日日做A爰片久久毛片A片英语|