冰块的博客

日拱一卒 不期而至

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

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...

riscv异常处理流程

riscv kernel handle exception

异常简介 riscv架构上异常分为两类,同步异常和异步中断,二者均属于狭义上的具体的异常类型。 这个从内核代码实现也可以看出来,中断和异常处理有统一入口handle_excpetion 。 handle_excpetion会根据scause寄存器判断具体属于异常还是中断。 后续所说异常统指这两种异常,除非明确指明是具体类型异常或者具体类型中断。 从功能上划分,riscv定义...

拷贝大文件时系统异常

dts cma配置不当引起的panic

问题背景信息 内核版本号5.4.74 设备2G内存,使能CONFIG_TMPFS和CONFIG_SHMEM,使用内存文件系统 系统起来之后bash下执行cp file1 file2拷贝命令时panic,文件大小200M左右 问题基本必现,每次异常地址都是0xffff000010080000 无论何种场合,执行用户态命令都不应该导致系统panic,除非内核或者驱动本身有问题。 pan...

opensbi 启动流程

fw_base.S 和 sbi_init代码分析

主要关注 fw_base.S 和 sbi_init firmware/fw_base.S ... // 为每个hart 都准备好了各自的struct sbi_scatch call sbi_init fw_jump.elf编译命令 riscv64-unknown-linux-gnu-gcc -g -Wall -nostdlib -fno-omit-frame-pointer...

Preempt-RT 优先级继承

Priority Inheritance

Preempt-RT 是一个用于嵌入式系统的补丁,旨在提高 Linux 内核的实时性能。 实时系统需要能够在实时约束下及时响应事件,同时保证系统稳定和可靠性。 Preempt-RT 补丁在 Linux 内核中引入了实时抢占,允许内核在更短的时间内响应实时事件,提高了系统的实时性能。 优先级反转 优先级反转是一个经典的实时系统问题,可能会影响实时系统的性能。 它发生在低优先级任务持有系统资源...

网络协议栈知识点

kernel network protocol

套接字缓冲区 sk_buff 套接字缓冲区,用于内核协议栈管理报文收发的结构体,在网络实现的各个层次之间交换数据,而无需来回复制分组数据,对性能提高很可观。 套接字缓冲区管理方式 struct sk_buff { ... }; struct sk_buff_head { /* These two members must be first to match sk_buff...

riscv相关组件编译

qemu启动riscv镜像

编译 qemu-system-riscv64 git clone https://github.com/qemu/qemu cd qemu git checkout v7.2.0 mkdir build cd build ../configure --prefix=/home/linux/riscv/qemu-7.2.0-install/ \ --target-list=riscv3...

系统时间慢于世界时间

System time is slower than real-world time

2.6.26内核 loongson3a2000系统上遇到一个系统时间比世界时间慢的问题 内核中mips_hpt_frequency全局变量记录了CPU主频 cpu主频是在bootware初始化硬件的时候,写入倍频系数到寄存器,这就决定了cpu的工作频率,也就是时钟周期 也决定了counter计数器的cycle递增速率,每秒钟递增多大数值   系统启动时,内核从RTC real-...