- 博客(496)
- 资源 (4)
- 收藏
- 关注
原创 论文解读:Sleeping with One Eye Open: Fast, Sustainable Storage with Sandman
节能效果平均功耗降低39.38%,能耗降低33.36%(相比 SPDK)。在真实云负载(阿里、腾讯)下,比 Linux 节能 30.23%,比 SPDK 节能 33.36%。性能影响延迟与 SPDK 相比差异在 5% 以内(P99.9 延迟几乎一致)。显著优于 Governor、Dynamic Scheduling 的延迟表现。适用性依赖现代 CPU 的mwaitx指令(Intel 4th Gen Xeon / AMD EPYC 3rd Gen 起支持)。
2025-11-02 22:01:22
284
原创 spin_lock 能否 sleep ? 虚拟化场景
在虚拟化场景在 guest 执行 pasue 指令退出(通常是 guest 在执行 spin_lock, 自旋时使用 pause 指令暂定指令流水的执行,减少 cpu 功耗以及对总线的争用)时, 会让给其他 vcpu 运行。spin_lock 能否 sleep?
2025-10-25 22:25:16
55
原创 任务共享CPU核心的性能优化机制
而不会因为竞争相同的硬件资源而降低性能。此时,让它们共享同一个核心(如超线程环境下的两个逻辑 CPU)可以提高整体吞吐量。(防止不可信任务共享核心,避免侧信道攻击如 Spectre/Meltdown),但。等场景尤为重要,因为错误的调度策略可能导致显著的性能损失。如果两个任务(Task A 和 Task B)理想情况下,调度器应同时考虑。,动态调整任务分组策略。那么它们共享核心会导致。,因为 CPU 必须。
2025-10-25 21:24:45
872
原创 论文解读:Tai Chi: A General High-Efficiency Scheduling Framework for SmartNICs in Hyperscale Clouds
维度传统方案Tai Chi调度粒度毫秒级微秒级CP/DP 隔离静态分区 / 进程隔离vCPU/pCPU 混合虚拟化IPC 语义需 RPC 改造原生 IPC 透明保留部署侵入性高(需改 CP/DP)零代码修改硬件依赖需新特性(如 UINTR)兼容现有 SmartNIC生产适用性实验室原型已大规模商用三年。
2025-10-21 19:31:56
872
原创 fork() Causes DMA Buffer in Physical Memory to Retain Stale Data on Subsequent Writes
【代码】fork() Causes DMA Buffer in Physical Memory to Retain Stale Data on Subsequent Writes。
2025-09-08 22:24:32
775
原创 虚拟网卡收包时的头阻问题(HOL)分析与优化
通过硬件与软件的协同设计,virtio-net 的 HOL 问题可被有效控制在亚微秒级延迟范围内。跨 VM 的 virtqueue 通知机制(如 PCIe 写入)可能成为瓶颈。处理耗时长,导致 NET RX 队列溢出而丢包。
2025-08-02 16:40:21
109
转载 阿里大规模业务混部下的全链路资源隔离技术演进
内核资源隔离技术主要涉及内核中的调度、内存和 IO 这三大子系统,这些技术基于 Linux Cgroup V1 提供资源的基本隔离划分以及 QoS 保障,适用于容器云场景,同时也是大规模化混合部署方案所强依赖的关键技术。
2025-01-09 22:05:58
1102
原创 什么是 Memory-bound stalls,以及如何优化
是指在计算机系统中,程序的性能受到内存访问速度的限制,导致处理器无法高效执行指令。这种情况通常发生在 CPU 需要等待数据从内存中加载时,而不是在执行计算或处理指令时。
2024-12-20 16:51:43
1771
转载 Linux kernel preempt_notifier
preempt_notifier本质上是一种,监听的事件是线程被调度(sched out)出去(例如时间片用完了或者被强占)、线程被重新调度(sched in)。本文参考内核版本为。
2024-09-30 09:37:57
1289
转载 Notes about iommu=pt kernel parameter
配置了iommu=pt如果Hardware supports pass-through translation type,则配置pass-through translation type即可实现identity mapping,此时无需配置iommu页表;如果Hardware doesn’t support pass-through translation type,则需要配置iommu页表,使得iova与hpa 1:1映射。当=0时,依然要走iommu页表,因此性能是不如=1的。
2024-09-24 23:15:35
2601
原创 workingset protection/detection on the anonymous LRU list
Working-set protection for anonymous pages [LWN.net][PATCH v3 0/9] workingset protection/detection on the anonymous LRU list [LWN.net]14.7 跟踪LRU活动情况和Refault Distance算法-优快云博客
2024-07-16 22:55:22
1412
原创 x86 HT 与 pause 指令
Spinlock在不同的操作系统中的实现方式是不同的,不过大体原理是类似的,那就是自旋。以X86 CPU为例,一般来说某次获取轻量级锁的尝试失败后,LINUX会采用PAUSE命令等待10-数百个时钟周期再去重试,而在UNIX系统中,一个CPU时间片的长度为10毫秒,在这10毫秒中已经完全可以完成多个PAUSE等待了。主频为3.0Ghz的CPU,一个时钟周期大约是0.3纳秒,内存访问大约需要120纳秒,固态硬盘访问大约是50~150微秒,机械硬盘访问大约是1~10毫秒,网络访问最慢,大约需要几十个毫秒。
2024-05-02 23:13:11
1835
2
原创 不同虚拟化解决方案下的设备直通
在vDPA 设备直通解决方案下,由 qemu 模拟 virtio 设备的 pci 配置空间,对于不同型号的物理设备在VM 中看到的都是 virtio 设备,VM 中不使用真实设备的驱动(对于网卡使用 virtio-net 驱动),因此没有热迁移问题(核心思想:在VM中使用通用驱动程序将其与特定的宿主机上设备配置分离),vDPA 要求厂商支持将 virtio 数据面卸载到设备硬件上,这样 virtio数据面可直接从VM或容器内应用程序映射到物理设备中的VF(数据面直达 VF)。
2024-02-07 23:53:54
2221
原创 x86 clear accessed bit 后不 flush tlb
关于页表项的 accessed bit,OS 页表管理可以定期将其复位,但 TLB 一般不参与该 bit 位的管理,因为 TLB 中的页表项均为最近要访问的。例如,在 cpu load/store 内存时,如果对应的页表项不在 TLB 中,cpu 会 walk page table 并将页表项的 accessed bit 置位(如果之前已经被清除了),然后将该页表项更新到 TLB 中(这样 TLB 记录的页表项的 accessed bit 也是置位的)。
2024-01-22 23:24:29
1558
转载 反向映射rmap
在内存回收时,除了将物理页还给伙伴系统,还需要解除物理页和虚拟页面的映射关系。从 物理地址找对应的虚拟地址,就是反向映射。匿名页、ksm页面和文件页面,它们的反向映射机制不一样。这一节简单了解下这三种反向映射。内核版本linux-5.15.60。
2024-01-14 22:09:40
1598
转载 PCIe的ATS机制
而根据现今大量学术界和工业界的研究表明,决定查表性能的好坏的一个最为关键的点是TLB的预测。而ATS的机制恰好提供了一个TLB的预测卸载到源头去的机制,让用户(设备)自己根据自己自身的业务流来设计自己的预测策略,而且用户彼此之间的预测模型不会受到彼此的影响,从而大大提高了用户自己的预测的准确性。因此,对于malicious设备,或者是被入侵的设备,又或者是设备自身设计的bug,其会发出PA访问那些其没有权限访问或者是不属于其的物理地址空间,从而带来系统的isolation的破坏,系统安全的威胁等安全问题。
2023-11-27 10:56:35
3902
原创 use_mm() 在 vhost 中的使用
在内核态要访问某用户进程地址空间,本质就是使用该用户进程地址空间的页表,可使用 use_mm 切到使用用户进程的 mm,
2023-11-07 23:22:01
1731
原创 Userfaultfd
Userfaults allow the implementation of on-demand paging from userland and more generally they allow userland to take control of various memory page faults, something otherwise only the kernel code could do.For example userfaults allows a proper and more op
2023-10-27 21:51:45
1875
转载 Sub-Page Write Protection of EPT
Enable Sub-Page Write Protection Support [LWN.net][PATCH RFC 00/10] Intel EPT-Based Sub-page Write Protection Support. — Linux KernelEPT-Based Sub-page Write Protection referred to as SPP, it is a capability which allow Virtual Machine Monitors(VMM) to sp
2023-09-29 13:26:40
1742
转载 什么时候需要cpu_relax()锁
在典型的超线程处理器中,每个超线程不是一个独立的core,所以两个或者多个超线程之间仍然在竞争一些资源,如果其中一个人调用了yield,那么它会在争抢中放慢节奏,而旁边的那个兄弟会抢地更多。2, 如果是超线程CPU的机器,可以让渡CPU给其他的线程;当然,cpu_relax()的具体实现与体系架构相关,不同的体系架构实现不一样,可能只完成了上面3个功能中的1个,2个而不是全部。总之,不管具体的体系架构怎么实现,忙等里面都适合加cpu_relax(),毕竟内核多数的代码要求是跨平台的。
2023-07-21 17:42:57
2428
转载 中断实时性及处理技术简介(指令退休)
在通常情况下,CPU会在每条指令的“退休”阶段响应中断。所谓“退休”,是指一条指令已经完成了所有的操作,即将从流水线上退出。如果CPU执行了多周期指令或者执行延时不可预期指令,那么该条指令需要较长的时间才能到达“退休”阶段。此时的中断响应速度会受到极大影响,大幅降低系统的实时性。在中断快速响应模式下,CPU无需等待指令退休,即可直接响应中断。这一机制可以打断较长执行延时的指令,从而提高中断响应的速度。
2023-07-09 23:00:23
2313
原创 DMAR IOMMU页表错误
而实际上这个 iova 地址是一个无效的地址,即 dma 访问到了一个已经释放的 virtio desc table 中存储的地址,显然该地址的页表没有设置,设备在进行 DMA 操作的时候,检查页表失败,在 IOMMU 的错误处理函数中会打印详细信息。如下,出现 DMAR 错误,iova 0x9e4ef2373000 的 PTE 页表没有设置,
2023-07-01 15:28:01
3417
转载 x86 LOCK 指令前缀
在中的章节中给出LOCK指令的详细解释LOCK是一个指令前缀,也就是说LOCK会使紧跟在其后面的指令变成原子指令(atomic instruction)。LOCK指令前缀只能加在以下这些指令前面。
2023-06-16 23:54:13
3554
原创 vt-d posted interrupt
posted 模式整个过程是由硬件做的,设备中断如果是 msi, 那先到IOMMU, IOMMU 根据 msi 信息为索引,查找中断重映射表,然后根据 posted descriptor 基址修改 posted descriptor 中的中断位,当 IOMMU 修改 posted descreptor 后,会给相应 vCPU 所在的物理 CPU 发送一个中断。同时创建VM时, posted descriptor 基地址会呈现在VMCS中。
2023-06-10 12:13:17
1647
转载 x86 架构下 StoreLoad 屏障
从图例可以看到第六步assert失败的核心原因在于,cpu0上缓存过b,所以cpu0执行b = 1k立马写入cache,然后线程B所在的cpu1执行while(b==0)迅速跳出,然后执行 a = 1,由于此时 a 还在cpu0的store buffer中,所以导致assert失败。CPU1 执行assert( a == 1),发现a 不在cache中,向CPU0发送read消息,CPU0的cache中存在a,所以CPU1获取到a = 1,assert成功。1,为什么CPU要乱序执行,难道是考虑性能吗?
2023-05-07 19:29:49
1939
原创 PCIE MSI-X Capability
PCIE的MSI-X相关信息存在两个地方,一个是PCIE Capability中,存放MSI-X基本信息,主要包含MSI-X Table所在BAR地址相关信息(访问的MSI-X Table关键),另外一个是MSI-X Table,存放在bar空间中,标识中断的msg addr及对应的msg data(即中断vector)。pci_find_capability() 断定一个设备是否支持给定PCI权能,返回在设备PCI配置空间内所请求权能结构的地址,如果设备不支持这种权能,则返回0;
2023-04-07 23:18:08
1748
转载 Architectural and OS support for Virtual Memory
Architectural and OS support for Virtual Memory
2022-10-29 22:03:13
807
原创 sfence.vma
清除TLB缓存所有现代的处理器都用地 址转换缓存(通常称为 TLB,全称为 Translation Lookaside Buffer)来减少这种开销。为了 降低这个缓存本身的开销,大多数处理器不会让它时刻与页表保持一致。这意味着如果操 作系统修改了页表,那么这个缓存会变得陈旧而不可用。S 模式添加了另一条指令来解决 这个问题。这条sfence.vma 会通知处理器,软件可能已经修改了页表,于是处理器可以 相应地刷新转换缓存。它需要两个可选的参数,这样可以缩小缓存刷新的范围。一个位于 rs1,它指...
2022-05-02 23:15:57
5129
1
原创 KVM Interrupt Virtualization
KVM为每个虚拟机维护一个pic主中断控制器、一个pic从中断控制器以及一个ioapic控制器(使用pic 加 ioapic 的两种芯片的模拟组合,来控制中断信息),ioapic根据自身维护的重定向表pci irq routing table格式化出一条中断消息,把中断消息发送给local apic(lapic),每个vcpu维护一个lapic控制器,每个vcpu的lapic控制器则模拟了主要的apic寄存器:中断请求寄存器IRR,中断屏蔽寄存器IMR,中断服务寄存器ISR,EOI。同时每个虚拟机有一张中断
2022-04-09 16:27:26
1361
原创 KVM EPT页表
KVM在vcpu创建时创建和初始化MMU,kvm_vm_ioctl kvm_vm_ioctl_create_vcpu kvm_arch_vcpu_create kvm_mmu_create(vcpu) vcpu->arch.mmu = &vcpu->arch.root_mmu; vcpu->arch.walk_mmu = &vcpu->arch.root_mmu; __kvm_mmu_cr
2022-03-31 22:03:46
1731
原创 MMIO, RAM PageTable of Guest
在 Guest系统中IO访问可能分三种:1,guest 内部执行PMIO指令,guest 会触发VM_EXIT,退出状态是KVM_EXIT_IO;2,guest内部执行对MMIO空间的访问,guest 会触发VM_EXIT,退出状态将是KVM_EXIT_MMIO;3,guest 内部对ram物理内存的访问,会通过EPT硬件(x86)转化为HPA,进而完成对物理内存的读写(但如果是第一次访问由于EPT页表不存在,会发生EPT_VIOLATION,触发VM_EXIT进而建立EPT表项);MMIO
2022-03-20 20:57:17
1239
lemoal-nvme-polling-vault-2017-final_0.pdf
2020-03-13
个人总结 - m25p80.c debug on Micron spi nor_flash.pdf
2017-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅