冰块的博客

日拱一卒 不期而至

文件系统扩展属性

fs xattr

xattr extended attributes扩展属性   文件常规属性之外另行定义的可以关联到文件的(或多或少)任意属性 linux上所有主要的硬盘文件系统(Ext3/4 xfs btrfs)都支持扩展属性   概述 一个扩展属性就是与文件系统对象关联的一个”名称/值”对 名称就是普通字符串;值可以是文本,也可以是二进制数据,内核对值的内容没有限制 属性可以定义,也可以不定义...

riscv内核启动

riscv内核启动早期代码走读

arch/riscv/kernel/head.S arch/riscv/kernel/head.S 是 RISC-V架构Linux内核的一个汇编语言源文件,其作用是初始化内核和启动CPU。 具体来说,head.S包含了以下几个主要的功能: 设置栈顶指针。在RISC-V架构中,栈顶指针存储在寄存器sp中。head.S将sp设置为内核栈的起始地址,这是内核使用的栈空间。 ...

内核实时性

preempt-rt

实时内核提高实时性的关键在于降低延迟 PREEMPT_RT主要是想尽可能的达成如下两个目标 降低中断响应延迟(中断线程化) 大多数硬中断实现极为精简,每个架构相关代码都只有几十行,减少了禁中断的时间 只负责配置中断控制器,屏蔽中断请求线,确认中断,然后就返回,剩余任务都交给中断线程去处理 硬中断返回了就可以及时调度高优先级实时任务 中断线程执行的时候,开中断,也可以被抢占,...

ftrace原理与实现

Ftrace Principle and Implementation

编译阶段 gcc -pg -mfentry -mrecord-mcount (或者scripts/recordmcount.pl) 如果不加 -pg参数,后面两个参数就不会生效 gcc 5 added -mrecord-mcount (to do this for us) 如果gcc支持编译参数-mrecord-mcount,那么编译器自己生成__mcount_loc section ...

x86 nmi

kernel space processing

x86 nmi 简介 NMI(Nonmaskable Interrupt)中断之所以称之为NMI的原因是: 这种类型的中断不能被CPU的EFLAGS寄存器的IF标志位所屏蔽。 而对于可屏蔽中断而言只要IF标志位被清理(例如:CPU执行了cli指令),那么处理器就会禁止INTR Pin和Local APIC上接收到的内部中断请求。 NMI中断有两种触发方式: 外部硬件通过CPU的 N...

原子实现

不同架构原子实现

简介 在多核执行环境,原子操作指令对于内存共享内存的并发访问保护至关重要。 也是实现其它高级并发元语的基础。比如semaphore/mutex/spinlock/rwlock等。 高级并发元语锁竞争的公平性,由软件来保证。 Complex Instruction Set Computer(CISC) 复杂指令集架构会提供读-修改-写的指令,保证读写同一块内存时的原子性。 一个显著的例子就是...

完全公平调度

CFS

概念 进程优先级 内核态角度 内核使用[0~139] 这140个数字表示140种优先级 0 ~ 99 实时进程优先级 100 ~ 139 普通进程优先级 用户态角度 nice值是从用户态角度看待普通进程的优先级的一种表示方式,介于[-20 ~ 19] nice + 120 = [100 ~ 139] ,这样可以和内核普通进程的优先级一一对应起来 值越小,优先级越高。 普通进...

Kprobes

内核探针

简介 引入内核版本号v2.6.9 可以将探针插入正在运行的内核,达到调试、跟踪、性能评估,错误注入等目的 在内核绝大多数的位置动态地插入探针而不会给系统带来破坏 工作原理是修改程序二进制文本,利用断点指令替换探测点处的指令 在探测点设置断点,指定一个handler,当断点位置被触发时可以调用指定的handler 探测点其实就是一个内核登记在册的指令地址,内核会跟踪维护所有插入的探测点 在R...

CPU Topology

cpu 拓扑

把系统CPU拓扑搞清楚了,有助于理解 调度域 shed domain 和 负载均衡 load balance FSB Front Side Bus 前端总线 计算机的速度实际上取决于许多因素。这不仅仅是有多少内存或者处理器的速度; 还有一些其他方面,其中之一就是主板的前端总线的速度,就是FSB的速度 由于它通过芯片组连接处理器到存储器和其他外设,它充当主要连接路径,因此也被称为“系统总线...

Virtualization Overview

虚拟化概述

虚拟化架构 虚拟化架构可分为可虚拟化架构和不可虚拟化架构 判断一个架构是否可虚拟化,其核心就在于该架构对敏感指令的支持上。 系统虚拟化又称平台虚拟化。 Intel VT-x 和 敏感指令 Intel VT ,Intel Virtualization Technology,intel虚拟化技术的通用名称 包含VT-x x86处理器,VT-i 安腾处理,以及VT-d 支持I/O虚拟化 (di...