原创 eventfd閱讀筆記

eventfd變種有兩個,都會調用到do_eventfd。do_eventfd裏分配了eventfd_ctx。eventfd_ctx裏重要的東東有waitqueuehead,一個count計數器。然後調用anon_inode_getfd分

原创 poll內核代碼閱讀筆記

最近開始切入GPU虛擬化,先看直通的GPU,看vfio又涉及到irqfd,irqfd又牽扯到eventfd,然後poll。發現對poll的理解還不夠深入,那就深入一下! poll的入口函數其實是sys_poll,sys_poll裏先計算m

原创 Known attacks on x86 u-state

圖是別人的,總結的很好,忍不住分享一下,如有侵權請聯繫本人刪除。

原创 main_loop_wait vs aio_poll

因爲一次性能調優過程看到這塊代碼,大致過了一下,發現主線程和iothread的內部實現還有點區別。 main_loop_wait是qemu進程中的主線程事件循環,其大致工作流程爲: 1. 觸發main_loop_poll_notifier

原创 pcid support in upstream kernel

asid在x86中最多可以用4096個,內核維護者們也嘗試了不同的方法來利用pcid,比如上一篇中提到的方法,還有的嘗試給每一個進程分配一個asid,這種方式在一些特殊的系統裏沒有效果,比如光cpu就有上千個的系統,總之各有利弊。最終內核

原创 irqfd內核代碼閱讀筆記

irqfd的入口是一個ioctl,kvm_irqfd->kvm_irqfd_assign。 kvm_irqfd_assign裏其實是對poll功能的一個簡單應用,poll可能poll多個文件,而irqfd只poll一個文件就是eventf

原创 intel IOMMU內核代碼閱讀筆記

內核中有若干個iommu的模塊,通過IOMMU_INIT組成成一個依賴樹。detect_intel_iommu最先被調用,它被用來做sanity檢查並設置好                x86_init.iommu.iommu_init

原创 vfio代碼閱讀筆記

vfio:vfio_group是iommu_group的封裝,vfio_device是device的封裝。 vfio_iommu_type1:vfio_iommu是vfio_container在本驅動的代表,vfio_domain是iom

原创 ioeventfd內核代碼閱讀筆記

讀過irqfd以後ioeventfd看就很簡單了。 ioeventfd同樣是ioctl傳入eventfd和一個io範圍,首先分配_ioeventfd,並賦值addr,size,eventfdctx,檢查這個eventfd是否已經被佔用。把

原创 QEMU + qboot + PVH vmlinux

今天看到公司內部的backport過了一遍,讓KVM支持啓動PVH的guest,挺有意思的功能,把啓動時間的優化做到了極致,不走bios,qboot直接建立memory map,並跳轉到kernel入口地址。這個入口不同於native入口

原创 pcid對內核頁表切換的優化

前一段時間碰到一個pcid相關的bug,於是就把內核對pcid的支持代碼看了一遍。年齡大了看過的東西時間一長就忘了,把要點記下來既方便自己又有利他人。我看的是公司發行版的內核uek4基於upstream的v4.1.12。upstream的

原创 X86 Spectre Variants and Mitigations

Recently, folks in my company suspect if Spectre mitigations are involved once they see a performance bug. So I make a

原创 Speculative register leakage from lazy FPU context switching(CVE-2018-3665)

有段時間沒寫技術總結了,今天寫點吧。最近還在給公司的XEN發行版打安全補丁,基本上都是猜測執行引起的後遺症。感覺有些安全問題維護者有點大驚小怪了,比如今天說的這個,浮點上下文,就算泄露了又能咋地! 標題翻譯過來就是浮點上下文延遲切換與處理

原创 x86 vt-d在linux中的應用

最近因爲一個bug涉及到DMAR的問題,網上baidu居然搜到了自己5年前寫的一篇講vt-d的水文,可笑的是因爲百度博客的嗝屁我自己都沒有了,還好這位兄臺轉載了,現在再看好多東西一下就回憶起來了,趕緊接它回家嘍。 -----------

原创 Hardware tsc bug and core dump analyzation

Recently one of the exadata cell node experienced reboot multiple times without any load. This is blocking us releasing