熊喵君的博客

Thinking will not overcome fear but action will.

Linux 内核之旅(十四):Linux内核的页表体系

0x00 前言 前文介绍过内核的虚拟内存管理的基础知识,本文继续学习下Linux内核下的页表机制 Linux 内核之旅(三):虚拟内存管理(上) 虚拟内存是 CPU 和内核使用的一个障眼法,让进程误以为自己独占了全部的内存空间(对进程而言,它们各自看到的虚拟内存空间地址范围都是一样的)。如此内核为每个进程营造出一片独立的虚拟地址空间,使得进程与进程之间相互隔离,解决了多进程...

Linux 内核之旅(十一):追踪 open 系统调用

VFS

0x00 前言 本文代码基于 v4.11.6 版本 用户进程在能够读 / 写一个文件之前必须要先 open 这个文件。对文件的读 / 写从概念上说是一种进程与文件系统之间的一种有连接通信,所谓打开文件实质上就是在进程与文件之间建立起链接。在文件系统的处理中,每当一个进程重复打开同一个文件时就建立起一个由 struct file 结构代表的独立的上下文。通常一个 file 结构,即一个...

Linux 内核之旅(十):内核数据包发送

基础知识汇总与可观测

0x00 前言 本文代码基于 v4.11.6 版本 0x01 报文发送过程 本小节使用以太网的物理网卡,以一个UDP包的发送过程作为示例,了解下具体的发包过程 socket层 1、socket():创建一个UDP socket结构体,并初始化相应的UDP操作函数 2、sendto(sock, ...):应用层的程序(Application)调用该函数开始发送数据包,该函数会进...

Linux 内核之旅(九):OverlayFS[2]

理解docker存储驱动overlay2

0x00 前言 0x01 overlayFS 基础 OverlayFS是一种堆叠文件系统,它依赖并建立在其它文件系统(如ext4fs/xfs等)之上,并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行(策略式)合并,然后向用户呈现。对于用户来说,它所见到的overlay文件系统根目录下的内容就来自挂载时所指定的不同目录按策略合并之后的结果,挂载文件的基本命令...

Linux 内核之旅(八):内核数据包接收

基础知识汇总

0x00 前言 笔者最近在研究基于ebpf的网络协议栈可观测及tracing,本文对协议栈的数据处理基础做了若干总结 本文代码基于 v4.11.6 版本 推荐阅读: Linux 网络栈接收数据(RX):原理及内核实现(2022) 图解Linux网络包接收过程 0x01 网卡的报文接收过程 一些背景知识: 网卡驱动是加载到内核中的模块,负责衔接网卡和内核的网...

Linux 内核之旅(七):虚拟内存管理(下)

内核视角的虚拟内存管理

0x00 前言 前文Linux 内核之旅(三):虚拟内存管理(上)学习了进程虚拟内存空间在内核中的布局以及管理,本文继续学习下内核态的虚拟内存空间的布局及管理 对于进程虚拟内存空间而言,不同进程之间的虚拟内存空间是相互隔离的,彼此之间相互独立(相互无感知),使得进程以为自己拥有所有的内存资源。而内核态虚拟内存空间是所有进程共享的,不同进程进入内核态之后看到的虚拟内存空间全部是一样的 ...

Linux 内核之旅(六):进程调度(CFS)

0x00 前言 本文学习下CFS调度算法(Completely Fair Scheduler,完全公平调度器)用于Linux系统中普通进程的调度,CFS调度器的目标是让所有普通进程的vruntime尽可能接近,实现公平的调度。CFS的设计理念是在真实硬件上实现理想的、精确的多任务CPU。CFS调度器和先前内核版本调度器不同之处在于没有时间片的概念,而是分配cpu使用时间的比例,若2个相...

Linux 内核之旅(五):内核的可观测技术

内核追踪的工具入门:ftrace/bpftrace/perf

0x00 前言 追踪类调试工具鸟瞰图 性能追踪 宏观:通过全链路监控找出整个分布式系统中的瓶颈组件 微观:快速地找出进程内的瓶颈函数,从(内核)代码层面直接寻找调用次数最频繁、耗时最长的函数,通常它就是性能瓶颈 linux tracing技术 1、观测数据源,分为指标&事件两类 指标观测 事件观测 0x01 ftrace 工作原理 ...

Linux 内核之旅(四):进程调度基础

进程调度的大白话

0x00 前言 Linux进程调度的本质是,在有限CPU下(进程数目远远超过CPU的数目)需要依据某种算法调度进程,有效地分配CPU的时间,既要保证进程的最快响应,也要保证进程之间的公平 0x01 进程调度基础知识 CPU视角 本小节描述下CPU视角下的CPU的工作机制,思考这个问题,CPU是如何在用户程序之间、内核代码与用户程序之间切换的?从CPU视角来看,是如何访问task...

Kubernetes 拾遗(持续补充)

0x00 前言 本文代码片段参考v1.21.1版本 0x01 基础知识 k8s基本架构 apiserver:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制,通过标准的RESTFul API,重新封装了对 ETCD 接口调用,提供系统内其他组件调用的代理入口 scheduler:负责集群资源调度,按照预定的调度策略将Pod调度到相应的nod...