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
返回資訊列表
色狠狠999综合| 五月丁欧美| 第四色五月天| 香蕉久久国产av一区二区| 婷婷五月天网| 精a品a视a频| 婷婷五月天成人网| 自拍偷窥99热| 婷婷五月中文字幕国产| 九九熱最新視頻| 欧类av怡春院| 五月丁香啪啪啪| 天天干天天操天天上| 婷婷色色欧美| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 国产在线视频1234| 亚洲中文字幕在线观看| 色亭亭五月天丁香综合AV - 百度 - 百度| 久久久人妻不卡| 婷婷五月欧美综合| 婷婷激情五月| 五月激情小说网| 精品无码99| 日韩成人中文字幕| jiujiujiuwuyuetian| 激情五月天婷婷丁香 | 人人操女人| 欧美日韩成人高清在线| 啪啪小说五月天| 99超在线| 丁香婷婷免费| 有码人妻久久| 丁香婷婷激情五月| 99热 在线观看| 色色色色色五月| 9精品久久999| 黄网在线免费观| 国产亚洲99久久精品| 激情深爱综合网| 婷婷亚洲丁香五月| 天天日,夜夜爽| 天天肏视频| 久久日曰| 五月丁香色婷基地综合久久| 91精产品自偷自偷综合| 美女精品一级不卡视频| 五月婷婷偷拍| 99热精品在线| 婷婷五月蜜桃成人桃色丁香| 99热久久这里只有精品| 亚洲婷婷在线播放十月| 日韩好吊操| 欧美激情综合色综合啪啪五月| 亚洲网综合在线| 99热这里全都是精品| 久久与婷婷| 亚洲视色| 亚洲视频五区| 六月丁香啪啪啪| 九九热精品在线| 婷婷丁香五月在线播放| 激情丁香六月| 天天日天天干天天爽| 影音先锋色婷婷| 国产成人精品亚洲线观看| 久热99| 综合色五月天| 粉嫩AV久久一区二区三区| 九九久久精品| 人妻免费网站| 婷婷五月丁香91| 婷婷色吧| 九九99九九99偷拍视频免费看| 婷婷刺激综合| 噜噜色五月| 久久这里精彩免费在线观看| 6080av| 97干婷婷五月天| 婷婷五月天色综合翘| 婷婷色五月亚洲| 琪琪理论片| AAAA亚洲| 婷婷五月综合体验看| 婷婷五月综合社区| 国产精品电| 天天久久九九| 激情婷婷丁香五月天小说| 99色婷婷| 五月丁香婷爱在线| 五月丁香婷婷基地| 色婷婷亚洲综合网站| 99在线视频女女视频| 97超级碰碰碰| 亚洲综合干| 激情综合色五月丁香六月亚洲| 欧美色爱五月天| 久久丁香综合| 成人做爰高潮A片免费视频| 青草视频在线播放| 丁香六月婷婷开心| 欧美五月丁香| 色噜噜丁香| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 亲子乱AV一区二区三区下载| 五月丁香婷婷综合网色欲| 五月色天情| 婷婷网五月天| 狠狠精品干练久久久无码中文字幕| 9|人妻人人操| 亚洲五月六丁香激情| 婷婷五月天开心网| 丁香五月之久操视频| 91疯狂操操操操| www。狠狠干。com| 九九AV在线| 第九色区av天堂| ai97re99一本| 翔田千里无码| 五月丁香色婷婷| 九九中文字幕九| 久久精彩免费视频精彩免费视频| 五月婷视频在线| 国产69久久久欧美黑人A片 | 色婷婷电影网| 亚洲天堂制| 婷婷丁香五月天综合AV| 色婷婷88| xxxx久| 99热这里只有精品 搜| 热九九精品| 色婷婷很很十八禁| 99色色最新视频| 欧美人人操| 在线综合亚洲欧美65| 97啪啪| 婷婷五月天黄色小说| 成人在线日韩| 色色色综合视频| 97婷婷狠狠| 91操女| 婷婷日| 深爱激情五月婷婷| 精品久久99码| 天天日天天插| 激情深愛五月視頻| 欧美99热| 天天干天天日天天插 | www.久9| 色天天综合成人网| 天天干在线播放| 丁香五月天偷拍| 人妻激情综合| 色5月婷婷| 久久综合影院 | 欧类av怡春院| 99re思思精品在线观看| 黄色av网站在线免费播放| 欧美性爱五月天| 噜噜操操| 99热欧美在线观看| 激情五月婷婷| 久久成人人妻| 久99在线视频| 九九青草热| 综合www色| 婷婷五月天激情综合深爱激情| 激情内射人妻1区2区3区| 男人天堂亚洲综合| 五月天丁香啪啪啪啪| 色综合久久88色综合天天| 色涩视频久久| 外国碰视频网站97| 99久久久国产大片| 精品人妻午夜一区二区三区四区| 九一99| 影音先锋AV资源男人站| 超碰日日操| 婷婷涩涩五月天| 日本天堂免费99| 狠狠色97| 亚洲精品字幕在线观看| 久久亚洲激情五码| 激情综合五月| 久久九九激情五月天 | 色综合色| 婷婷香五月天| 久久这里只有精品久久| 激情综合网婷婷五夜| 色丁香影院| 成人AV中文字幕| 91婷婷| 99热99热在线观看| 日本九九网| 激情五月丁香五月| 五月天激情av| 天天做天天爱天天爽夜夜揉| 婷婷五月精品| 99热综合网| 精品久久99码| 亚洲国产另类av| 婷婷 伊人 久久| 色娸娸综合网| 亚洲综合婷婷| 欧美色爱五月天| 任你搞在线观看视频| 婷婷五月天在线综合| 婷婷九月亚洲| 婷婷色综合中心站| 色五月综合| 成人超碰Av| 色情婷婷。| 丁香五月婷婷基地| 色情五月天丁香社区| 色婷婷六月性| 九热久| 国产69久久久欧美黑人A片| 久久人妻伦理| 色色色色色色综合| 色综天天综合| 99色综合网| 97爱艹婷婷开心丁香激情综合| 狠狠做五月婷婷| 开心婷婷五月中文字幕组| 婷婷五月色影视先锋| 大地9中文在线观看免费高清| 这里只有精品在线观看视频| 五月丁香久久激情网| www久久久久| 激情综合99| 韩国婷婷丁香五月| 天天 青草 制服丝袜 在线| 五月婷婷性爱视频| 色无婷婷| 8090在线影视少妇| 天天干一干| 精品人妻伦一二三区久| 狠狠做深爱婷婷久久综合一区| 五月天婷婷午夜丁香| 色蜜婷婷| 久久香蕉婷婷| 日韩一级网站| 亚洲一二三网| 婷婷中文字幕网站| 婷婷五月欧美综合| 人妻丰满精品一区二区A片| 丁香五月最新地址| 直接看的AV| 久久午夜理论| 人妻videos人妻高清| 色综合婷婷| 99久99久| www.99操.com| 91九色成人原创视频| 少妇搡BBBB搡BBB搡毛茸茸| 亚洲视频色婷婷| 人人干AV| 99视频在线精品免费观看2| 国产精品久久久60086| 99er这里只有精品视频| 日韩好吊操| 久久婷婷伊人| 99这里有精品视频3| 五月久久婷婷丁香| 国产欧美日韩性爱| 婷婷五月丁香狠狠| 色婷婷a三区麻| 天天射天天射一道本日本社区 | 深情五月天| 狠狠操在线视频| 婷婷五月天激情综合婷婷五月天激情综合| 一本久久亚洲五月婷婷| 国产精品久久99| 婷婷综合久久| 人妻久久久久久久久妻久久久久| 婷婷五月深爱五月| 久久色亭亭五月天| 色婷婷六月丁香综合欲精品| 夜夜操狠狠操| 激情图片五月天| 涩五月婷婷| 99色色网| 2050人人操免费工开爱| 性爱七区| 久久er免费视频| 欧美va亚洲va| 天天爽夜夜爽夜爽精品| 2017人人操| 91碰碰| 五月婷婷丁香| 色五月婷婷丁香凹凸| 欧美三9久九观看| 成人αV视频免费观看| 99久99久| 丁香五月激情宗合| 狠狠色噜噜狠狠| 思思热这里只有精品| 日韩 中文 欧美| 色色操| 另类图片五月天| αv中文字幕在线观| 日韩av高清| 9l视频自拍9l九色9l成人| 成人一级片| WWW,五月天| 碰人人97| 九九99免费视频| 99在线观看视频精品| www.狠狠狠狠| 9热在线观看| 五月激情视频| 久久女伦| 18av天堂| 最新日韩AV中文字幕| 色五月婷婷天堂| 婷婷色六月| 激情四射五月天偷偷看婷婷| 亚洲热久久| 久久东京热婷婷五月| 中国丰满熟女A片免费观| 在线播放成人| 五月香蕉综合| 香蕉婷婷色五月| 色婷婷丁香五月| 丁香五夜激情四射夜夜夜| 丁香五月电影| 久久99精品久久久久久三级| 天天日天天肏天天奸| 激情綜合網址| 思思热AV| 色色婷婷综合| 狠狠艹狠狠艹| 丁香五月天堂网| 综合另类视频| 香蕉中文在线| 婷婷丁香色五月久久88| 蜜臀AV在线观看| 秋霞日本免费毛片A片| 久热九九| 操九色| 国产成人综合亚洲| 九九香蕉网| 色五月丁香五月| 天天射影院| 亚洲成人一区| 精品人妻在线| 婷婷玖玖丁香| 综合激情五月天六月婷免费视频| 夜夜嗨一区二区三区直播内容| 久久激情视频| 色综合五月| 超碰免费成人| 第四色五月天| 色五月xxx| 五月色婷婷影院| 久久综合综合综合| 五月丁香六月婷婷在线观看| 99精品综合| 狠狠久久婷五月综合色| 99精品视频免费观看| 中文字幕黄色电影网址| 永久精品| 天堂五月婷婷| 色综合中文| 99玖玖精品| 狠狠草狠狠草| 丁香五月欧美激情| 亚洲天堂久久| 天天天添天天操| 婷婷五月花| 深爱婷婷色| 粉嫩AV久久一区二区三区| 欧美激情 日韩无码 婷婷 五月天| 四色99久久| 婷婷九月| 婷婷丁香无码专区| 涩涩五月天| 98色花堂98t.R| 精品99在线| 免费AV在线| 伊人玖玖网| 久久久婷婷五月亚洲97号色| 亚洲综合新99视频| 青草青草久9视频在线视频| 五月婷婷 激情五月| 亚洲久艹| 狠狠搞狠狠操| 蜜桃五月天| 色情开心五月| 爱射综合| 色婷婷丁香五月在线观看| 东北黄色一级| 色五月婷婷网| 色五月天成人| www.xtbsty.cn.com蜜乳AV| 超pen个人视频97| 亚艹艹| 久久综合伊人77777蜜臀| 色情综合网| 情婷婷五月天在线| 色五月婷婷大香蕉| 精品无码久久久久久久久 | 久久精品色| 午夜少妇在线观看视频| 草五月| 久久黄A片| 8050一级网| 黄色一级影片| 五月丁香六月合| 婷婷综合偷拍| 黄桃AV无码免费一区二区三区| 久热视频这里只有精品| 成人五月天婷婷| 丁香五月瑟瑟| 激情小说五月天| 日本色视| 97婷婷丁香五月| 综合另类视频| 色九月综合| 思思热视频在线| 婷婷丁香人妻天天| www.五月天性.com| 五月天色综合| 2025年最新亚洲在线欧美| 久久五月天免费网站| www.99视频| 五月婷婷婷| 色宗合,宗合网| 国产性爱一级| 免费操超碰| 91碰碰碰| 99爱在线免费视频| 欧美视频五区| 六九色综合婷婷五月天| 婷婷激情六月天视频| 67194成I人在线观看线路1| 人人操碰| 日韩三十六页| 久久艹 五月天| 丁香五月AV| 大香线蕉伊人| 丁香五月天亚洲视频| 激情丁香五月激情婷婷| 婷婷色五月激情| 婷婷中文无码| 日韩人妻在线观看| 激情爱爱网站超大免费| 丁香五月九九| 亚洲色图啪啪| 夜色.cnm| 丁香六月激情国产| 色吊操色妞| 九色在线五月婷婷网址| av操逼网| 日韩AC在线免费观看| 五月天激情网图片| 人妻丰满精品一区二区A片| 丁香五月日韩| 久久激情综合| 91五月天| 婷婷九月| 欧美69久成人做爰视频| 亚洲精品第一色色色色色色| 男人操女人高潮91视频| 久久五月婷综合| WwW色婷婷| 久久久久亚洲AV综合| 国产一区二区三区影院| 青草视频在线观看视频| 操逼福利视频| 丁香五月天激情小说| ,99视频久久| 国产精品在线视频| 99久久er| 九九热只有精品| 玖玖资源在线视频| 亚卅毛片| 久久婷婷五月天| 思思热在线| 久久精品99国产精品日本| 99操逼| 国产AV一区二区三区日韩| www.99热国产| 91亚洲天堂| 国产.亚洲.欧洲视频在线| www.yw色| 深爱 五月天| 婷婷5月天av| 九九免费在线视频| 99热这里只有精品5| 免费亚洲婷婷五月| 欧美这里只有精品| 五月天另类小说久久小说网| 国产精品人妻在线网址| 久久九九怡红院| 丁香伊人激情| 丁香五月欧美午夜视频| 大香蕉综合在线| 日日操夜夜操不卡| 婷婷视频网| 欧美成人热| 色噜噜狠狠狠综合曰曰曰| 日本五月天激情| www.狠狠| 玖玖@三月天天丁香婷婷| A级毛片高清免费不卡播放谢谢谢谢| 91丨九色丨高潮丰满日本| 综合激情五月四射婷婷| 五月六月婷婷| 丁香六月综合激情| 秋霞少妇毛片| 五月 丁香 欧美| 天堂草在线观看| 婷婷婷婷色| 亚洲春色奇米影视| 97久久久| 婷婷久久丁香| 婷婷丁香一月| 天天透天天爱| 亚洲V国产V欧美V久久久久久| 亚洲在线播放| 狠狠狠激情网| 色婷婷丁香五月| 一本婷婷丁香久久| 99热最新精品| 五月丁香色婷婷色| 香蕉视频性爱BB做爱| 日本超碰在线| 亚洲无码99| 欧美性色A片免费免费观看的| 新激情综合| 天天插轮理| 色婷婷免费视频| 丁香五月婷婷激情四射深爱激情| 91丨九色丨熟女高潮| 激情五月丁香六月| 中文字幕乱码亚洲精品一区| 99久久精彩视频。| 无码啪啪| 小骚穴电影| 丁香五月av在线| 99热在线观看| 伊人激情啪啪| 久久玖玖综合| 五月天色色色色色| 欧美丁香五月| 嫩草免费视频| 丁香欧美| 青草视频在线播放| 伍月激情天| 超碰狠狠操| 婷婷色中文| 五月婷婷中文字幕| 国产色色小草视频| 丁香色五月婷婷| 爱iii做iiii日| 成人超碰AV| 日韩1区2区| 97视频91| 亚洲中文字幕av| 99热狠狠操| www五月| 影音先锋91视频| 99热这里只有精品50| 激情小说五月天| 九九这里只有精品在线视频| 婷婷五月天开心网| 九九视频免费| 天天摸天天舔在线视频| 婷婷五月丁香六月| 黄色99视频| 色五月欧美| 99爱视频精品| 丁香五月色情| 这里只有精品视频看看| 天天色2017| 色久激情在线| 久久9999| 色中色综合| 天天搞夜夜叫| 大伊香蕉精品视频在线| 婷婷丁香综合成人| www. 五月. com| 天天操综合网| 婷婷视频网| 超碰91在线| 久久99最新| A片试看120分钟做受图片| www.日日夜夜| 婷久久综合| 五月天久久综合| 大香蕉520| www.yw尤物| 婷婷中文字幕版| 日韩AC在线免费观看| 99热这里只有免费精品| 久久色五月| 丁香六月激情综合| www.五月丁香av| 丁香九色不卡aaa| 久久婷婷色综合| 色,激情五月天| 免费无码毛片一区二区A片| 婷婷开心六月| 久久九九网| 国产乱人偷精品人妻A片| 色色综合色| 亚洲成人AV在线播放| 日本三级大片| 色婷婷五月综合| 丁香五月亚洲激情婷婷射| 99热 精品在线| 爱婷婷都市激情| 天天舔天天插天天爱| 久久激丁香| 丁香久久综合| 五月丁香久久呀| 六月激情婷婷综合| 国产午夜成人AV在线播放| 丁香六月婷婷综合缴| 五月大香蕉| 久草五月丁香婷婷综合| 久久久免费精彩视频| 色色色色色爱| 五月婷婷干干干| 日本三级第一页| 亚洲色啪| 五月丁香六月在线| 色狠狠伊人久久五月丁香| 六月丁香婷婷综合在线| 99小视频在线| 色 五月 天 婷婷 丁香 九月| 六月丁香网| www.com五月天| 99re这里只有精品国产99| 无码一级片| 久久久国产精品黄毛片| 丁香五月婷婷色| 综合五月婷婷| 99热最新网址| 色色色色色级无码| 日韩无码专区| 色综合久久中文| 亚洲日本三级片| 99热91| 六月婷婷av| 99热这里只有精品2| 五月丁香啪啪激情| 色欲婷婷夜夜| 色色五月婷婷| 久热 91| 婷婷色一二三区波多野结衣| 日韩啪啪视品| 日本女色人人| 熟妇人妻中文字幕无码老熟妇| 日本久久婷| 久久丁香五月| 天天噜噜| 精品人妻一区二区三区四区不卡在| 色欲日日躁| 久久99激情| 性五月激情| 另类小说五月天| 黄网网站在线播放| 爱操人妻| 日本色色图| 激情婷婷五月| 二色AV| 啪啪丁香五月| av色婷婷| 九九香蕉网| 婷香五月| 99er精品| 成人小说 五月天 婷婷| 欧美一区二区三区不卡影视| se99在线| 人人看人人草人人摸| 开心五月婷婷在线| SESE无码AV| 另类五月激情| 五月婷婷六月色| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 婷婷在线播放av| 99热精品在线| 99色综合网| www.婷婷网| 六月婷婷七月丁香| 综合五月天婷婷色| www.com五月天| 天天爽天天日| caop在线视频| 九九色热| 国产精品男人AV不卡| 色婷婷成人久久| 五月天婷婷亚洲| 99久久精品色老| 丁香五月亚洲激情婷婷射| 色婷婷久久综合久色| 色综合久久天天综合网| 丁香六月在线| 91婷婷在线| 99热色精品| 波多野结衣不卡AV| 色一情一乱一乱91Av| 六月激情婷婷| 五月天自拍视频| 丁香婷婷基地| 久久婷婷六月综合| 97人碰人操| 久久久久激情网| 五月天无码| 五月六月激情| 超碰人人草| 亚洲最大成人综合网720P| 在线sebiav精品视频| 9精品在线| 狠狠色丁香婷婷综合久久97AV| 亚洲va欧洲va国产va不卡| AV五月丁香| 国产真实乱了老女人视频| 97日日碰碰| 亚洲欧洲99| 99久久久| 久热伊人| 中文在线成人| 丁香色播五月天| 婷婷五月丁香色综合| 欧洲色色| 九色91美女| 丁香五月天BBw| 综合色色婷婷| 色婷婷AV在线观看| 五月天国产成人| 五月婷在线播放| 中文激情网| 91热网址| 99热精地址| 思思热视频在线观看| 九九激情| 婷婷五月激情欧美大胆视频| 人人澡玖玖一| 免费成片在线观看| ss99热| 大香蕉啪啪啪| 玖玖婷婷视频| 九九九九精品精| 激情图片婷婷丁香五月| 久热只有这里精品| 五月丁香影院| 丁香婷最新动态| 狠狠色综合网| 综合九色| 日日爱699| 久久久亚洲精品一区二区三区浴池| 国产精品色婷婷99久久精品| 99热在线观看精品免费| 91打屁股免费看| 99色这里| 婷婷色五月天在线观看| 国产成人高清| 殴美日韩成人| 五月婷婷九九久久| 亚洲热久久| 波多婷婷久久| 日日操,夜夜爽| 情欲禁地| 伊人天天色| 久久综合九九| bbwcuckold精品熟妇| 婷婷97| 五月婷婷av| 狼人婷婷久久| 一区二区乱码视频| 99欧州偷拍视频| 色色色区| 98色花堂98t.R| 激情久久丁香| 天天日天天插| 99WWW免费视频| 婷婷久久精品| 99热这里都是精品| 国产激情视频在线观看| 中文字幕在线观看视频www| 伊人久热91| 欧美色色色| 色六月婷婷| 日本三级韩三级99久久| 五月丁香狠狠爱| 五月天激情视频| 五月天婷婷六月激情网| 99热免费| 久色五月| 五月婷婷黄| 婷婷丁香宗合888| 97视频久久| 人人爽天天爽| 欧美综合婷婷欧美综| 日本精品人妻无码77777| 99re这里只有精品首页| 亚洲123区高清入口| 婷婷六月丁香欧美视频在线| 我去色色网五雨天| 99热最新网址| 夜夜天天久久婷婷| 亚洲精品第一国产综合亚AV | 热99在线精品| 玖玖视频福利| 操B视频在线播放| 五月天婷婷爱| 久久久激情视频| 精品婷婷| Blackedraw视频一区二区| 成人精品99| 91综合在线视频| 国产成人网址| 婷婷之六月丁香| 亚洲一级AV在线免费播放| 欧美99热| 激情五月视频| 操人久久| 亚洲无AV在线中文字幕| 伊人五月天在线| 97碰在线视频| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 九月丁香很很色| 精品99视频| 在线VA视频| 六月婷婷AV| 天天做天天爱天天高潮| 天天成人丁香美女AV| 黑人熟妇一区二区三区| 99爱爱| 人人干av| 日日爽日日操| www999日韩精品| 免费观看全黄做爰的视频| 99久在线精品99re8| 天天干,天天舔| 五月天激情亚洲| 99热这里只有精品1| 婷婷视频在线| 国产乱码久久| 丁香五月综合久久| 欧美性猛交AAAA片黑人 | 激情五月婷婷视频一区二区三区| 六月欧美综合色情| 夜夜大香蕉婷婷丁香| av中文字幕免费观看| 国产精品久久久久久白浆色欲| 色婷婷六月开心中文字| 久久免费9| 五月天激情黄色网址| 日本天天色| 影视av久久久噜噜噜噜噜三级| xxx日本东京热| 国产亚洲在线| 久久久99日本大片| 色色五月天 亚洲| 99操视频| 五月婷婷激情综合| 亚洲美女网Va| 天天操综合网站| 久久er九九| 久久久18| 婷婷色啪| 丁香六月青青草| 综合久久激情久久| 伊人综合网站| 婷婷色六月| 99热老司机| 无码99| 综合一本道| 婷婷五月天激情视频| 精品久久婷婷五月天| caop在线| 中文精品在| 激情五月丁香六月综合AVXXXX| 国av网| 亚洲AV影片在线观看| 99在线精品观看99| 操一区| 亚洲精品99| 91狠狠色丁香婷婷综合久久精品| 久99久精品视频| 五月婷婷色| 99色在线视频| 狠狠干,狠狠操| 色播播五月| 婷婷丁香小说| 激情深爱五月天| 色五月天成人| 五月婷婷色播| 久超超碰| 操一区| 桃色五月天| 97干在线视频| 香蕉AV福利精品导航| 做爰丰满少妇1313| 亚洲欧洲中文日韩久久AV乱码| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 夜夜做天天爽| 久久久久久丁香五月| 99日韩网站| 99热这里只有精品86| 99视频在线精品| 亚洲AV中文在线| 热99在线| 搡BBBB搡BBB搡18 | 狠狠爱五月婷婷综合六月| 五月丁香综合久久夜夜| 久婷婷五月天影院| 久久性爱视频| www.sd-xiangsu.cpm| 婷婷五月天激情视频| 亚城区在线| WWW.17C亚洲精品| 99热18| www.99热国产| 人人叉久| 色一区高清| 五月婷色啪| 久9无码视频| 激情婷婷丁香| 久久久全国免费视频| 97热九九| 婷婷五月激情六月丁香| 狠狠色噜噜| 91ncom.色| 99免费超碰在线| 97热九九| 色五月婷婷少妇人妻| 操日挥操日日| 五月丁香婷婷啪啪| 久99婷婷色综合| 婷婷丁香亚洲色综合91| 色五月激情问网站| 丁香五月婷中字幕| 婷婷金品综合视频| 综合色、色综合| 欧美在线看| www,婷婷五月天777me,com| 草五月| 少妇性按摩无码中文A片| 欧美碰碰碰| 亚洲激情亚洲激情| 99热.com| 欧美性爱五月天| 久xxxx| 亚洲五月天天| 久久久无码精品成人A片小说| 激情小说五月天| 激情久久综合网| 丁香婷婷偷拍| 婷婷99狠狠躁天天躁中| 青青久久五月| 婷婷亚洲五| 欧美丁香五月夫妻天| 国产毛片欧美毛片久久久| 国产资源在线视频| 丁香五月人妻熟女| 99热.com| 日本三级毛片| 台湾佬天天日丁香婷婷五月天| 91精品久久久久久| 欧美123区免| 五月天色婷婷av| 99精品自拍视频| 婷婷五月激情视频网| 五月激情视频网| 日韩999| 亚洲在线视频321| 久久久精久人妻| 天天插综合| 五月丁香久久色| 99爱这里只有精品| 色色色婷婷五月天| 影音先锋91资源站| 丁香激情久久| 欧美日韩成人在线网| 婷婷六久久| 综合婷婷六月| 婷婷激情社区| av在线激情| 99热在线观看精品| 影音先锋秋秋五月婷婷| 亚洲久久视频| 五月丁香影院| 色色色婷婷五月天| 五月天亚洲综合网| 九色综合网| 色婷婷五月天天天做| 91碰碰| 大香蕉五月丁香| 熟女网站久久| 色五月大香蕉婷婷| 激情五月小说婷婷| 国产亚洲成人综合| 日韩人妻操逼视频| www.99热| 99久久婷婷国产综合| 婷婷欧美综合| 91尤物九色在线| 激情影院丁香五月| 激情九九六月激情免费视频| 直接看的AV| 日日操夜夜操中国无码| 996日日爱| 婷婷六久久| 丁香六月天色婷婷| 激婷网| 天天狠狠色综合| 五月色情| 天天天摸夜夜夜玩| 婷婷婷久久| 丁香婷婷六月在线资源观看| 影音先锋五月婷婷| 丁香五月天人体| 六月丁香五月婷婷| 五月婷婷六月爱| 思思热在线视频精品| 十月丁香婷婷| 色五月婷婷在线观看第一页舔| 色视五月天婷婷| 丁香五月婷婷社区| 婷婷操婷婷干婷婷射| 国产亚洲99久久精品熟女| 色五月在线播放| 97极品在线| 亚洲成人高清在线| 天天狠狠婷婷在线| 福利视频在线播放| WWW.桔色成人.COM| 玖色色综合| 色婷婷久久综合| 丁香五月激情婷婷视频| 欧洲色色| 开心激情网五月| 9999热在线观看| 久久久久er热| 五月开心婷婷| 丁香五月熟女| 日本三级中国三级99| 日操| 俺来也狠狠| 播五月,色五月,开心五月播放器 | 7777激情基地| 丁香五月天激情综合| 淫荡工a| jiujiujiuwuyuetian| www.丁香五月| 新五月天婷婷激情电影| 丁香五月婷婷99| 综合色色婷婷| 日在线V视频在线播放| 五月婷婷色白丝| 欧美婷婷丁香五月社区| 日韩六十路91性交电影| 久草九九| 久操婷婷| 婷婷激情视频欧美视频自拍视频欧美剧| www.91九色| 国产精品久久久久久喷浆| 婷婷六月丁香五月| 五月色丁香综合| 天天肏天天肏| www.婷婷六月天| 综合久久人妻| 婷婷五月天激情文学小说| 五月丁香亚州综合网| 99色综合网| 天天综合干| 综合久久五月天| 色狠狠色噜噜AV天堂五区| 五月丁香六月婷| 午夜精品777| 91好好热日本在线| 7EzOBIhNq85TO| 久操人妻| 色欲婷婷夜夜| 天天综合网~91综合网| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 色了色综合| 亚洲最大在线| 极品五月天| 狠狠狠狠狠狠| 丁香五月成人婷婷| 人人做人人看人人摸| 色色色色色日韩午夜激情 | 久久久思思热| 91人人人人人人人| 激情深爱五月天| 五月天婷婷成人网| 色5月婷婷| 丁香五月天欧美成人| 九九人人精品| 婷婷色色宗合网| av国产精品| 五月婷色| 色色五月天丁香婷婷| 色婷婷五月天综合网| 激情五月图| 97久久久久| 91精品又长又大又粗又爽又猛| 人人爽网| 欧美交换配乱吟粗大25P| 人人澡玖玖一| 99性色| 亚洲激情97五月天| Va另类视频| 久久最新色色色| 六月婷婷激情图片| 97欧美在线| 狠狠爱婷婷色| 黄色录像网点| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 色欲午夜无码久久久久久张津瑜| 色噜综| 色色色色av777| 精品思思久久| 综合激情五月丁香| 新97人人上人人| 婷婷综合色图| 99ri在线播放| 另类视在线| 97色欧美| 色狠狠综合入口| 五月丁香综合影院| 伊人五月综合网| 在线成人视频免费| 激情婷| 婷婷爱五月| 中文字幕,综合,91| 超碰在线观看成人视| 色婷婷五月成人网| 激情五月丁香六月综合AVXXXX| av在线观看网址| 丁香五月成人自拍| 激情五月婷婷啪啪| 欧美日韩成人在线观看| 九九精品99久久久| 9福利性视频欧美| 久久9视频欧美| 69热在线| 精品无码av丁香五月激情| 99在线观看视频蜜臀| 久热伊人9| 色五月丁香伊人五月| 丁香婷婷色五月天| 五月六月婷婷| 五月天开心网| 婷婷永久在线| 26uuu欧美日本| 风流少妇A片一区二区蜜桃 | 丁香五月婷婷天激情| 色综合日日| 天天干夜夜谢| 九月丁香五月婷婷| 另类视频五月天| 黄网在线播放| 五月色丁香| 国产AV影片| 伊人五月天久久| 五月色婷| 四五月婷婷| 五月宗合激情网| 大香线蕉伊人| 婷婷99狠狠| 丁香五月婷婷色综合| 欧美人人女女精品综合五月天| 九月丁香亭亭| 亚洲九九九九| 婷婷十月激情综合网| 99自拍视频网站| 极品少妇XXXX精品少妇偷拍| 婷婷日韩| 婷婷97碰碰| 丁香五月六月婷婷自拍| 狠狠色综合精品视频在线| 五月色网| 国产成人精品一区二三区熟女在线| 久久久久视剧HD| 啪啪一区| 色婷丁香| 99思思热只有在这里看| 激情五月婷| 丁香婷婷五月香蕉91| 亚洲午夜Av| 噜综合| 99视频热| 久草五月天| 婷综合六月| av婷婷丁香 六月| 丁香婷婷视频一区二区| 91久操| 97操女视频| 99热欧美在线观看| 日本久久爱| 日日天天干| 九九精品re免费视频| 成人精品一区二区三区四区五区| 天天热夜夜操| 岛国av网站| 色青五月天| 精品无码色欲AV| 丁香五月天亚洲视频| 五月婷婷色欲| 伊人99热| 成功精品影院| 日本精品人妻无码77777| 亚洲激情综| 99爱视频在线播放| 人妻体体内射精一区二区| 激情图片久久| 99热在线观看这里只有精品| 久热这里只有| 丁香五月色五月| 五月婷婷乱| 丁香九月婷婷| 久热一本| 激情五月久久| 婷婷五月综合在线| 亚洲不卡欧洲| 丁香婷婷情色五月天| 一本到不卡高清DVD| 狠狠色性| 狠狠综合久久| www.97干视频| 九九婷婷五月天| 久久无码成人| 久久五月天精品视频| 超碰免费大香蕉| 六月丁香激情| 九九热免费| 亚洲蜜桃精久久久久久久久久久久| 亚洲激情网| 91天天操天天干天天射| 99碰视频| 99re这里| 热思思九九| 亚洲激情图文小说| 五月丁香六月婷婷啪啪| 中文字幕在线日亚州9| 91狠狠综合网| 久久99精品久久久| 日本操B视频| 色吧网综合| 2025年最新亚洲在线欧美| 欧美综合激情| 2023天天日夜夜爽| 思思热在线观看| 色婷婷久久综合久色| 色婷婷丁香五月| 日韩不卡DvD| 婷婷久月| 美日韩成人| 天天插天天插天天插天天插| 色婷网| 日本一级一片免费视频| 精品网站:999WWW| AAA久久久| 秋霞免费三级片| 综合色图区| 九九热这里只有精品5| 天天爱天天爽| 深爱激情四射| 欧美婷婷丁香社区在线播放| 99re这里只有精品首页|