欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
婷婷丁香色情五月天| 丁香激情网| 久久一二三视频| 久久婷婷丁香花综合网| 色播综合| 亚洲久久激情| 99热首页在线30| 成人中文字幕在线| 一区二区三区四日本| 激情欧美五月丁香| 俺去也在线官网| 色婷婷综合在线| 天天影院色| 九九这里精品| 丁香五月aV| 日都一级A片| 99精品热| 五月天婷婷久久| 97色婷婷五月天| 色婷婷丁香| 欧美激情 日韩无码 婷婷 五月天| 超碰97人人操| 色婷婷综合网站| 日韩欧美一级大黄网站| 第四色婷婷色五月| 伊人国产婷婷五月天| 婷婷狠狠97| 国产成人精品123区免费视频| www.夜夜操| 五月婷成人网| 五月婷免费视频久久久| 亚洲精99| 丁香久色| 婷婷五月免费观看| 色五月天成人在线| 开心五月婷婷激情网| 男女99免费视频| 免费在线a| www.色五月| 激情视频网址| 久久精品这里只有精品免费首页| 日本综合色图| 五月丁香婷婷成人网| 五月婷婷六月情| 这里只有精品69| oumeisesewang| 97丁香婷婷| 91综合网| 99热在线资源| 婷婷她六月天| 青青草蜜臀| www久久99com| 日本在线免费中文com.| 婷婷激情啪啪| 久久久人妻| 热思思| 五月婷婷丁香在线视频| 婷婷婷婷婷开心无码播放| 丁香六月激情综合啪啪| 91丁香五月| 丁香婷婷基地| 成人无码精品1区2区3区免费看| 超碰91在线| 99日韩| 99色综合网| 99ri视频在线播放| 激情五月综合| 日韩一级| 色色五月天网站| 色婷婷丁香九月| 色月九九| 热的国产,热的综合,热的有码| 亚州欧美国产久精国产99综合视频| 无码激情| 丁香五月停停av| AV操操操| 狠狠狠狠狠狠狠狠| 99久re热视频精品98| 五月婷婷六月天| 久爱综合| 99ri国产在线| WWW.99视频| 日本不卡中文字幕| 婷婷日日天天| 五月婷婷五月天| AV在线资源| 五月婷婷之综合激情| 久99热| 亚洲国产精品VA在线看黑人 | 热久久精品视频网站| 久久婷婷五月综合色播| 99精品久久久| 97自拍视频网| 99精品在线| 亚洲色婷婷激情| 开心五月色婷婷综合开心网| 久久五月丁香| 婷婷五月丁香六月伊人网| 五月天激情综合10p| 深爱五月婷婷| 国产成人综合亚洲| 激情久久久| 婷婷激情五月天色| 无码任你操| 万月丁香狠狠爱| ...婷婷五月综合不卡,国产在线手机| va中文资源在线观看| 天堂草在线看www| 五月丁香999| 狠狠精品干练久久久无码中文字幕 | 99热日本| 婷婷99| 婷婷丁香97| 亚洲成色综合网站免费观看| 婷婷色五月激情强奸四射| 91操人| 91丨九色丨老熟女激情| 五月天开心成人网| 婷婷六月丁香五月| 97婷婷狠狠| 婷婷日日天天| 香蕉久久国产AV一区二区| 亚洲电影中文字幕| 天天色综合网吨吧| 日本少妇裸体做爰高潮片| 久99久在线观看| 日韩成人精品一区久久久久| 日本猛少妇色XXXXX猛叫| 在线视频99| 天天碰天天插天天操| 久久六月天| 久9热插入| 第二色AⅤ| 五月婷婷www| 99爱免费在线观看| 开心五月深爱五月| 色五月婷婷婷婷婷婷婷婷婷婷| 婷婷五月天成人小说| 国产精品久久久久久亚洲毛片| 国产avapp 网| 三级三久久线久久99久目本WW| 婷婷五月天性爱视频| 亚洲亚洲激情| 思思9久久| 亚洲区,视频区,视频区免费| 久久久久9999| 丁香五月图片| 99精品视频在线观看| 婷婷无码视频| 欧美精品99| 激情久久网 | 九九热视频在线观看| 五月丁香操婷逼| 99热这里全都是精品| 婷婷丁香六月天| 色五月婷婷在线视频| 91操碰| 狠狠色丁香| 日韩精品一品二区三区的使用体验| 日本操B片| 激情网婷婷婷| 五月天婷综合| 噜噜噜久久| 欧美五月丁香啪啪响视频| 九九99精品| 久久久久9| 久久婷婷五月综合激情国产| 99er这里只有精品| 狠狠色狠狠鲁| 成人在线观看精品| 狠狠狠色激情综合适合| 色色综合色视频| 天天操天天操天天操天天操天天操| 婷婷综合五月| 精品香蕉99久久久久网站| 久久五月婷综合网| 99热 在线播放| 欧美成人网99网| 日本一区二区三区精品视频| 日韩操逼大片| 激情校园 亚洲| 97久久婷婷色| 欧美综合五月丁香六月婷| 婷婷久久久久| 五月婷在线| 高清无码一区二区三区四区| 五月婷婷黄| 99re热在线视频观看| 丁香婷婷五月综合色情| 伊久大香蕉| 色婷婷丁香| 亚洲AV无码一区二| 极品人妻XXXXOOOO| 亚洲五月丁香六月婷婷| 夜夜噜夜夜奇| 毛片新网地| 97五月天| 色综合天天综合成人网| 六月丁香射婷婷欧美色图片| 亚洲色图日韩网址| 日韩AV无码影片| 99在热线免费视频| 三级成人网站| 网色99| 少妇AB又爽又紧无码网站 | 精品一区久热| www九九| 九九热免费视频| www.99热. com这里只有精品| 六月婷婷久久| 视频一区二区在线| 少妇性按摩无码中文A片| 热99只有里视频| 91成人品| 大香蕉狼人久久| 国自产拍偷拍精品啪啪一区二区| 九九青青草成人| 日本成人小说婷婷六月| 99热免费精品热久久66| 成人电影AV在线观看| 91操碰| 99热这里只有精品9| 丁香五月天色| 黄网免费看| 色啪久 | 欧美精品99久久久| 欧美性爱中文字幕| 久久婷婷综合五月趴| 丁香婷婷综合精品六月初| 天天婬色综合| 日本三级99人妇网站| 久久丁香五月婷婷| 五月婷婷偷拍| 天堂五月婷婷| 婷婷丁香五月婷婷| 五月丁香六月婷婷网| 丁香5月综合啪啪| 久99在线视频| 91丨九色丨丰满人妖| 级人人91| 五月婷婷丁香日韩在线| 色五月婷婷在线观看第一页舔| 99热精品在线观看| 99免费在线| 色在线99| 永久免费视频| 五月丁香婷婷色色| 婷婷金品综合视频| 99热精品在这里| 综合伊人久久| 久久婷婷成人| 欧美日韩aaa| 天天肏视频| 六月丁香婷婷综合狠狠爱夜夜爱| 中文字幕综合| 大香蕉婷婷色| 91人妻PORNY九色大屁股| 99在线小视频| 国产日比| 色婷丁香91| 欧美69久成人做爰视频| 99热最新国内| 亚洲午夜Av| 亚洲成人AV一区在线观看| 伊人免费视频9| 亚洲亚洲人成综合网络| 91丨人妻丨国产丨丝袜| 五月久久婷婷天堂视频| www.99在线| 九九综合| 99热思思在线观看| 婷婷五点亚洲| 精品人妻在线| 丁香五月社区| 丁香五月婷婷国产av| 色综合久久久无码中文字幕999| 99ER热精品视频| 99精品视频在线观看| 欧美婷婷色| 九色综合网| 亚洲成人电影在线免费观看| www.sebowuyue| 97精品欧美91久久久久久久| 五月天六月天| 婷婷五月亚洲一本在线丁香| 五月天精品视频| 色香蕉影院| 大伊香蕉精品视频在线| 日韩免费99| 色婷| 人妻精品久久久久久| 色色色9| 99爱精品| 色色五月丁香| 热996精品在线观看| 五月天操逼网| 色999;丁香五月| 婷婷伊人网| 91精品婷婷国产综合久久| 思思热在线观看| 久月久在线视频| 国产亚洲av片| 九九成人高清视频| 久久伊人9| 婷婷性爱| 激情婷婷综合网| 婷婷丁香六月| 五月婷婷无码| 国产精产国品一二三在观看| 婷婷丁香成人| 激情五月天小说| 天天干狠狠| 99cao婷婷| 99在线视频色版| 亚洲操逼网| 91九色国产在线| 九九这里有精品视频| 五月天激情网站| 国产古装妇女野外A片| 国产99久久久国产精品免费看| 麻豆AV一区二区三区| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 国产综合视频婷婷| 天天操天天爱天天日| 91婷婷丁香五月天免费视频网站| 天天射射夜| 丁香婷婷成人在线播放| 色色五月婷婷久久| 精品一二三区久久AAA片| 国产99久| 久婷婷婷| 六月五月久久丁香| 国产.亚洲.欧洲视频在线| 婷婷金品综合视频| 日韩小视频在线99| 婷婷色五月婷婷姐妹| 青青草搞屄视频网站| 我要看激情五月天| 97干97色| 久久久高清| 大香蕉人在线65| 91精品91久久久中77777| 婷婷深爱五月天在线| 情趣视频66| 丁香激情久久| 亚洲区1| 五月伊人网| 黄涩毛片| 成人婷99最新| 欧美高潮9| 99综合| 人人看人人要| 99视频内射三四| 日韩综合天堂| 婷婷五月免费视频| 狠狠色大香蕉| 精品爆操| 久久网站观看免费欧洲国产 | 在线播放成人网站| 色色色色色色色色色色色色色97| 五月婷婷狠狠久久| 色色亚洲视频| 色婷婷成人做爰A片免费看网站| 色婷婷亚洲综合网站| 五月婷婷六月丁香首页| 思思精品久久艹| 婷婷久久精品| 99热在线中出| 五月婷婷欧洲| 久久婷婷五月国产色综合激情| 日韩99精品| 天天干夜夜想| 在线看av| 丁香婷婷五色月| 欧美六月| 97在线天堂| 中文网AV| 日本天堂免费99| 免看黄大片AA | 激情五月婷黄版| 久热这里有精品视频| 六月丁香激情网| 综合久久99| 久草狼人| 狠狠色综合网站久久久久| 99热这里只有精品3| 亚洲天堂青草| 99热久草| 国产69久久久欧美黑人A片| 久久久欧美精品sm网站| 九九免费精品| 三日本无码| 色五月婷色彩免播放器| 色久九| 99久久欧美| 亚洲激情99| 亚洲五月丁香六月婷婷| 色色色色色日韩午夜激情 | av久热| 亚洲 成人 电影av在线观看| 五月天玖玖狠狠色色| 五月色亚洲| 国产免费av在线| 深爱五月激情综合| 久久婷婷影院| 玖玖资源站国产| 丁香五月人妻| 狠狠爱五月婷婷| 丁香婷婷视频| 97超级免费无码| 色五月av伊人| 久久caop| 五月丁香 啪啪啪| 丁香五月天婷婷激情| www.99久| 婷婷五月天视频| 久操综合| 色综合久| 免费九九热| 99操视频| 99天堂网| 丁香五月激情五月| www久久五月com| 婷婷五月天伊人| 色婷婷在线播放| 蜜臀av粉嫩av懂色av| 亚洲丁香五冃97色| 日本成人噜噜噜| 亚洲成人日韩无码精品| 欧美激情综合色丁香婷婷五月天| 99免费超碰在线| 亚洲激情五月婷婷日日| 青青久在线视频免费观看| 激情5月婷婷狠狠干| 亚洲综合激情五月久久| 激情亚洲婷婷六月| 1024久婷| 99久超碰| 九九视屏| 伊人五月综合网| 婷婷九月狠狠色| 亚洲婷婷五月| 色婷婷丁香网| 丰满少妇乱A片无码| 人妻VideOssS人妻| 丁香五月ⅤA久久久| 天天操比比| PORNY九色9l自拍视频成人| 六月丁香综合| 激情四射五月天偷偷看婷婷| 蜜桃五月天| 夜夜撸日日骑| 久久综合影院| 久久久久久欧美精品se一二三四| 98毛片| www,婷婷,com| 婷婷 丁香 精品| 丁香五月手机在线| 久久九九99| 五月深爱婷婷| 香蕉色色网| 在线观看婷婷5月| 亚洲色久| 超碰色热| 人人操97| 婷婷一本和五月丁香| 久9热插入| www.久久爱.com| 婷婷激情五月| 日本色啪| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 激情五月天久久丁香| 中文字幕无码AV| 99热精品在这里| 婷婷99视频精品| 亚洲综合成人网| 深爱激情丁香五月| 99色天堂| 日日夜夜九九| 天天草天天爽| 色五月婷婷色五月| 热中文字幕| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 国产激情婷婷| 久久在线视频只有这里有精品| 九月丁香婷婷| 色99热| 停停色综合伊人| 久久99免费视频网站| 天天干天天插| 51国精产品自偷自偷综合 | 色必久悠悠影院| 成人无码中文| 欧美顶级少妇做爰HD| 天天综合精品| 四月婷婷丁香| 久久色五月天| 99在线免费视频| 日本三级日本黄色| 色爱综合网| 亚洲色色色| 六月丁香婷婷开心综合基地| 久久99这里只有精品| 色情激情五月婷婷| 粉嫩AV久久一区二区三区| 久久婷婷网| 5月丁香六月婷婷| 久久香蕉网| 欧美精品狠狠色丁香婷婷| 丁香五月婷婷基地| 99色中文| 99热这里只有精品8| 婷婷五月永远18免费久久久| 久9热| 色色色色色色色色色色色色色五月天| 中文字幕 中文字幕明步| 第五色婷婷| 成人在线日韩欧美| 亚洲色视频| 热的五码久久精品| 26uuu欧美日韩| 日本99色| 久久影视婷婷五月| 久久99精品久久久久久三级| 午夜福利成人AV91| 久久曰9| 99热这里只有精品中文字幕| yellow视频在线观看91| 天天做天天摸| 欧洲免费视频色| 九九热这里有精品23| 五月婷婷啪| 婷婷精品免费久久| 色色色色色色色色五月先| 亚洲 欧洲 国产 伦综合| 91狼友视频在线观看| 乱精品一区字幕二区| 97人人射| 这里只有精彩视频| 五月花婷婷| 天天日天天色| 思思精品视频| 俺去也五月天婷婷| 九九99久久| 九九热超碰| 综合AV在线| 欧美内射AA| 狠狠爱婷婷爱| 91操操| 久久五月视频| 香蕉AV福利精品导航| 综合色播| 丁香午夜天| 日本久久天堂| 亚洲人人操| 五月天色色色| 123日本不卡在线| 五月丁香综合色婷婷| www婷婷色情网| 天天噜天天爱| www激情网| 日韩欧美骚货| 九九99久久| 丁香婷婷色九月| 99久在线视频| 日本三级日本三级99| BBWCUCKOLD精品熟妇| 久草热8精品视频在线观看| 亚洲熟妇AV乱码在线观看| 九久久婷婷| 国产色色色色色| 性爱网六月丁香| 另类激情五| 久久草人妻| www.爱操com.| 欧美激情综合色综合色| 欧美三级欧美一级| 久热免费视频| 人操91在线| 五月婷婷AV| 色五月丁香总合网| 天天婷婷色六月| 亚洲超碰在线| 91色呦哟| 综合激情肏逼网| 久久精品4| 日韩狠狠色婷婷| 五月花婷婷丁香| 天天骑天天操| 少妇性按摩无码中文A片| 天天爱天天天射AV| 综合性爱网| 色综合播放| 六月婷婷久久大全| 丁香五月婷婷啪啪啪| 婷婷色情 | 97伊人综合婷婷| 伊人久久艹| 久色中文| 丁香九九九九| 91 欧美| 婷婷色在线播放| 这里只精品| 丁香桃色网| 色狠狠综合| 97色综合视频| 99热大全在线观看| 婷婷五月天第三页| 99视频这里有精品| 亚洲天堂啪啪| 综合图区激情| 福利视频在线播放| 激情六月丁香| 99成人小视频| 亚洲精品V天堂中文字幕| 人妻操日日| 亚洲丁香婷婷五月天综合色| 99热碰碰| 色香蕉影院| 噼里啪啦在线观看免费完整版视频| 操逼视频网址| 色八月婷婷| 亚洲丁香五月天视频| 久久小视频| 久久婷婷久久| 99热首页| 大香蕉 婷婷| 久99热| 99久久久久久www| 九九九激情综合| 99re这里只有精品99| 五月香婷婷| 激情四射亚洲| 99热国产在| 五月天婷婷av| 激情小说色五月| 99日本黄站| 岛国av网站| 婷婷五月丁香99| 中文人妻主播久久| 五月丁香啪啪综合| 天天看A片| 五月色丁香| 天天综合天综合久久网| 丁香六月高清视频| 久久五月视频| 67194国产| 丁香五月色色| www91在线| 黄色激情五月天| 精品视频二级九九| 涩涩婷婷五月| 欧美丰满熟妇BBB久久久| 日韩五月婷婷| 亚洲AV免费在线| 综合五月婷婷| 99免费热视频在线| 亚洲天堂久久| 91丨九色丨43老版熟女| 国产亚洲99| 99热精品在线| 99丁香五月婷| 久热9| 色婷婷久久综合| 激情综合在线观看| 天天肏在线观看| 婷婷五月色综合| 天天搡日日搡aaaaⅩ| 97影院一级片| 九九精品99| www超碰| 久久激情五月天| 久99久热| 日韩 欧美 国产 一区 二区| 色色亚洲| 丁香六月高清视频| 人妻Av在线| 丁香婷婷基地| 婷婷色中文| 色爱综合网| 婷婷午夜| 玖玖婷婷五月天| 天天天操天天天爰| 亚洲九N| 亚美欧色影院| 久久婷婷五月综合啪| 丁香九月综合激情| 性爱在线播放av| 精品国产一区二区三区四区阿崩 | 婷婷中文字暮| 97五月婷| 久久五月婷婷丁香| 另类视频在线| 艹B高清无码| 色丁香影院| 九色激情网| 六月天婷婷| 婷婷五月天无码熟女| 少妇出轨做爰高潮A片| 婷婷五月激情五月激情| 六月丁香色色| www五月| 99日韩网站| 99热丁香五月| 99色在线| 天天摸天天做天天爱天天爽| 中美日韩成人在线| 五月综合人妻| 99人妻碰碰碰久久久久视| 9+1视频网址| 9色婷婷| 激情九九六月激情免费视频| 欧美日韩一a.无| 91av视频| 久久作爱| 欧美婷婷五月激情| 91色在线 | 日韩| 欧洲色色| 日日天天干| 日本一级一级一级一级| 婷婷色色综合| 中文字幕成人| 久久亚洲婷婷| 五月激情婷婷国产精品久久久久久| 激情第四色| 激情五月天婷婷视频| 日本精品99网站| 婷婷综合性爱网| 亚洲综合1024| 日本婷婷色日| 国产Va视频| 婷婷五月欧美| 狠狠操天天干| 丁香婷婷91在线观看视频| wwwxxx五月婷婷小说| 五月丁香激情综合啪啪| 日本激情综合| 五月丁香六月激情综合| 五月婷婷丁香五月婷婷丁香| 丁香五月天欧美| 99九九玖玖| 九月停停| 无人区码一码二码三码医生系列| 超碰人人射| 久久婷婷五月| 日本九九热| 蜜臀AV在线成人| 国产AV不卡福利| 五月天婷久久| 九九亚洲视频| 色播五月婷婷| 99色色网| 欧美成人网99网| 亚洲婷婷丁香五月亚洲| 婷婷永久在线| 九九色之九九色之88| 色青青电影色五月| A片试看50分钟做受视频| 日韩成人无码人妻| 丁香六月综合激情| 日日夜夜久| 久久五月婷综合网| 91日本在线观看| 亚洲 欧洲 国产 伦综合| 色综合综合综合| 疯狂做受XXXX高潮A片动画| 99re热在线视频| 久久99热精品a片在线观看| 婷久看人爽| 97天堂| 99ri国产在线| 色婷婷AV在线| 99国产在线精品视频| 欧美槡BBBB槡BBB少妇| 99无码视频| 超碰97免费在线| 婷婷开心激情| 成人免费va| 五月婷婷丁香在线视频| 婷婷六月伊人| 色色色色色色97| 久久久久综合激动五月天| 亚洲激情图文小说| 五月色婷婷在线观看| 天天肏视频| 久久看婷婷| 青996青| 91日韩美女被插视频| 久9热插入| 91无码一区人妻A片蜜| 亚洲精品白浆高清久久久久久 | 国产老熟妇亲子乱对白| www色婷婷com| 日本九九视频| 秋霞AV淫| 五月天色色网站| 激情综合啪啪| 亚洲另类电影| 亚洲综合激| 蜜乳.comcom| 色五月五月天| 五月婷婷激情中心| 97色婷婷五月天| 少妇激情五月天| 国产成人va在线| 欧美大奶熟女噜噜噜噜| 五月天婷婷丁香蜜桃91| 久久久婷丁香五月| 亚城区在线| 99热首页| 亚洲欧美999| 99操免费视频| 久久久91| 五月婷婷丁香| 色欲五月丁香| www.97干视频| 色婷婷电影| 天天上天天爽| 久色欧美| 激情中文在线| 久久丁香五月婷婷| 无码激情AAAAA片-区区| 久久日韩婷婷五月| 人妻激情综合| 狠狠色婷婷7| 精品三区影院| 天天做天天爱天天玩| 激情六月综合| 国产乱子轮XXX农村| 亚洲色五月| 香蕉视频性爱BB做爱| 久久婷婷激情四射五月天| 日韩成人中文字幕| 天天色爽| 婷婷色播六月无码| 亚洲色99| 色婷婷电影网| 色激情网| 特黄三级片| 色情久久久| 激情久久丁香| 午夜免费试看| 91色综合网站在线| 激情爱爱网站| 色播五月丁香婷婷| 狠狠人人婷婷| 97色色网| 激情丁香久久| 丁香婷婷激情综合五月激情| 丁香五月天BBw| 亚洲1区| 五月激情四射网站| 久久婷婷热| 日夜夜天天| 乱码操操| 青青久久五月| 开心五月婷婷五月| 亚洲综合激情五月| 99精品视频在线观看| 手机在线视频观看9| 色色色激情| 色色亚洲五月天| 开心五月天激情网| 国产精品日日躁夜夜躁| 天天操天天操| 婷婷另类小说| 天天色中文字幕女优AV| 久久色婷婷| 26uuu欧美日本| 婷婷五月在线视频| 九九色播五月丁香| 我爱婷婷五月天综合88| 色五月婷婷中文字幕| 99操网站| 久久aaa| 天天操婷婷| 激情 婷婷| 成人性生活免费观看。| 91操人视频| 丁香五月色| 嫩BBB搡BBBB榛BBBB| 激情色色| 五月丁香六月激情在线| 九九久久综合| 婷婷丁香五月麻豆| 这里只有精品网| ..真实国产乱子伦对白在线_欧 | 99噜噜噜| 婷婷综合五月色播| 最近中文字幕在线中文视频| WWW.婷婷五月天.COM| 色五月婷婷小说亚洲中文字幕组| 日逼AV影音先锋男人资源站| 久久精品爱爱| 九月丁香| 婷婷综合97| 五月婷婷六月情| www.99精品日操伊人乱碰在线| 激情婷婷内射| 99热.com| 成人丁香五月| 性爱久久| 婷婷五月丁香超碰| 激情五月色在线播放| 日韩av一区二区在线/日产精品久久久 | 99视频一区| 人妻丰满精品一区二区A片| 成人精品一区二区三区四区五区| 日本不卡中文字幕| 五月色丁香| 婷婷深爱五月天| 婷婷五月天99综合网站| 亭亭色天香| 国外亚洲成AV人片在线观看| 夜夜爽日日躁| 婷婷五月天影院| 亚洲成色综合网站免费观看| 九九视频在线| 色色色视频免费无码 | 99热 免费| 婷婷亚洲综合| 婷婷丁香77777| 天天日夜夜拍| 激情综合五月激情| 色五月综合网| 97涩涩丁香五月天| 亚洲亚洲人成综合网络| 夜夜夜叫天天天做| 亚洲精品久久久久久久久久飞鱼 | 六月婷婷色| 天天激情综合| 国产精产国品一二三在观看| 丁香五月日本| 少妇水多A片太爽了| 欧美综合五月丁香六月婷| 99婷婷精品推荐在线视频| 久久亚洲网| 国产美女无遮挡裸体毛片A片| 91色五月| 五月婷视频| 激情精品久久| 91丨九色丨首页| 天天狠狠干| 99热亚洲精品| 狠狠综合网| 欧美群妇大交乱婬网| 天天拍天天操| 色婷婷五月天综合网| 91免费试看| 99热在线精品播放| 噜噜狠狠| 欧美十二区| 久久久久丁香婷婷五月天| 99 re视频一区| 激情五月天婷婷丁香| 综合网激情五月天| 91色综合网站在线| 五月天天综合| 婷婷五月在线免费| 日韩成人影片网站| 日日日日操| 色婷婷免费观看| 99热| 欧美一级操逼视频| 97碰超级人人看| 婷婷五月丁香五月| 欧美成人色婷婷| 激情黄色小说色五月| 欧美性生交XXXXX无码小说| 丁香六月亚洲综合| 91丨九色丨熟女|新版| 五月天社区| 精品人妻久久久久| www色五月| 婷婷丁香综合网| 色五月AV| 天堂爱爱| 久久激情婷婷| 婷婷色五月激情| 婷婷六月五月天综合| 色婷| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 密乳Va| 亚洲综合在线视频| 思思热精品在线| 久久这里只有精品久久| 九月性爱网| 久久99视频| 精品国产va久久久| 亚洲高清在线| 久热天堂| 六月婷婷激情| 超碰国产在线观看| 六月伊人婷婷| 97资源碰碰| 久综合4| 久色| 99在线观看精品视频| 日韩激情婷婷五月天| www.五月天色色色| 丁香五月天堂婷婷| 婷色五月| 丁香五月欧美| 五月天亚洲最大成人| 久久久精品AV| 色婷婷很很丝袜| 天天草天天爽| 天天爽天天| 可以直接看的AV网站| WWW.久久久久久久久久久久久| www五月| 婷婷色欧美激情| 久久在这里有精品| 五月天婷婷久草丁香| 九九热视频在线观看| 久久伊人婷婷| www、色色色| 五月婷婷五月天天| 成人av播放| 亚洲av网址| 久久caop| 97人人射| 91成人视频| 中文av网站| 色五月婷婷婷婷| 久色视频在线| 99丁香五月婷| 免费人人操| 五月激情小说| 国产成人精品一区二三区熟女在线 | 九月影院義母在线播放| 一起草性爱不卡视频| 九热视频| 九九热99精品| www.99免费视频| 免费精品66| 久久只这里有精品| WWW.五月天9999| 看片视频在线免费日产在线看| 91热视频色网站| 9色在线视频| 丁香婷婷啪啪| 热九九精品| 色综合天堂| 亚洲久久日| 日日操天天操| 亚洲综合字幕色色| 91色五月| 色色色在线观看| 人妻操逼视频。| 色综合色五月| 99精品在线| 99ri在线观看视频| 五月亭亭激情综合| 超碰在线免费| 91丨九色丨白浆秘| 超碰在线超碰| 天堂色婷婷| 国产视频福利| 99在线免费视频| 色欲久久久久久综合网综合网| 色五月婷婷青娱乐| 久久久噜噜噜www成人| 婷婷久久婷婷| 色五月 婷婷, 大香蕉| 五月天网址在线刘玥| 激情婷婷丁香| 色综合77777| 思思干精品| 久久精品无码一区| 蜜乳AV成人| 五月刺激丁香月综合| 9久热视频| 色婷婷综合在线| 欧美日韩成人在线网| 天天插天天插| 大香蕉伊人丁香五月| 婷婷五月六月丁香| 亚洲XX网| 欧美99热| 五月婷五月婷伊人伊人五月婷| 色必久悠悠影院| 亚洲色婷婷99一9|| 婷婷六月伊人| 色婷婷www| 五月激情网站| 久9视频免费播放| 久久婷婷五月综合伊人| 玖玖婷婷五月天| 中文字幕欧美日韩VA免费视频| 五月婷婷丁香91| 丁香五月天日韩无码| 久热99热| 色色激情| 九九久久综合网站| www.天天日| 欧美六月| 中文字幕精品无码一区二区| 欧美A片在线视频免费观看| 大香蕉人人网| 99九九99九九九视频精彩| 久1色色| 99福利视频| 丁香六月婷| 五月天色不卡| 日韩一级一片内射视频4K| 丁香玖玖视频大全| 99碰超| 先锋资源 996| 婷婷五月天天aV| 99激情网| 性生生活大片又黄又| 丁香五月色色婷| 日本久久精品| 人人干天天操五月丁香| 五月婷婷亚洲色视频| 婷婷天天色| ztEJj| 全亚洲最大的婷婷五月天网站COM| 这里只有精品视频国产| 日本成人噜噜噜| AV人人操| 天堂在线婷婷| 五月婷婷综合影院| 五月激激网w'w'w| 五月婷婷九| 久久五月视频| 七月激情六月婷婷综合在线播放| 五月色网| 五月婷婷丁香瑟瑟视频| 色播播五月天| 色色97丁香婷婷五月天| 激情小说五月丁香在线视频观看视频| 色久激情在线| 99视频这里有精品| 99操不停| 99色啊| 97色天堂| 99超超碰| 91九九| 激情五月婷婷丁香综合网 | 婷婷五月天99综合网站| 97碰人人操| 第一区久久网站| 91综合国免费久入| 久久丁香综合精品综合| 91无码视频| 天天操天天草天天草天天| 五月婷婷五月| 99热99| 日日激情网| 亚洲午夜一区二区| ai97re99一本| 色国产五月| www.久久爱.com| 伊人大香蕉毛片| WWW久久久| 丁香五月天婷婷激情| 思思久久久婷婷| 噜噜噜噜婷婷五月天| 狠狠狠狠狠狠色| 99国产精品久久久久久久久久久| av网址在线| 99精品综合视频| 精品久久久中文字幕大豆网推荐理由| 日本精品在线噜噜噜| 亚洲综合五月天| 伊人激情综合| 五月天婷婷色播在线网| 99热精品在线播放| www.99精品在线| 日日狠狠久久偷偷四色综合免费| 婷婷五月在线观看| 伊人久久婷婷| 五月婷婷草| 午夜色丁香| 成人五月天视频播放| 日欧一片内射VA在线影院| 成久综合视频| 最新av在线观看| 91久久免费| 五月丁香婷婷基地| 亚洲色色色色色| www.婷婷五月天| 亚洲视频一区| 色丁香五月婷婷| 日韩婷婷| 亚洲操精品| 婷婷五月天久久| 色天使色综合| 五月丁香六月情亚洲| 免费无码毛片一区二区A片| 噜噜噜噜噜在线| 亚洲国产精品VA在线看黑人| www..999热久| 国产性爱在线| 六月色色综合| 亚洲成人影视在线观看| 亚洲AV成人一区二区在线观看| 婷婷人人操| 欧美毛卡| 五月天伊人日日噜影片AV| 精国产品一区二区三区A片| 丁香五月婷婷呀| 婷婷激情五月| 他改变了拜占庭| 五月丁香亭亭| 99热在线观看99| 99热九九热| www.九九婷婷| 婷婷五月天无码| 成人网站免费sxj| 天天婷婷天天| 日本无码专区| 五月婷婷六月奇米网丁香| 日韩成人无码| www.av骚货| 涩五月丝袜婷婷| 橾逼网| 九九精品热播| 五月激情婷婷丁香天堂| 丁香五月婷婷天堂大香蕉| 婷婷五月,偷窥偷拍网| 丁香婷婷91在线观看视频| a在线观看| www色婷婷久久综合久色| 国产FREESEXVIDEOS性中国| 久久精品永久免费| 婷婷五月丁香人妻无码高清| 99爱在线观看视频| 碰97久久| 色色99| 777丁香六月青青草婷婷综合久月| 日本激情综合| 人人干Av| 超碰京东热av男人的天堂| 大香蕉欧美在线| 五月丁香婷婷久久| 五月丁香六月| 色五月丁香伊人五月| 欧美精品A片一区在线观看| 色婷丁香| 婷婷5月开心6月| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 91九色小视频| 婷婷五月天亚洲| 另类综合激情| 久久久全国免费视频| 丁香五月综合激情性爱| 婷婷午夜| 久久综合26p| 97超碰在线免费观看| 综合亚洲六月婷婷在线| 1024操逼| 久久免费操| 噜噜色五月| 国产操逼视频网站| 激情伊人五月天| 婷婷五月天亚洲天堂| 一起草aV| 五月婷婷久久综合| 五月天另类小说久久小说网| 久99在线视频| 国产精品第一国产精品| 26uuu在线观看| 秋霞午夜理论|