亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Linux 6.6 IOMMU DMA重映射:原理、驗(yàn)證與排障指南

Linux 6.6 IOMMU DMA重映射:原理、驗(yàn)證與排障指南 做驅(qū)動(dòng)調(diào)試的人大概都經(jīng)歷過(guò)這種場(chǎng)面設(shè)備驅(qū)動(dòng)跑得好好的某一刻數(shù)據(jù)突然錯(cuò)亂日志里干干凈凈用崩潰轉(zhuǎn)儲(chǔ)一看內(nèi)核某塊結(jié)構(gòu)體被一段完全不相干的十六進(jìn)制數(shù)據(jù)糊住了。查到最后往往是設(shè)備發(fā)出的 DMA 地址寫(xiě)錯(cuò)了或者描述符里的地址字段被固件改花了——沒(méi)有 IOMMU 的時(shí)候總線上的 DMA 請(qǐng)求就是全裸奔的設(shè)備愛(ài)往哪寫(xiě)就往哪寫(xiě)內(nèi)存管理單元完全管不了它。Linux 6.6 內(nèi)核里 IOMMU 子系統(tǒng)的 DMA 重映射DMA Remapping就是專(zhuān)門(mén)收拾這個(gè)問(wèn)題的一層它把設(shè)備看到的地址空間和 CPU 看到的物理地址空間徹底切開(kāi)設(shè)備發(fā)出的每一個(gè)地址都要先過(guò)這張翻譯表。這篇內(nèi)容圍繞 IOMMU 的 DMA 重映射原理展開(kāi)同時(shí)把 6.6 上怎么打開(kāi)、怎么觀察、怎么驗(yàn)證、怎么排坑一次講透適合正在寫(xiě) PCIe 驅(qū)動(dòng)、做設(shè)備直通、或者被 DMA 越界搞得睡不著的同行參考。1. IOMMU 到底在解決什么問(wèn)題從一次指針踩內(nèi)存說(shuō)起1.1 沒(méi)有 IOMMU 時(shí)設(shè)備的 DMA 是完全不設(shè)防的先把最基礎(chǔ)的一層說(shuō)清楚。CPU 訪問(wèn)內(nèi)存要經(jīng)過(guò) MMU頁(yè)表決定哪塊虛擬地址對(duì)應(yīng)哪塊物理頁(yè)越界就缺頁(yè)異常。但設(shè)備不一樣設(shè)備發(fā)起 DMA 時(shí)把地址丟到總線上由內(nèi)存控制器直接取數(shù)或者寫(xiě)數(shù)這條路默認(rèn)繞開(kāi)了 MMU。也就是說(shuō)一塊 PCIe 采集卡只要往描述符里寫(xiě)一個(gè)0xffff_8880_0000_0000這樣的地址硬件就會(huì)老老實(shí)實(shí)往那個(gè)物理位置寫(xiě)數(shù)據(jù)中間沒(méi)有任何審批環(huán)節(jié)。我在某實(shí)驗(yàn)室見(jiàn)過(guò)一塊自定義采集卡FPGA 側(cè)的地址位寬算錯(cuò)了一位描述符里的目標(biāo)地址被左移了一位結(jié)果驅(qū)動(dòng)程序填給它的緩沖區(qū)地址整體偏移。沒(méi)開(kāi) IOMMU 的機(jī)器上這個(gè)偏移會(huì)隨機(jī)打壞相鄰的 slab 對(duì)象現(xiàn)象是跑幾個(gè)小時(shí)之后文件系統(tǒng)報(bào)錯(cuò)或者某個(gè)完全無(wú)關(guān)的進(jìn)程收到 SIGBUS。這種問(wèn)題最難查的地方在于故障點(diǎn)和根因之間隔著幾百毫秒甚至幾秒崩潰現(xiàn)場(chǎng)和元兇毫無(wú)關(guān)聯(lián)。打開(kāi) IOMMU 之后同樣的錯(cuò)誤地址會(huì)立刻觸發(fā)一次 IOMMU 缺頁(yè)內(nèi)核打印出一行包含設(shè)備標(biāo)識(shí)和出錯(cuò)地址的 fault 日志驅(qū)動(dòng)直接被判定為行為異常。故障從偶發(fā)玄學(xué)變成穩(wěn)定復(fù)現(xiàn)這個(gè)價(jià)值遠(yuǎn)比性能優(yōu)化重要。所以我一直跟人說(shuō)IOMMU 首先是一個(gè)調(diào)試工具和隔離邊界其次才是一個(gè)地址翻譯器。1.2 三層價(jià)值隔離、翻譯、訪問(wèn)控制把 IOMMU 的能力拆開(kāi)看其實(shí)是三件相互支撐的事。第一是地址翻譯設(shè)備用一套地址內(nèi)核里叫 IOVAI/O Virtual Address硬件按頁(yè)表翻成物理地址PA。第二是隔離每個(gè)設(shè)備嚴(yán)格說(shuō)是每個(gè) IOMMU group有自己獨(dú)立的地址空間A 設(shè)備映射的區(qū)域 B 設(shè)備看不見(jiàn)也摸不著哪怕兩塊卡是同型號(hào)、同一個(gè)驅(qū)動(dòng)。第三是訪問(wèn)控制每一個(gè)頁(yè)表項(xiàng)都帶權(quán)限位讀、寫(xiě)、執(zhí)行是分開(kāi)的設(shè)備只能做被顯式允許的操作。這三層疊起來(lái)才支撐了后來(lái)一堆上層玩法設(shè)備直通給虛擬機(jī)時(shí)把整個(gè) group 的地址空間交給客戶(hù)機(jī)管內(nèi)核里的vfio靠它做用戶(hù)態(tài)驅(qū)動(dòng)容器場(chǎng)景下做設(shè)備隔離內(nèi)核自己的DMA API靠它在 32 位設(shè)備上做地址窗口收斂bounce buffer 那一套。很多人以為 IOMMU 就是為了虛擬化其實(shí)虛擬化只是最出名的一個(gè)消費(fèi)者日常驅(qū)動(dòng)開(kāi)發(fā)里它天天都在干活。1.3 為什么叫重映射而不是映射這個(gè)用詞值得掰一下因?yàn)樗苯訉?duì)應(yīng)硬件結(jié)構(gòu)。設(shè)備發(fā)出的地址在 IOMMU 硬件里叫輸入地址經(jīng)過(guò)查表后得到輸出地址再送到內(nèi)存控制器。翻譯過(guò)程是進(jìn)來(lái)一個(gè)地址出去另一個(gè)地址所以叫 remapping。而 CPU 側(cè)的 MMU 我們習(xí)慣叫 mapping因?yàn)樗菑臎](méi)有物理歸屬的虛擬地址建立起映射關(guān)系。落到代碼上這個(gè)差別體現(xiàn)得很明顯CPU 側(cè)你操作的是vm_area_struct和頁(yè)表是申請(qǐng)地址→缺頁(yè)→填頁(yè)表的懶惰路徑IOMMU 側(cè)是先顯式建映射→再告訴設(shè)備可以用這個(gè)地址沒(méi)有缺頁(yè)這回事ATS/PRI那套另說(shuō)屬于設(shè)備主動(dòng)問(wèn)路后面章節(jié)會(huì)提。理解了這個(gè)不對(duì)稱(chēng)你就能明白為什么 DMA 映射的 API 必須成對(duì)出現(xiàn)dma_map_single/dma_unmap_single中間那段窗口硬件已經(jīng)準(zhǔn)備好了用完必須還回去否則 IOVA 會(huì)漏。2. DMA 重映射的核心數(shù)據(jù)結(jié)構(gòu)與地址翻譯鏈路2.1 設(shè)備、group、domain三個(gè)概念別搞混剛接觸這塊的人最容易在這三個(gè)詞上打轉(zhuǎn)。我用一個(gè)類(lèi)比說(shuō)清楚設(shè)備是具體的網(wǎng)卡、采集卡、NVMe 盤(pán)group是一批無(wú)法相互隔離的設(shè)備集合硬件上它們共用同一個(gè)翻譯單元或者同一條通往內(nèi)存的路徑內(nèi)核只能把它們當(dāng)成一個(gè)整體來(lái)管domain是真正承載頁(yè)表的那塊地址空間一個(gè) domain 里可以掛多個(gè) group。關(guān)鍵點(diǎn)在于內(nèi)核默認(rèn)策略是一個(gè) group 一個(gè) domain同一 group 里的設(shè)備共享同一套頁(yè)表。這就意味著如果同一個(gè) group 里有一塊你不信任的設(shè)備它會(huì)和同組的可信設(shè)備平起平坐。做過(guò)直通的人應(yīng)該都踩過(guò)這個(gè)坑——想把某塊網(wǎng)卡單獨(dú)丟給虛擬機(jī)結(jié)果發(fā)現(xiàn)它和板載的一個(gè) USB 控制器同組只能整組一起交出去或者用pci-stub提前把同組設(shè)備都占住。在 6.6 里查看分組很簡(jiǎn)單for g in /sys/kernel/iommu_groups/*; do echo $(basename $g) for d in $g/devices/*; do echo $(basename $d) $(lspci -nns $(basename $d) 2/dev/null | cut -c1-80) done done分組結(jié)果完全由固件描述決定ACPI 表或者設(shè)備樹(shù)里的描述決定了哪些設(shè)備歸到一組內(nèi)核只是照著執(zhí)行。所以有些分組看起來(lái)莫名其妙那是固件的鍋不是內(nèi)核的鍋。2.2 頁(yè)表結(jié)構(gòu)從根表一路走到最后一頁(yè)x86 平臺(tái)上的 DMA 重映射硬件ACPI 里描述為 DMAR它的翻譯鏈路大致是三層結(jié)構(gòu)先按設(shè)備標(biāo)識(shí)找到根表項(xiàng)再按總線號(hào)找到上下文表項(xiàng)上下文表項(xiàng)里存著真正的多級(jí)頁(yè)表基址。真正做地址翻譯的部分和 CPU 的分頁(yè)結(jié)構(gòu)思路一致可以是三級(jí)、四級(jí)甚至五級(jí)具體級(jí)別在上下文表項(xiàng)里寫(xiě)明。另一類(lèi)主流平臺(tái)用的表述叫 SMMU結(jié)構(gòu)換了個(gè)名字但思想一樣設(shè)備按流 ID 查到一張表里的表項(xiàng)表項(xiàng)指向另一層配置配置里指定用哪套頁(yè)表、哪個(gè)地址空間。你在設(shè)備樹(shù)里給設(shè)備節(jié)點(diǎn)寫(xiě)一條描述 IOMMU 歸屬的屬性?xún)?nèi)核初始化時(shí)就能把這條鏈路串起來(lái)。這個(gè)多層結(jié)構(gòu)的存在直接導(dǎo)致了兩個(gè)工程后果。第一初始化階段必須先把整條鏈路建好包括分配頁(yè)表內(nèi)存、填根表和上下文表這段代碼在內(nèi)核啟動(dòng)早期跑調(diào)試起來(lái)很麻煩。第二頁(yè)表級(jí)別可以按設(shè)備能力協(xié)商一塊只支持 32 位地址的設(shè)備給它配的頁(yè)表級(jí)別低IOVA 窗口自然也小這直接決定了你能給這臺(tái)設(shè)備分配多大的 DMA 緩沖區(qū)。后面第 4 節(jié)講參數(shù)計(jì)算時(shí)會(huì)用到這一點(diǎn)。2.3 IOVA 分配器地址不是隨便給的頁(yè)表建好了還得決定給設(shè)備什么 IOVA。這塊在 6.6 里是dma-iommu這層在管核心是一個(gè)按地址范圍分配的管理器內(nèi)部用紅黑樹(shù)記錄已占用的區(qū)間再配一層 per-CPU 的小緩存來(lái)加速短小分配的復(fù)用。為什么要有 per-CPU 緩存因?yàn)?DMA 映射調(diào)用極其頻繁網(wǎng)卡每發(fā)一個(gè)包、磁盤(pán)每做一次 I/O 都要映射一次如果每次都去紅黑樹(shù)上做插入刪除鎖競(jìng)爭(zhēng)會(huì)直接把性能打下來(lái)。緩存的做法是unmap 時(shí)把釋放的 IOVA 區(qū)間按大小檔位存進(jìn)當(dāng)前 CPU 的緩存數(shù)組下次分配同檔位時(shí)直接從數(shù)組里取取不到再去全局樹(shù)里找。實(shí)測(cè)下來(lái)這個(gè)緩存能干掉相當(dāng)可觀的一筆分配開(kāi)銷(xiāo)代價(jià)是 IOVA 的復(fù)用延后了一點(diǎn)對(duì)于調(diào)試來(lái)說(shuō)你可能會(huì)看到某些 IOVA 長(zhǎng)時(shí)間沒(méi)被回收。默認(rèn)情況下64 位設(shè)備拿到的 IOVA 窗口通常是 48 位寬度也就是一個(gè)非常大的地址空間。這個(gè)寬度不是拍腦袋定的它來(lái)自設(shè)備的coherent_dma_mask和dma_mask設(shè)備支持多寬的地址內(nèi)核就據(jù)此外推 IOMMU 能給多寬的窗口同時(shí)受 IOMMU 硬件本身支持的最大寬度約束。如果你的驅(qū)動(dòng)里把dma_mask設(shè)成 32 位恭喜你給自己套了一個(gè) 4GB 的籠子映射壓力大時(shí)很快會(huì)撞墻。2.4 權(quán)限位、緩存一致性與 IOTLB頁(yè)表項(xiàng)里的權(quán)限位不用多說(shuō)讀、寫(xiě)分開(kāi)內(nèi)核在dma_map_*時(shí)按數(shù)據(jù)傳輸方向設(shè)置。這里有個(gè)細(xì)節(jié)值得提DMA_FROM_DEVICE方向下建的是可寫(xiě)權(quán)限設(shè)備要往內(nèi)存寫(xiě)而不是只讀反過(guò)來(lái)DMA_TO_DEVICE建的是可讀。剛接觸的人經(jīng)常反著理解以為方向是CPU 要干什么其實(shí)是設(shè)備要干什么。一致性方面同一塊內(nèi)存 CPU 和設(shè)備都能訪問(wèn)緩存就成了麻煩。一致性架構(gòu)x86 常見(jiàn)的那種硬件自己保證非一致性架構(gòu)上就得軟件動(dòng)手dma_map_single在映射前要把 CPU 緩存里對(duì)應(yīng)的數(shù)據(jù)刷到內(nèi)存dma_unmap_single之后要讓 CPU 緩存失效否則 CPU 讀到的是舊值。這一套在 IOMMU 之上照樣要做IOMMU 管的是地址翻譯和權(quán)限不管緩存。最后是 IOTLB。頁(yè)表改了不等于硬件立刻知道IOMMU 內(nèi)部有自己的地址翻譯緩存翻譯結(jié)果會(huì)被緩存起來(lái)。改了映射必須讓緩存失效否則設(shè)備還在用舊的翻譯結(jié)果訪問(wèn)已經(jīng)回收的內(nèi)存。這就是嚴(yán)格模式和延遲模式的分界點(diǎn)嚴(yán)格模式下每次 unmap 立刻發(fā)失效指令安全但慢延遲模式下把要失效的區(qū)間攢起來(lái)攢到一定量或者遇到必須同步的點(diǎn)再一起發(fā)快但有窗口風(fēng)險(xiǎn)。# 查看當(dāng)前是否嚴(yán)格模式不同小版本參數(shù)名可能微調(diào)以?xún)?nèi)核文檔為準(zhǔn) cat /proc/cmdline | tr \n | grep -E iommu3. Linux 6.6 里的那幾條關(guān)鍵路徑3.1 啟動(dòng)階段固件描述怎么變成 domain內(nèi)核啟動(dòng)早期IOMMU 的初始化分兩步走。第一步是探測(cè)硬件、解析固件描述把每一條哪個(gè)設(shè)備歸哪套翻譯硬件管的關(guān)系記錄下來(lái)形成設(shè)備到 group 的對(duì)應(yīng)關(guān)系。這一步在內(nèi)存管理初始化之前就要做完一部分因?yàn)楹竺娴?DMA 一致性分配可能馬上就需要翻譯能力。第二步是惰性建域。內(nèi)核不會(huì)在啟動(dòng)時(shí)給所有設(shè)備都建 domain而是等設(shè)備真正被驅(qū)動(dòng) probe、第一次調(diào)用 DMA 映射時(shí)才建。這個(gè)設(shè)計(jì)很務(wù)實(shí)一臺(tái)機(jī)器上可能有幾十個(gè)設(shè)備大部分根本沒(méi)驅(qū)動(dòng)管全建一遍純屬浪費(fèi)頁(yè)表內(nèi)存。你在日志里看到的那些初始化行只說(shuō)明翻譯硬件就緒了不代表每個(gè)設(shè)備都已經(jīng)有自己的地址空間。這里有個(gè)排查技巧開(kāi)機(jī)日志里搜 IOMMU 相關(guān)的行能看到翻譯單元被識(shí)別、支持的頁(yè)表級(jí)別、以及是否有設(shè)備因?yàn)槊枋鰶_突被跳過(guò)。如果某塊設(shè)備明明在卻查不到它的 group八成是固件里的描述沒(méi)覆蓋到它或者是熱插拔槽位的描述寫(xiě)得有問(wèn)題。3.2 驅(qū)動(dòng) probe 之后dma_map_single 里的四層調(diào)用這是整條鏈路里最值得逐層看的一段。你的驅(qū)動(dòng)調(diào)用dma_map_single(dev, ptr, size, dir)往下依次是通用 DMA 層先看這個(gè)設(shè)備有沒(méi)有 IOMMU domain有就走 IOMMU 路徑?jīng)]有就退化成直接的物理地址映射這個(gè)退化路徑叫 direct mapping需要swiotlb兜底處理地址不可達(dá)的情況。走 IOMMU 路徑時(shí)進(jìn)入dma-iommu這層先做頁(yè)對(duì)齊處理你傳進(jìn)來(lái)的地址和長(zhǎng)度幾乎不可能是頁(yè)對(duì)齊的這層會(huì)算出覆蓋范圍并想好頭尾兩頁(yè)怎么處理。分配 IOVA從分配器里拿一段足夠大的連續(xù)地址注意這里要的是連續(xù) IOVA物理上可以不連續(xù)。落頁(yè)表調(diào)用iommu_map把這批 IOVA 和對(duì)應(yīng)的物理頁(yè)逐個(gè)建立映射頁(yè)大小會(huì)盡量往大頁(yè)上湊能用一個(gè) 2MB 頁(yè)就不用 512 個(gè) 4KB 頁(yè)這對(duì)減少 TLB 壓力和頁(yè)表內(nèi)存都很有意義。最終返回給你的是 IOVA你把它寫(xiě)進(jìn)設(shè)備寄存器或者描述符。注意返回的這個(gè)地址絕對(duì)不能當(dāng)指針用CPU 直接解引用它是未定義行為因?yàn)樗辉?CPU 的地址空間里。順手貼一個(gè)最小驗(yàn)證模塊的核心片段方便你在自己的板子上跑一遍#include linux/module.h #include linux/pci.h #include linux/dma-mapping.h static int __init dmatest_init(void) { struct pci_dev *pdev; void *buf; dma_addr_t dma; u64 mask DMA_BIT_MASK(48); pdev pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); if (!pdev) return -ENODEV; if (dma_set_mask_and_coherent(pdev-dev, mask)) dev_warn(pdev-dev, 48-bit mask not accepted\n); buf dma_alloc_coherent(pdev-dev, 4096, dma, GFP_KERNEL); if (!buf) return -ENOMEM; pr_info(iommu probe: va%px dma%pad\n, buf, dma); dma_free_coherent(pdev-dev, 4096, buf, dma); pci_dev_put(pdev); return 0; }跑起來(lái)看dma打印出來(lái)的值。如果機(jī)器上 IOMMU 生效這個(gè)值幾乎不會(huì)等于__pa(buf)如果兩者相等說(shuō)明走的是 direct mapping 或者身份映射IOMMU 實(shí)際沒(méi)在翻譯。3.3 iommu_map 內(nèi)部頁(yè)大小拆分與批量映射進(jìn)到iommu_map之后核心動(dòng)作是先算這一段能用的最大頁(yè)是多少。硬件會(huì)給一個(gè)支持的頁(yè)大小位圖映射的 IOVA 和物理地址又各有對(duì)齊要求兩頭一取得出這一段里能用大頁(yè)的范圍剩下的邊角用 4KB 頁(yè)補(bǔ)齊。這個(gè)拆分邏輯是性能的關(guān)鍵也是坑的來(lái)源。舉個(gè)具體例子你要映射 4MB 加 4KB 的緩沖區(qū)起始地址只對(duì)齊到 4KB。那么開(kāi)頭那一小段只能是 4KB 頁(yè)中間能湊出連續(xù)的 2MB 對(duì)齊區(qū)域就用 2MB 頁(yè)末尾再補(bǔ)。這樣拼出來(lái)的頁(yè)表?xiàng)l目數(shù)遠(yuǎn)少于全用 4KB 頁(yè)TLB 命中也更好。iommu_map_sg走的是同一套邏輯只是把散列表一次性批量處理省掉了多次調(diào)用的開(kāi)銷(xiāo)網(wǎng)卡這類(lèi)做多段 DMA 的設(shè)備全靠它。6.6 里這塊還在演進(jìn)中屬性結(jié)構(gòu)逐步統(tǒng)一老的按設(shè)備單獨(dú)實(shí)現(xiàn)映射回調(diào)的方式正被按域分配的分頁(yè)接口替代。這意味著如果你在維護(hù)一個(gè)廠內(nèi)私有的 IOMMU 驅(qū)動(dòng)升級(jí)到 6.6 附近時(shí)要留意接口變化別照著老版本的樣板抄。3.4 unmap 的時(shí)機(jī)比 map 更容易出事的地方映射寫(xiě)起來(lái)簡(jiǎn)單回收才是見(jiàn)功力的地方。dma_unmap_single做三件事清頁(yè)表項(xiàng)、把 IOVA 還給分配器、按模式?jīng)Q定是否立刻發(fā)失效指令。任何一步出問(wèn)題都有明確癥狀。漏了 unmapIOVA 就一直被占著跑久了分配器找不到連續(xù)區(qū)間驅(qū)動(dòng)申請(qǐng)緩沖區(qū)開(kāi)始失敗日志里會(huì)出現(xiàn) DMA API 調(diào)試相關(guān)的告警或者分配失敗。這個(gè)在長(zhǎng)時(shí)間壓測(cè)里才暴露所以很多驅(qū)動(dòng)的問(wèn)題是在跑了一兩天之后才冒出來(lái)的。更陰險(xiǎn)的是時(shí)序錯(cuò)位設(shè)備還在往緩沖區(qū)寫(xiě)數(shù)據(jù)你的代碼已經(jīng)把 unmap 做了IOVA 隨后被分配給另一個(gè)設(shè)備。這時(shí)候總線上還飛著舊設(shè)備的寫(xiě)請(qǐng)求落到新設(shè)備的緩沖區(qū)里數(shù)據(jù)就被污染了。這類(lèi)問(wèn)題表現(xiàn)為隨機(jī)數(shù)據(jù)錯(cuò)亂且只在負(fù)載高的時(shí)候出現(xiàn)。規(guī)避辦法很樸素必須確保設(shè)備已經(jīng)停止對(duì)該緩沖區(qū)的訪問(wèn)讀完成寄存器、等中斷、做一次同步屏障才能 unmap。延遲模式會(huì)讓這個(gè)窗口更長(zhǎng)調(diào)試環(huán)境建議先開(kāi)嚴(yán)格模式穩(wěn)定之后再考慮性能優(yōu)化。4. 實(shí)操打開(kāi) IOMMU 之后怎么觀察和驗(yàn)證4.1 內(nèi)核命令行參數(shù)與生效判斷先確認(rèn)硬件和固件是否就緒。開(kāi)機(jī)日志里搜翻譯單元的初始化信息能看到它被識(shí)別、支持的最大地址寬度、頁(yè)大小位圖。如果完全沒(méi)有相關(guān)行先查固件里對(duì)應(yīng)的開(kāi)關(guān)有沒(méi)有打開(kāi)x86 平臺(tái)上這個(gè)開(kāi)關(guān)有時(shí)在芯片組配置里名字不一定顯眼。內(nèi)核參數(shù)方面常用的幾個(gè)iommuon強(qiáng)制啟用iommupt讓設(shè)備默認(rèn)走身份映射只建一張等價(jià)映射性能幾乎無(wú)損隔離性大部分丟失iommu.strict1強(qiáng)制嚴(yán)格模式iommu.passthrough0禁用透?jìng)?。這里要提醒一句參數(shù)名在不同小版本上偶有調(diào)整動(dòng)手前翻一下隨內(nèi)核源碼附帶的命令行參數(shù)文檔比在網(wǎng)上抄別人的配置靠譜。判斷是否真的生效最直接的辦法是看設(shè)備的 DMA 地址和物理地址是否相同也就是上面那段模塊代碼的輸出。第二直接的辦法是看/sys/kernel/debug/iommu/devices/下面有沒(méi)有這個(gè)設(shè)備的條目——6.x 里加的這個(gè)調(diào)試接口相當(dāng)好用里面能看到它當(dāng)前掛的域類(lèi)型、是否啟用 ATS、以及身份映射狀態(tài)。我第一次用它排查一個(gè)以為開(kāi)了其實(shí)沒(méi)開(kāi)的直通問(wèn)題時(shí)五分鐘就定位到了。4.2 用 tracepoint 看每一次映射的真實(shí)參數(shù)調(diào)性能或者查泄漏光看日志不夠得上 tracepoint。IOMMU 子系統(tǒng)埋了幾個(gè)關(guān)鍵點(diǎn)映射、解映射、批量映射都能記錄下域指針、IOVA、物理地址、長(zhǎng)度、權(quán)限。# 打開(kāi)映射相關(guān)的事件 cd /sys/kernel/debug/tracing echo 1 events/iommu/enable echo 1 tracing_on # 跑一段你的業(yè)務(wù) sleep 5 echo 0 tracing_on cat trace | head -50從輸出里能直接讀出三件事映射長(zhǎng)度分布大部分是 256 字節(jié)還是 4KB反映你的緩沖區(qū)設(shè)計(jì)是否合理、IOVA 是否集中在低地址說(shuō)明窗口開(kāi)小了或者分配器壓力大、以及 map 和 unmap 的數(shù)量是否匹配不匹配就是泄漏。我用這套方法抓到過(guò)一個(gè)很典型的問(wèn)題某驅(qū)動(dòng)的接收路徑每包都映射一次小緩沖區(qū)日志里 unmap 次數(shù)比 map 少了不到千分之一??粗黄鹧鄣钠钆芤煌砩暇屠鄯e出幾萬(wàn)個(gè)沒(méi)回收的 IOVA最后分配大塊連續(xù)區(qū)間失敗。查出來(lái)是錯(cuò)誤分支上少寫(xiě)了一行 unmap。4.3 觀察點(diǎn)整理從文件系統(tǒng)到日志觀察目標(biāo)位置關(guān)鍵信息設(shè)備分組情況/sys/kernel/iommu_groups/哪些設(shè)備共用一套翻譯能否獨(dú)立直通設(shè)備當(dāng)前域狀態(tài)/sys/kernel/debug/iommu/devices/域類(lèi)型、是否身份映射、ATS 狀態(tài)每次映射的詳細(xì)參數(shù)events/iommu/下的 tracepointIOVA、物理地址、長(zhǎng)度、權(quán)限缺頁(yè)與訪問(wèn)越權(quán)內(nèi)核日志設(shè)備標(biāo)識(shí)、出錯(cuò)地址、訪問(wèn)類(lèi)型映射泄漏與誤用內(nèi)核日志需開(kāi) DMA API 調(diào)試長(zhǎng)度不一致、方向不一致、提前釋放這張表建議存下來(lái)。我排查 IOMMU 相關(guān)問(wèn)題基本就是從上往下過(guò)一遍先看分組對(duì)不對(duì)再看域建沒(méi)建再看映射有沒(méi)有異常最后看有沒(méi)有硬件報(bào)錯(cuò)順序亂了容易鉆牛角尖。4.4 嚴(yán)格模式與延遲模式的實(shí)際代價(jià)性能這塊給個(gè)量級(jí)參考具體數(shù)字跟平臺(tái)強(qiáng)相關(guān)別照抄。在一臺(tái)普通雙路服務(wù)器上跑萬(wàn)兆網(wǎng)卡的小包收發(fā)嚴(yán)格模式下每個(gè)包一次映射一次失效吞吐比延遲模式低一截某些配置下差距比較明顯換成大包或者批量提交的場(chǎng)景差距迅速縮小因?yàn)槭е噶畹臄偙⌒?yīng)出來(lái)了。我的建議是分環(huán)境對(duì)待開(kāi)發(fā)和功能驗(yàn)證階段一律開(kāi)嚴(yán)格模式讓錯(cuò)誤盡早暴露生產(chǎn)環(huán)境如果壓測(cè)通過(guò)、驅(qū)動(dòng)行為規(guī)范可以切延遲模式換性能。但前提是驅(qū)動(dòng)真的守規(guī)矩——所有 DMA 緩沖區(qū)的生命周期都有明確的同步點(diǎn)。我見(jiàn)過(guò)為了追性能直接切延遲模式結(jié)果把一個(gè)本來(lái)就存在的時(shí)序 bug 放大了十倍的情況那種排查成本完全不值得。提示切模式之前先做一輪長(zhǎng)時(shí)間壓力測(cè)試重點(diǎn)看接收方向的數(shù)據(jù)完整性這個(gè)方向的問(wèn)題最容易被延遲失效掩蓋。5. 常見(jiàn)問(wèn)題與排查速查表5.1 三類(lèi)典型故障的定位路徑第一類(lèi)是開(kāi)了 IOMMU 之后設(shè)備直接不工作。現(xiàn)象是驅(qū)動(dòng) probe 成功但第一次 DMA 就報(bào)錯(cuò)或者數(shù)據(jù)全零。先查這個(gè)設(shè)備的 DMA 地址寬度如果驅(qū)動(dòng)把dma_mask設(shè)成了 32 位而設(shè)備的實(shí)際緩沖區(qū)又申請(qǐng)?jiān)?4GB 以上映射就會(huì)失敗或者觸發(fā) bounce buffer。其次查設(shè)備是否被分到了一個(gè)奇怪的 group導(dǎo)致它的域里沒(méi)有預(yù)期的映射。最后確認(rèn)固件描述里這個(gè)設(shè)備確實(shí)歸 IOMMU 管——有些平臺(tái)對(duì)某些根端口默認(rèn)不做翻譯。第二類(lèi)是跑一段時(shí)間后隨機(jī)出錯(cuò)。這是最典型的延遲失效或者生命周期問(wèn)題。把嚴(yán)格模式打開(kāi)復(fù)現(xiàn)一次如果嚴(yán)格模式下問(wèn)題消失基本可以確定是失效時(shí)機(jī)或者緩沖區(qū)回收時(shí)機(jī)的問(wèn)題。再用 tracepoint 對(duì)齊 map/unmap 的時(shí)間戳和業(yè)務(wù)日志找出哪個(gè)緩沖區(qū)的釋放早于設(shè)備停止訪問(wèn)。第三類(lèi)是性能比不開(kāi) IOMMU 差很多。先分清是映射開(kāi)銷(xiāo)還是失效開(kāi)銷(xiāo)。映射開(kāi)銷(xiāo)大的特征是 CPU 占用高、映射次數(shù)多優(yōu)化方向是合并小映射、用散列表批量映射、復(fù)用緩沖區(qū)失效開(kāi)銷(xiāo)大的特征是延遲模式的收益明顯優(yōu)化方向是調(diào)整同步粒度。還有一種容易被忽略的情況映射時(shí)頁(yè)大小沒(méi)湊上大頁(yè)全是 4KB 頁(yè)導(dǎo)致 TLB 壓力大這個(gè)從 tracepoint 的長(zhǎng)度分布能看出來(lái)。5.2 排查速查表現(xiàn)象可能原因快速驗(yàn)證處理方式第一次 DMA 就失敗地址寬度設(shè)置過(guò)窄打印dma_mask與緩沖區(qū)地址按設(shè)備能力放開(kāi)到 48 位或更高數(shù)據(jù)隨機(jī)錯(cuò)亂提前 unmap 或延遲失效切嚴(yán)格模式復(fù)現(xiàn)補(bǔ)同步點(diǎn)確認(rèn)設(shè)備停止后再釋放運(yùn)行數(shù)小時(shí)后分配失敗IOVA 泄漏對(duì)比 map/unmap 計(jì)數(shù)檢查所有錯(cuò)誤分支的回收映射成功但設(shè)備讀到舊數(shù)據(jù)CPU 緩存未刷單步調(diào)試確認(rèn) map 前的操作檢查方向參數(shù)是否傳錯(cuò)設(shè)備訪問(wèn)直接觸發(fā) fault映射范圍沒(méi)覆蓋全看 fault 日志里的地址檢查長(zhǎng)度與頁(yè)對(duì)齊處理想直通卻整組被牽連group 內(nèi)設(shè)備不可分查分組目錄提前占住同組其他設(shè)備性能斷崖式下跌全小頁(yè)映射或嚴(yán)格模式看映射長(zhǎng)度分布合并映射、調(diào)整模式5.3 幾個(gè)只有踩過(guò)才知道的細(xì)節(jié)邊界頁(yè)的處理。你傳進(jìn)去的緩沖區(qū)地址沒(méi)對(duì)齊、長(zhǎng)度也不是頁(yè)整數(shù)倍時(shí)dma-iommu這層需要保證覆蓋范圍。它可能會(huì)對(duì)首尾頁(yè)做特殊處理也可能直接要求調(diào)用方保證對(duì)齊。不同版本的策略有差異穩(wěn)妥的做法是自己在驅(qū)動(dòng)里就按頁(yè)對(duì)齊申請(qǐng)緩沖區(qū)別把麻煩丟給底層。我吃過(guò)一次虧一個(gè) 64 字節(jié)的映射跨越了頁(yè)邊界尾部那一小段落到了相鄰的映射區(qū)域里兩個(gè)設(shè)備互相踩查了兩天才定位。方向參數(shù)不是裝飾品。傳錯(cuò)方向不會(huì)立刻報(bào)錯(cuò)但頁(yè)表權(quán)限建錯(cuò)了某些平臺(tái)上設(shè)備會(huì)收到訪問(wèn)拒絕某些平臺(tái)上則完全不報(bào)錯(cuò)只是緩存維護(hù)做反了。后一種最要命表現(xiàn)為數(shù)據(jù)延遲一個(gè)周期才更新看起來(lái)像硬件時(shí)序問(wèn)題。身份映射不等于沒(méi)開(kāi)。iommupt或者某些驅(qū)動(dòng)主動(dòng)請(qǐng)求身份映射時(shí)設(shè)備看到的就是物理地址隔離性基本沒(méi)有但翻譯鏈路還在。排查時(shí)別看到地址相等就斷定 IOMMU 沒(méi)工作得去看域類(lèi)型。熱插拔設(shè)備要重新看分組。上電順序不同固件給的分組可能不一樣一個(gè)槽位冷啟動(dòng)和熱插拔之后可能落到不同的組里。做直通方案時(shí)不能假設(shè)分組固定。調(diào)試階段把 DMA API 調(diào)試選項(xiàng)打開(kāi)。這個(gè)選項(xiàng)會(huì)額外檢查每次映射和釋放的參數(shù)一致性代價(jià)是性能下降但能在開(kāi)發(fā)期抓出大量低級(jí)錯(cuò)誤包括長(zhǎng)度不一致、方向不一致、重復(fù)釋放。上線前關(guān)掉即可。我在實(shí)際使用中的體會(huì)是IOMMU 這層?xùn)|西的價(jià)值不在于它有多復(fù)雜而在于它把設(shè)備的錯(cuò)誤行為從不可觀測(cè)變成了可觀測(cè)。以前遇到 DMA 越界只能靠縮小范圍、加內(nèi)存屏障、打點(diǎn)猜現(xiàn)在一行 fault 日志直接告訴你是哪個(gè)設(shè)備、訪問(wèn)了哪個(gè)地址、是讀還是寫(xiě)。把第 4 節(jié)那幾個(gè)觀察點(diǎn)用熟絕大部分和 DMA 相關(guān)的疑難雜癥都能在半小時(shí)內(nèi)鎖定方向剩下的只是修驅(qū)動(dòng)的問(wèn)題。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
青娱乐999| 91色狼| 久久久久久999| 91狼人| 亚洲免费日韩在线一区二区| 亚洲色图91| 亚洲女毛多水多21P| 宅男91视频在线播放| 天美传媒AV在线| 郑州宾馆老熟女露脸啪啪| 亚洲 一区二区 自拍| 亚洲国产综合久久久性感熟妇| 久久久一区二区| 岛国色情视频在线观看| 日日夜夜国产综合| 大象AV在线| 免费看久久久性性| 亚洲美女精品九九视频| av国产无码| 十八禁av无码免费网站APP| 男人的天堂三级| 啪啪免费| 黑人干亚洲| 99国产精品视频尤物| 国产免费大片| 国产日韩色综合| 91色爽欧美| 2023天天操夜夜操| 亚洲第91页| 九九色色| 久久久久国产一区二| 亚洲中文字幕在现观看| 蜜臀99久久国产| 四虎影视永久在线观看精品免费网站| 2017大香蕉国产精品久久| 日本大片日本一区二区免费高清| 久久草大香蕉| 大香蕉色十月| 欧美人人天天网| 日产123区精品免费观看| 天天弄欧美| 欧美亚洲国产自久久| oumeisetu综合| 麻豆蜜桃视频在线观看| 男人的天堂VA| 欧美性xxxxx狂欢| 夜夜草天天| 亚洲无线码欧洲精品区别| 97超碰护士| 无码精品久久久久久亚洲| 激情黄色片在线观看| 日韩中文字幕人妻视频| 手机看片1025| 大香蕉综合| 天堂精品| av黄图片在线观看| 国产超碰| 又摸又舔在线观看网站| 97超碰色情| 1024午夜激情男人的天堂| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 超碰成人人人爽人人爽| 国模私拍一区二区三区神乳| 欧美精品另类人妖xxxx| 91天天日| 少妇无码999| 国产亚洲人妻综合日韩 久久| 亚洲影视高清第一页| www.99热| 亚洲蜜桃V妇女| 免费AV中文网在线观看| wuyechaopeng| 97 视频在线| 狠狠干综合| 91足交| 精品人妻视频入口| 亚洲高清色综合| 超碰在线97国产| 五月色综合| 亚洲蜜桃V妇女| 国产精品成人无码a v毛片| 美女9118禁| 亚洲AV色图一区| 男人的天堂日韩| 色情婷婷| 九九热精品在线| 人人考人人摸人人干| 人人做天天爱| 吉田爱美AV在线| 久久久久久久一级黄色打同平台| 丝袜狠狠草尤物人妻av91| 综合激情97| 久久久96| 丁香五月大香蕉| 日韩影片中文字幕一区二区三区| 神马九九九| 另类图片综合| 亚洲午夜AV| 人人操天天爽| 嗯嗯不要视频| 日韩操逼性鲍| 99999无码| 欧美成年人性爱视频免费观看| 久久超碰97中文字幕| 亚洲综合婷婷| 国产精品自在线发布| 久久久性爱| 日日噜噜夜夜久久亚洲一区二区 | 91老司机精品| 超碰97资源网亚洲| 97精品视频在线| 大香蕉国产中文自拍| 色婷婷六月| av日韩在线观看电影| 国产精品麻豆免费视频| 国模无码人体一区二区三| 蜜臀久久99精品久久久电影| 91性感在线| 91综合天天| 干我久操| 婷婷99狠狠| 欧美综合网1| 色月天AV导航| 日本免费一区二| 久视频在线观看| 九九九久千久久激情蜜桃在线看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日韩青久久| 五月婷婷激情综合| 日本日皮视频逼| 91天天综合日韩欧美| 91色堂| 污污汅18禁网站在线永久免费观看| 欧美综合97www| 欧美另类色| 嗯嗯,啊啊,国产精品| 中文字幕啊啊啊在线观看视频| 亚洲色诱惑| 国产福利影视| 加勒比AV天堂| 天天弄天天操| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美黄色大片在线观看| 国产亚洲 中文欧美久久| 免费的很黄很污的全部视频| 国产伦乱91| 亚洲区小说| 中文字幕乱码人妻二区三区| 夜夜青青无码影院| 超碰在线人妻中文字幕| 免费的很黄很污的全部视频| 日本理论在线| 日韩精品午夜操呦呦不卡影院| 四虎影视精品| 亚洲最大AV网| 大香蕉综合| 日韩美女高潮喷水视频| 熟女人妻精品一区二区视频 | 国产视频不卡在线观看| 五月天激情影院| 中文字幕国产精品1区| 性色高清在线| 日韩无码第3页| 九九无码| 久久九色| 日韩精品大香蕉伊人在线| 97超级久久| 无码久久国产| 狠狠干狠狠干| 亚洲 中文 欧美 日韩 在线| 久艾草在线精品视频在线观看| 性爱av网站| 三级片大波波| 亚洲se91| 99热这里只有精| 久久蜜色情在线视频xxx免费观看| 99爱久久视频频| 中文字幕99999| 精品一区二区三区蜜桃臀赵总 | 色欲久久综合| 色精品极品| 欧美 熟女 日韩| 亚洲少妇视频| 久久一级无码精品毛片6| 亚洲国成人情色好看电影| 97天天插| 家庭乱伦麻豆| 久久精品亚洲婷婷| 青青五月天| 亚洲综合婷婷| 国产精品69久久久久久久| 久久久久久加勒比| 91欧美高清| 在线色资源| 精品久久久久久中文| 日韩熟女精品无码专区一区二区| 少妇厨房愉情理伦片bd在线观看| 美女露胸露尿口| 伊色久人大在线| 色婷婷六月| 怡红院亚洲怡春院av| 欧美老妇曰批的视频| 超碰爽人妻熟女Av| 亚洲中文字幕在现观看| 蜜桃传媒一区二区亚洲| 狠狠操使劲操| 看黑丝美女操逼青青网站| 色吧91| 9久热| 97超碰精品图片| 免費黃色視頻觀看一| 激情文学亚洲| 日本岛国黄色网址| 亚洲狠狠入| 射丝袜高跟鞋99| 午夜福利国产欧美日韩夜夜| 欧美少妇性乱| 国产大学生口爆吞精合集| www.高清无码诱惑一区.com| 岛国毛片手机在线观看| 欧美se综合| 国产乱码久久| 岛国爱情动作片在国产AV无码专区亚洲AV漫画 | 亚洲的天堂网| 日韩不卡a级视频专区| 欧美日韩人妻精品一区二区三区| 婷婷亚洲天堂| 欧美亚洲自拍另类人妻| 综合色拍| 欧美99| 亚欧美色| 日韩AV一区二区三区三州三州| 综合影院永久入口国产| 久久久久久免费电影| 亚洲制服欧美另类内射| 欧美性性性| 亚洲熟妇丝袜在线观看| 国产自产一区视频在线| 亚洲高清欧美总合| 色眯眯av| 蜜臀亚洲中文| 激情五月天丁香社区| 青青草公开在线免费不卡视频| 国产999精品久久久久久| 26uuu最新| 欧美情色男人的天堂| 精品亚洲一区在线观看| 男人天堂毛片| 久久久久久久人妻| 久久久久国产精品久久久| 欧美熟妇视频| 性爱久久| 乱伦图av| 91美女视频在线观看| 蜜臀久久久| 免费看久久久性性| 日本操嫩b网| 天天爱综合网| 精品国产一区二区久久| 中国探花熟女| 国产精品蜜臀久久久久无码AV| 亚洲熟妇综合久久久久久| 色噜噜综合在线| 3028国产精品| 蜜汁欧美| 日本顶级天天操狠狠操夜夜操中文字幕| 大奶啊啊好爽| 干婷婷综合网| 岛国黄色短视频| 啊啊啊啊好多水| 亚欧美综合网。| 亚洲综合色男人网| 综合色99| 色情乱伦AV| 中文字幕在线免费观看2| 370p日韩欧美亚洲精品| 少妇三p| 精品国产国产AV| 一区久久久二区| 狠狠狠狠狠狠| 怡红院一区二区熟女人妻| 久9re热视频这里只有精品| 久久线上视频免费看| 91亚州欧美| 116美女午夜| 国产久久久久久久久一区二区| 无码外流操逼视频| 四虎精品永久在线播放| 欧美少妇高潮| 亚洲图片小说欧洲| chaopen97久久| 日韩中文字幕宗合在线| 少妇500双飞99| 中文字幕片| 成人情色一区二区| 色婷婷99| 亚洲偷拍自拍在线视频| 亚洲av影音先锋| 精品人妻一区二区三区日产| 吻戏激情性巴克| 亚洲91大片| 区一在线观看| 欧美熟妇操操视频| 亚洲AV乱码专区国产噜噜亚洲| 开心五月深爱五月| 大香蕉520| 91久久99久久91熟女精品| 97色欧州| 色色网91| 欧美不卡在线一区二区| 揉揉揉夜夜| 懂色Av一区二区三区| 在现视频女上位好爽| 立川理惠加勒比无码| 岛国成人av在线播放网址| 亚洲一区二区三区久久 亚洲一区二区| 色狠人在线99| 岛国不卡超碰护士AV在线播放| 福利五区| 日韩欧美成人午夜福利| 成人婷婷丁香| 天天情欲宗合网| 九九久久玖玖| 婷婷中文网| 久区视频| 日本不卡高清视频| 96AV精品| 欧美 色 亚洲| blacked精品一区国产| 成年女人一区| 韩国一级做a久久久久| 久久精品国产72国产精品福利 | 婷婷激情五月天小说网| 美女啊啊啊啊啊啊啊| 亚州欧美一区| 日本免费一级AAA大片器| 99精品在线播放| 网站A V在线| 偷拍亚洲情色| 97色97干| 屌色在线97视频| av东京热男人的天堂| 黄色成人网久久久久久| 俺去俺来也在线www| 草b在线| 91五十路| 超碰99热中文字幕| 可以在线观看的黄色网址| 毛片视频白嫩| 国产乱伦性爱区| 懂色AV中文| 久久性爱视频免费看| 欧美日韩情色一区二区| 91精品人妻一区二区三区蜜臀| 视频二区美腿丝袜制服人妻欧美| 超碰在线人妻中文字幕| 日韩二级| 久草国产在线视频| 欧美78P| 国产性刺激| 四虎影视永久在线免费| 尤物视频偷拍免费| 国产后入精品| 综合久久中文字幕综合日韩精品| 日韩成人大片在线观看| 97精品第3页| 91国产美女丝袜足交精品视频| 黄色AAAAA欧美| 黑人在线91| 亚洲综合草草| 日本在线一二 | 欧美性爱三区二区| 永久免费观看的毛片的网站| 蜜桃视频一区二区三区| 亚洲丝袜B诱惑| 日韩免费三级黄片电影| 中文无线日韩一区| 久久久久久久少妇| 狠色婷婷久久一区二区三区_| 国产综合色精品在线观看| 亚州色图片在线色| 成人色女网| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产高清不卡视频| 东京热熟女亚洲视频网站| 色九九久九九| 亚洲一区亚洲天堂| 欧美日韩少妇色情| 三上制服丝AV| 精品少妇后入一区二区三区四区人妻巨乳| 国产精品久久成人免费| 精品区国产区一区二区三区| 日韩免费高清大片在线| 精品日韩| 婷婷探花久久精品一区| 超碰视97中文| 俺去啦自拍| 蜜臀99久久国产| 亚洲性猛交| 男人天堂.AB| 你操综合| 久久久久斤小| 69XX一中文字幕人妻91| 国产精品内射婷婷一级二| 天美传媒AV在线播放| 久久国产精品m码| 日本欧美不卡| 秋霞Av理论一级在线| 黄片无码在线制服| 久草视频分类在线| 手机午夜电影神马久久| 无码区蜜乳| 亚洲丝袜在线观看| 欧美综合亚洲综合| 中文字幕一区二区日韩网| 亚洲精品九九九| 91美女在线| 中文字幕三四区| 盗摄女人妻在线| 亚洲高潮少妇| 久久偷拍人| 天天干1区2区在线| 97超碰站| 夜夜操二区| 九X超碰| 国产高清不卡视频| 999国产精品999久久久久久| 人人操人人插人人摸人人干| 五月婷婷色| 久久97资源 网| 亚洲国产欧美一区二区潘金莲| 香蕉热人人精品| 九月婷婷久久| 躁躁日曰躁2020| 成人夜夜| A 在线网址| 久久久蜜桃一区二区三区| 久久夜色一区二区| 中文字幕视频在线观看| 97色碰| 六月激情网| 青青草原成人| 久99热| a片亚洲一本通视频| 五月丁香黄色网| 久久人妻熟女一区二区| www.99视频| 成人在线午夜视频一区| 人人弄人人摸| 人人妻人人色| 少妇xx精品| 伊人久久久日韩一区| 激情文学88| 99精品在线观看| 三级色影综合网| 五月婷婷性爱| 伦理第一页| 久久人人妻| 久久AV无码AV| 丰满人妻一区二区中文| 影音先锋日本乱伦| 乱伦av麻豆| 99国产精品自在自在| 亚洲精品成人激情在线| 成人a v在线播放免费| 久久一区无码| 欧美一级黄色18片免费看| 日韩成人小视频| 999岛国大片| 欧美色九九| 天天91~综合入口| 日韩欧美大片免费高清啪啪| 大白逼三四级| 免费久久9999| av操操不卡| 开心五月婷婷激情| 国产一级高跟丝袜| 不卡一区视频| 日本片日本片祼观看网站在线看中文版网页在线看 | 97 国产一区| 亚洲无线码一区国产欧美国| 日韩免费三级黄片电影| 国内伊人久久久久久网站视频| 亚洲国产一级精品毛一级精品看免费视频| 51一区二区三区| 男人天堂.AB| 国产一级片| 精品成人亚洲午夜电影| 97天天操| 91老司机视频| 青草一区二区| 久久久久96| 99国产在线绯色一区| 日本狂喷奶水在线播放212| 久久只有精品| 91亚洲综合在线| 日本性爱欧美性爱| 精品传媒在线一区| 91网站18+| 嗯嗯嗯嗯啊啊啊好紧好大| 国产操逼视频在线观看| 精品国产91内射久久| 狠狠久久手机视频精品| 亚洲玖玖爱| 特级大荫道BBwBBwBBW| 岛国小电影| 欧美日韩免费专区在线| 国产乱人妻精品入口| 少妇同性| 91老熟女老女人国产老太| 色娱乐色呦呦夜夜夜夜av| 亚洲无套久久嗯嗯| 日本九九久久99播| 中文字幕久久精品一区| 嗯~啊~快点 死我视频免费看网站| 欧美精品91| 国产中文福利| 精品97久久| 免费精品无码一级毛片牛牛影视| 天堂综合网| 国产精品网址| 免费无码国产精品v片在线观看| 欧美人妻久久精品二区三区| 操www| 操婷婷逼| WWW啪啪的com| 亚洲无吗在线视频| 激情开心五月天| 综合日本女人伊人| 国产亚热在线久久| 干我久操| 久久精彩视频9| 东方亚洲在线操逼天堂| 欧美中日韩XXXX| 欧美1区二区三区公司| 视频分类 国内精品| 人人超碰在线观看黄| 色婷婷一区二区三区久久午夜| 91亚洲人| 久久久久久精品免费看A级| 99色综合| 啊啊啊草死我| www.婷婷| 爱丝福利| 大香网站| 97久久国产精品| 欧美日产国产在线成人第一区| 国产乱码久久| 青青在线视频免费| 免费A V在线| 欧美色图 人妻| 久久精品午夜国产亚洲AV无码| 日本免费不卡二区| 97资源站国产精品| 岛国黄色短视频| 天堂资源欧美| 日韩中文字幕精品一区在线| 一二三啪啪专区| 午夜福利一区二区影院| 亚洲国成人情色好看电影| 日韩簧片免费看| 亚州成人A√| 国产精品福利资源在线尤物| 求求你操操我| 天天射天天操天天干天天吃2018| 啊啊啊好湿国产一二| 久久男人天堂| 91激情国产| 欧美做爰无码A片视频| 97日韩欧美| 伊色综合天堂色97| 日韩欧美一级特黄大片| 我爱操| 天无日色综合| 国产操逼逼网| 欧美精品黑人猛交高潮| 久久久久久性爱视频| 十八禁成人网站在线观看| 足交视频老司机| 日日干男人的天堂| AV色天香在线| 色麻豆AV| 亚洲伊人a线观看视频| 久久精彩免费视频| 玖玖爱视频网站| 国产又色又爽又舒服的三级视频| 欧美激情亚洲色图| 日本阿v天堂在线观看| 色噜噜婷婷| 中文三一区| 色玖玖| 婷婷色网| 亚洲天堂一区二区久久| 96免费视频在线| 思思视频免费看网站| 色婷婷成人综合| 中国AAAAAA黄色片| 色诱中文字幕| 色综合久久av| 欧美91精彩| www.大香| 91激情国产| 国产亚洲精品自在线亚洲情侣| 91在线丝袜视频| 99在线免费公开视频| 粉嫩AV一区夜夜嗨| 偷拍 欧美 日韩| 97视频www| 国产三区免费在线观看| 亚洲系列欧美| 丁香婷婷久久 | 999久久久久久久久| 91精品国产麻豆国产自产在| 麻豆一区二区三区在线看| 激情专区综合| 国产精品夜夜夜| 六月丁香五月婷婷| 婷婷色色五月天福利| wwe 天天干.com| 国产精品亚洲天堂网址| 丝袜天堂网| 91精品91久久久中77777| 成人性生活高清视频在线播放| 人妻熟女午夜精品在线| 欧美成97爱| 青娱乐日韩无码| 岛国福利在线精品播放| 色哟哟1区2区| 99热91| 日韩av在线精品观看| 色九九九综合| 黄色av一区二区在线| 中国特猛少妇色xxx| 亚洲AV无码| 久久91精品国产9丨久久分亭| 新怡红院| 午夜精品一区二区三区三上悠亚| 大香蕉乱级| 91劲爆| 日韩成人大片在线观看| 欧美综合天天| 色婷婷综合久久久久中文一区二区| av在线观看不卡网站| 91高清欧美| 五月婷婷hd| 久99| 日韩av影片在线观看| 亚洲天堂欧美| 欧美激情精品久久久| 国产免费大片| 欧美中出1| 国产亚洲深夜激情| 一级AAA片一区二区三区| 97超碰天天爱天天爱| 日韩亚洲精品一区二区| 久久午夜色播影院免费高清| 人妻激情在线视频| 人妻夜夜爽天天爽麻豆三区网站| 无码聚合| 国产品精品自在在线午夜免费 | 欧美性生活免费网| 蜜桃AV天堂| 骚逼一区二区| 麻豆AV96熟妇人妻| 亚洲综合春色| 亚洲午夜福利在线影院| 国产一区二区免费福利片| av线电影| 精品国产99| 日韩精品免费高清视频在线| 国产福利视频精品视频| 神马麻豆福利院| 成人熟女区| 中文有码第五页| 激情六月婷婷| 免费黄色片子| 久久xxxx| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | ′ !γ}丶。。久久精品欧美一区二区三区| 亚洲国产精品9999在线观看| 亚洲av成人精品一区| 97久久国产亚洲精品超碰热| 91色伦综合| 国产成人主播| 精品然女一区二区| 99九九久久| 婷婷五月天久久精品视频一区二区三区 | 操熟女91| 青娱乐黄色录像| 精品一二三区四视频| 91中文精品日韩欧美在线 | 亚洲人妻色图| 高清孕妇孕交 交| 亚洲天天自拍| 黑人性欧美| 亚洲综合色图欧美| 操久久久久| 家庭乱伦国产精品| 久肏视频字幕| 国产中文福利| 久久一本大香蕉| 亚洲天堂电影网| 日本三级韩国三级美三级91| 亚洲少妇自拍中文字幕懂色| 九九九影院| 校园春色亚洲无码| 久久是精品| 老熟妇一区二区三区| 亚洲色图欧美色图在线播放| 97免费视频在线| 天美传媒AV在线播放| 丰满人妻一区二区三区色-百度| 97色97干| 天天澡天天狠天天天做| 中文AV制服乱伦| 91人妻人人澡人人爽人人精品| A级片一区| 96超碰网| 情趣丝袜无码操逼视频| 欧美巨大性舒爽顶到了| 黄色免费网页无码| 青青草操逼逼视频| 97国产精品国| 亚洲一二三| 欧美性爱一区二区三区四区| 久久亚码| 天堂亚洲欧美| 一级AV性爱| 九九aV| 人妻一区二区三区| 噜噜噜亚洲精品| 在线视频资源| 蜜乳中文字幕a在线| 亚洲无码一二三区| 青青草自拍视频在线播放| 97亚洲欧美日韩| 天天操天天干美女网址导航| 99久久久无码国产精品性啊聊| 精品人妻中文字幕高清| 亚洲欧综合另类无码一区| 午夜精品久久久久久久男人的天堂| 国产又粗又又黄又猛| 精品v日韩欧美国产| 久久久久日本视| 日韩精品人妻中文字有码在线| 精品人妻少妇| 性色生活片久久毛片婬片免费放女人一级毛片 | 亚洲熟妇丝袜在线观看| 亚州乱码中文字幕综合久久久| 久久久月天| 欧美色www亚洲国产阿娇要播| 一本大道不卡一二三区| 人妻天堂综合网| 日韩三级一区 | 日本精品不卡一二三区| 国产人伦精品一区二区三区| 91色人| 免费的黄片有限公司| 欧日韩不卡视.频| 大香蕉92| 中文色综合| 色婷婷五月天| 亚洲区限制级| 日韩免费a级毛片无码a∨| 久久久婷婷| 精品少妇人妻| 校园春色综合网| 色色综合网站| 日韩色图 一区二区| 亚欧高清| 99国产精品人妻人伦| 国产丁香精品露脸视频| 亚洲综合中文字幕有码 | 久久精品一区二区| 久久婷婷热| 女上位精品在线| 久久性爱视频免费看| 中文字幕五区| 男人的天堂com| 熟女被操视频网址| 加勒比性爱成人在线| 日本十八禁免费看污网站| 国产亚洲99久久精品| 伊人久久亚洲色欲综合网站| 久久久久久电影| 欧美另类自拍 | 91白嫩| 国产高潮AA片免费看| 九九精品网| 狠狠激情综合狠狠操中文字幕| 日本新免费二区三区| 八戒午夜福利理论片| 亚洲黄a三级三级三级看三级| 国产成人无码网站在线视频| 99re9在线| 校园春色 亚洲| 国产精品内射婷婷一级二| 五月丁香啪| 日韩欧美日韩| 中文字幕加勒比海高清无码免费视频 | 久9爱精品| AV麻豆免费一区| 看免费一级在线播放毛片| 情色日播放AV| 富女玩鸭子一级毛片| 性爱av网站| 在线日韩精品一区二区三区| 六月丁香五月婷婷| 九九九九九九九九九国产精品 | 欧美色图亚洲激情| 91蜜臀熟女| 尤物网站91| 秋霞男人网| 日本高清_区二区三区| 在线电影亚洲色图| 欧美日韩成人| 2017av无码免费无线播| 99青青草国产视频| 韩国成人精品久久久免费看| 欧美综合狠| 午夜免费福利视频一区| 精品69网| 色婷婷在线视频精品导航| 欧美在线永久天堂| 欧美第一页| 丝袜大香蕉| 20cm女自慰在线日韩欧美| 美日韩在线不卡人妻| 少妇高潮对白在线观看| 成人一二三区| 欧美激情 日韩精品| 亚洲成人日韩小说| 无马一区二区| 亚洲精品久久久久久久蜜桃臀| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 天天干18禁| 青娱乐 成人娱乐在线| 最好看的中文字幕在线2018| 男女香蕉一区二区| 天美国产三级传媒| 丰满人妻一区二区三区四区| 精品97精品97| 五月丁香大香蕉| Sekablack无码一区| 亚春色色| 日han少妇无码| 欧美麻豆成人同性GⅤ在线| 一二三四区操操Av| 国产精品九9| 性爱免费视频成人| 校园春色五月天| 91色黑人少妇| 日本色婷婷| 国产又色又粗又黄又爽| 久久久亚洲精品中文字幕人妻| av大香蕉网站| 69精品少妇一区二区三区蜜桃| 天天操人人操狠狠插| 97超碰精品图片| 熟妇国产免费一区| 啊啊啊啊啊啊在线看| 欧美成人黄网色网站| 欧美巨大性舒爽顶到了| 欧美色蜜桃97| 日本亚欧爱爱| 女人的天堂大香蕉网| 日本人妻一区二区| 日韩成人电影AV| 黄色免费网| 久久99九九九九6666免费观看软件| 亚洲限制级| 激情专区综合| 嗯啊抽插大香蕉网页| 台湾佬中文娱乐网久久久久久久久久com | AV丝袜东京热| 色优久久| 99色天堂| 亚洲日韩成人性爱视频| 三级AV入口| 亚洲欧美日韩制服另类| 久久只有精品| 友优传媒精品在线一区二区| 男人的天堂三级| 美女黄码视频午夜| 麻豆精品A片免费观看| 精品精品精品| 九九色精品| 久久久性| 国产美女高潮| 夜夜骑操视频| 国产精品高潮久久AV| www.色操逼| 久综合国内精品自在自线| 国内精品久久人妻性色av| 中文字幕三四区| 国产精品国产精品国产| juliaann丝袜| av网站免费看| 中文乱码字字幕在线第5页| 欧美91色| 超碰一区二区| 九草九九九| 加勒比久久av| www久久精品| 精品久久久不卡一区二区| 精品人妻一区二区乱码一区二区| 亚洲成人碰碰| 丝袜六区| 天天摸夜夜摸| 97人人爱人人做人人乐| 亚洲熟女国产综合另类| 久久一二区四| 日本97久久久精品| 蜜桃色院一区久久 | 丁香五月社区| 熟女丝袜视频| 天天综和| 啊a一区在线| 天美欧美国产| 亚洲 欧美 另类 综合 偷拍| 五月丁香成人网| 素人播放一区| 亚洲欧美性生活| 夜夜高潮夜夜爽国产伦精品| 亚洲欧美不卡线| 黄页av| 国产视频人人网| 五十路三区在线| 国产操伦| 天天欧美色| 美中韩AV综合网| 夜夜高潮夜夜爽| 人人乐大香蕉| 爱爱动态试试看6 0秒| 亚州欧美一区| 综合五月天| 秋霞Av理论一级在线| 干妹子| 大香蕉中文在线| 60秒不遮不挡| 精品国产一区二区三区在线播出| 久久国产热视频97电影| 操美女高潮抽搐白浆| 亚洲AV无码天美传媒一区| 五月久久HDAV| 黄色十八禁| 日日躁狠狠躁天天躁精品| 97超碰久久| 精品久久久久av影院| 亚洲精品色| 中文字幕AV片| 国产欧洲精品亚洲午夜拍精品| 久久久久久九九九九九| 在线免费观看日韩一区| 2017人人操,人人摸| 极品白嫩美女白浆成人福利在线看| 激情色播| 天天干一区二区| 亚洲欧美激情小说| 欧美成人A√在线一区二区| 色噜噜狠狠色综无码久久合欧美| 午夜天堂网| 欧美色图电影| 女欧美一区二三区| 亚洲欧美国产日本一区二区三区| 清纯唯美激情四射| 欧美综合自拍亚洲综合图| 韩国一级做a久久久久| 男男H黄动漫啪啪无遮挡网站| 91色碰| 欧美视频在线第3页| 国偷自 一区二区| 欧美色九九| 免费综合亚洲中文| 国产高清不卡视频| 久久久久久久亚洲Av无码| 四虎午夜影院| 亚洲日本韩国在线| 男人久久精品| 日韩内| 欧美,日韩综合久久| 一区二区三区四区五区高清无码永久视频| 日韩中文9| 日躁天天爽爽| 欧美精品久久久久久久久88| 91电影色诱| 午夜精品久久久99热蜜桃的功能特点| 91丨国产丨白浆秘 洗澡动漫| 国产精品亚洲美女久久久久| h色99999| 久久性爱精品一区| 国产有码一区| 国内毛片欧美香蕉精品| 激情自拍 校园春色| 综合网亚洲在线| 色五月婷婷色| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 91老熟女逼| 一本色道久久综合精品婷婷| 久久久久亚洲Aⅴ无码| 美女大乳久久久久久久女人18| 九九九九九九免费视频| 久久久久成人亚洲国产| 91网站视频在线观看| 精品人妻1区| 色第一页| 欧美1区二区三区公司| 天天干天天拍| 欧美天天综合网版| 丁香五月天激情综合| 九九精品网| 婷婷丁香久久| 97在线青| 日韩中文字幕精品一区在线| 亚洲人码13| 欧美精品xxxwww| 极品一区二区三区免费| 国产美女mm131爽爽爽爽| 人伦四五区| 亚洲日韩精品在线播放| 天堂伊人久久| 久久91视频| 中文无线日韩一区| 91干熟女| 丰满搜索结果 -第18页- 久久高清无码| 欧洲特黄毛片免费看欧洲毛片| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 91偷拍欧美亚洲| 99re黄| 天美精品av| 强乱老妇中文字幕| 亚洲综合另类| 中文字幕青青草| 中文字幕在在线观看网站| 视频不卡中文字幕| 粉嫩小泬久久久一区二区| 中日韩免费看男女操逼大全| 欧洲一区二区三区免费| 欧成人精品一区二区三区| 99九九精品| 暴力av在线| 亚州操操穴网| 亚洲欧美综合网 | 亚州性色| 富二代亚洲精品99| 国产精品嫩草影院免费| 超碰 欧美| 少妇六月天| 狠狠爱大香蕉| 91在线/欧洲| 国产18精品亚洲精品| 躁躁躁日日躁2020| 亚洲图片偷拍视频区| 97欧美在线| 欧美白嫩女HD| 日韩女模中文造逼| 人人操欧美风骚| 操淫穴亚洲五月丁香 | 午夜无遮挡男女啪啪视频| 国产精品久久久久久久久久二区三区| 精品久久久久,69国产成人精| 日韩精品人妻| 成人情色综合网| 九九玖玖精品| 亚洲强奸乱伦影视网| 啊啊啊想要| 精品九九九九九九九| www.色操逼| 日韩精品国产一区二区| 久久久久国产精品人妻aⅴ天堂| 日韩美女久久一区二区三区| 99色热| 最新精品久久蜜桃 | 小日子操bb在线看| 国产成人精品网站| 国产CHASE男男GAYGA 毛多色婷婷| 欧美后入式| 330Dv国产女人终合视频极品人与兽 | 天天干一区二区| 日韩AV一起草| 国产高清午夜成人在线观看| 超碰97综合网| 96久久久精品| 日本不卡三级网在线播放| 久久五月婷| 91女色| 久久精品六区| 亚洲国产蜜臀系列在线观看| 看看小穴| 一区二区日韩欧美久久| 日韩色欲久久一二三四区| 在线中文字幕| 亚洲自拍97| 久久色AV线| 久久久999日本大片| 女性喷水高潮在线观看| 久久精品无码不卡| 蜜桃色院一区久久 | 日韩性爱播放| 操逼啊啊啊91| yellow网站免费观看日韩高清无码| 神马九九九| 亚洲色图第四色| 97硬碰| 日韩无码嘿咻黑热久| 亚洲色偷偷色噜噜狠狠99网| 97任你吞精| 操逼操逼视频操逼| 国内毛片国产欧美拍| 成人青青草原伊人| 伊人午夜福利视频| 99热8| 中文字幕第23区| 日本不卡二三区| 久久国模av| 国产成人啪一区二区| 亚洲欧美大香蕉| 92福利社视频| 发朗少妇买婬全视频中文| 免费观看啪视频| 久99| 婷婷久久综合久| 亚洲午夜av| 亚洲啪啪性视频| 性爱1区| 天天干天天操天天干天天操| 91c色| 日韩极品无码B| 91成人高清在线观看| 日本色色视频网站| 亚洲无线码欧洲精品区别| 亚洲国产精品成人综合| 屁股久久久久久| 97亚洲色图| 亚洲熟女人妻中文字幕一区二区| 91熟女.com| 中文熟女五十乱码在线| 美国三级日本三级久久99| 加勒比久久av| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 欧洲精品久久| 青青草国产一区二区三区| 亚洲色入欧美| 青女偷拍网| 舔足天天操天天射| 黄骗免费网站| 91综合天天看| 日本加勒比无码专区| 超碰精品国产无码| 黄片免费日韩| 国产曰批免费观看久久久| 国产日韩欧美三级片| 天天爽天天操| 欧美亚洲日韩16色| 91n处女在线观看| 97综合| 乱伦AVxx| 91中文在线| 射丝袜高跟鞋99| 碰人碰碰人人开房人肉|