冰块的博客

日拱一卒 不期而至

sched domain & group

调度域和调度组

简介 Linux内核引入调度域(sched domain)和调度组(sched group)的目的是优化任务调度,以更好地适应多核和多处理器系统的复杂性。 这两个概念提供了一种层次结构,允许操作系统更有效地管理和调度任务,以提高系统的整体性能和响应性。 cpu 拓扑 分三个级别 Package (PKG) Multi-Core Cache (MC) Simultaneou...

CPU Isolation

CPU隔离

简介 cpu隔离是个很有用的特性。目的是最小化指定cpu上的内核活动,这些内核活动可能导致延迟,降低性能。 有些高带宽网络应用或者实时系统,对延迟和性能有特殊要求,必须独占cpu,不能受到任何其它系统活动的干扰。 比如DPDK超高的网络带宽不允许发生丢包或者抖动。 系统活动比如,中断、timer、内核线程(比如workqueues),页面回收等, 这些异步的事件处理对于维护系统正常运行...

riscv PMP内存保护机制

riscv pmp momery mechanism

PMA 简介 PMA,即Physical Memory Attributes,物理内存属性 完整的系统物理内存映射包含各种地址空间范围: 常规内存区域 MMIO区域 空洞 每个内存区域有自己的访问属性,可能是如下特性的某个集合 支持/不支持 读取、写入或者执行 支持/不支持 子字或者子块访问 支持/不支持 原子操作操作 支持/不支持 缓存一致性 具有...

iommu概述

kernel iommu

本文翻译自 An Introduction to IOMMU Infrastructure in the Linux Kernel 概述 The Input-Output Memory Management Unit (IOMMU) 是内存控制器中的一个硬件组件,用于将设备虚拟地址(也可以称为I/O地址或设备地址)转换为物理地址。 这种硬件辅助的I/O地址转换显著提高了虚拟环境中的系...

riscv mmu 介绍

riscv mmu instroduction

MMU负责将虚拟地址转换为物理地址, 实现虚拟内存的管理。 在SUPERVISOR模式下,所有虚拟内存地址都经历单级地址转换过程,以将其转换为相应的物理地址; 当存在HYPERVISOR时,虚拟地址可以经历两级地址转换过程: 在第一阶段中,客户虚拟地址(GVA)被转换为客户物理地址(GPA), 在第二阶段中,GPA被转换为监管者物理地址。这两个阶段也被称为VS阶段和G阶段的转换。 五级...

riscv plic中断控制器

riscv plic

简介 PLIC(platform-level interrupt controller),平台级中断控制器。 PLIC将各种设备中断复用到Hart上下文的外部中断线上,具有硬件支持的中断优先级。 PLIC支持最多1023个中断(0号中断保留) 和15872个上下文,但实际中断和上下文的数量取决于PLIC的实现。 PLIC规范中声称支持15872个上下文,这个数字是基于对多个中断目标和...

riscv原子指令

riscv atomic instructions

简介 原子操作需要处理器提供硬件支持,不同的处理器体系结构在原子操作上会有不同的实现。 对riscv架构来说,就是A扩展,也被称为原子指令集扩展。 包含了一些指令,可以原子地读取、修改和写入内存,主要是为了在同一内存空间中的多个RISC-V处理器之间提供同步。 A扩展提供了两种类型的原子指令,分别是原子fetch-and-op内存(AMO)指令和load-reserved/store-c...

高速缓存的别名和同名问题

cache alias and homonyms

高速缓存 三种映射方式 直接相连映射 全相连映射 组相连映射 三种缓存匹配方式 VIVT 虚拟索引虚拟标记 VIPT 虚拟索引物理标记 PIPT 物理索引物理标记 地址高位部分是标记,中间位置是索引,低位部分是cache行内地址。 索引就是用于查找cache行匹配的行号,和行内地址共同定位cache中的数据。 根据索引找到cache行,就可以获取到...

内存屏障

memory barriers

MESI协议 该协议用于解决高速缓存一致性问题,理解该协议可以参考文章末尾链接里的论文。 这里只摘录其中两个和使无效队列相关的消息 失效(Invalidate):失效消息包含需要失效的缓存行的物理地址。 所有持有该缓存行副本(状态为Shared或Modified)的其他缓存,必须将对应缓存行状态置为Invalid,并发送Invalidate Acknowledge。 失效确认(Inval...

git常用命令

Common Git Commands

分支操作 git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git git tag // 查看所有发布版本 git checkout v6.4.9 // 切换分支 git checkout -b develop // 创建并切换到develop分支 git bran...