熊喵君的博客

Thinking will not overcome fear but action will.

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

内核视角的虚拟内存管理

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

BCC with libbpf

BCC all in one

0x00 前言 测试机内核版本5.4.119-1-tlinux4-0008,python版本3.6.8 代码来源: BCC-tools的实现 eunomia-tools 0x01 基础 0x02 文件系统相关 filetop TID COMM READS WRITES R_Kb W_Kb T FILE 13...

BCC with python3

BCC all in one

0x00 前言 本小节汇总下基于python开发BCC程序的相关知识点,基于tag-v0.35.0,不分代码来自官方最新版本 参考: BCC工具示例1 BCC工具示例2 bcc Python Developer Tutorial bcc Reference Guide 0x01 基础 C开发BPF内核态代码 在编译之前,对BPF程序进行rewr...

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

EBPF 内核态代码学习(三):基于 XDP 技术的ACL/Firewall系统实现

基于ebpf技术实现的XDP应用分析

0x00 前言 本文分析下基于XDP技术的防火墙相关实现细节,主要涉及如下项目: oxdpus xdp-firewall TyrShield 0x01 oxdpus项目 oxdpus是一个基于XDP技术实现的包过滤项目,支持下面指令: add Appends a new IP address to the blacklist attac...

Linux HIDS 开发场景收集

0x00 场景收集 如何根据task_struct结构,获取到事件对应运行二进制的绝对路径? 如何获取进程打开的文件fd列表? 如何根据进程打开的文件fd列表,并且判断其是否为socket网络句柄? 如何根据task_struct结构,获取该进程对应的进程链信息(类似pstree)? 如何获取某个进程(task_struct)对应的socket五元组信息(如果打...

Linux 内核之旅(二):VFS(基础篇)

VFS的基本数据结构及关系

0x00 前言 Linux 支持多种文件系统格式(如 ext2、ext3、reiserfs、FAT、NTFS、iso9660 等),不同的磁盘分区或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以 mount 到某个目录下,使开发者看到一个统一的目录树,各种文件系统上的目录和文件,读写操作用起来也都是一样的。Linux 内核在各种不同的文件系统格式之上做了一个抽象层,使得文件...