随笔分类 - kernel 编程
摘要:在如下网络层面下,代理(比如Envoy nginx )执行额外的L7策略(Health checks, service discovery, load balancing, mutual TLS),其开销比较大,主要体现在传统的TCP/IP协议栈路径比较冗余,导致其开销比较大;就像同一主机上unix
阅读全文
摘要:在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的。 so原子操作 >原子的操作指的就是在执行过程中不会被别的代码所中断的操作。 为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执行。带lock前缀的指
阅读全文
摘要:网络报文接收流程所涉及的内容很多,如报文vlan 单播组播等过滤、mac层卸载、报文接收描述符、校验和卸载以及分离报文有效载荷和头部等,具体内容需要看 网卡datasheet, 以82599 网卡为例:http://www.intel.com/content/www/us/en/embedded/p
阅读全文
摘要:此文章 来自 http://arthurchiao.art/blog/tuning-stack-rx-zh/ [译] Linux 网络栈监控和调优:接收数据(2016) Published at 2018-12-05 | Last Update 2020-03-29 译者序 本文翻译自 2016 年
阅读全文
摘要:Q:一直知道内核和用户态的数据交互前都需要 校验地址的合法性,一般都用copy_from/to_user完成数据拷贝,那么为什么要这样呢?? A:看了一些blog以及Stack Overflow 主要说的是安全性: Linux Kernel: How does copy_to_user work?“
阅读全文
摘要:网卡都是pci设备,因此这里每个网卡驱动其实就是一个pci驱动。并且intel这里是把好几个万兆网卡(82599/82598/x540)的驱动做在一起的。V4L2 一样几个类型摄像头合并在一起 先说一下 驱动总线平台;实际上就是platform_device(设备)与platform_driver(
阅读全文
摘要:从csdn找回 , 无缘无故被封了。。当时损失不少啊!!!!!!!!! linux 摄像头驱动 :核心数据结构: /** * struct fimc_dev - abstraction for FIMC entity * @slock: the spinlock protecting this da
阅读全文
摘要:eBPF实质上是一个内核注入技术 用户态可以用C来写运行的代码,再通过一个Clang&LLVM的编译器将C代码编译成BPF目标码; 用户态通过系统调用bpf()将BPF目标码注入到内核当中,并创建必要的eBPF-maps。eBPF具有用作socket filter,kprobe处理器,流量控制调度,
阅读全文
摘要:之前聊过tcpdump 抓包原理,tcpdump使用packet 抓包,使用packet_map 完成零拷贝。但是这个零拷贝也有点假,何为假呢?从网卡到内存走的dma,哪能不能直接从dma拷贝到用户空间呢?? 使用dpdk直接从网卡中轮询数据? 如果使用现有的tcpip协议栈,反正内核态需要处理网络
阅读全文
摘要:硬中断为什么不能休眠 中断线程以及软中断解决了什么问题 软中断cb函数是否允许相应本地中断,什么时候开启中断关闭中断 什么是软中断上下文 什么是tasklet 和软中断区别 1、中断线程以及软中断属于中断下半部机制;硬件中断会打断进程,异步执行,对于 重要的进程代码来说,希望硬件中断越短越好。所以硬
阅读全文
摘要:SGI-software-generated-interrupt 软件触发中断,通常用于多核之间通信。 PPI-private-peripheral-interrupt 私有外设中断,比如本地cpu时钟中断 spi-shared-peripheral-interrupt 共用外设中断; static
阅读全文
摘要:信号量有一个很明显的缺点,没有区分临界区的读写属性,读写锁允许多个线程进程并发的访问临界区,但是写访问只限于一个线程,在多处理器系统中允许多个读者访问共享资源,但是写者有排他性,读写锁的特性如下:允许多个读者同时访问临界区,但是同一时间不能进入;同一时刻只允许一个写者进入临界区;读者和写者不能同时进
阅读全文
摘要:信号量semaphore 信号量是一种允许进程进入睡眠的同步机制,信号量是一个计数器,支持两种原语即P 和V操作,也就是down 和up 操作, /* Please don't access any members of this structure directly */ struct semap
阅读全文
摘要:内核并发来源: 1、硬件中断和异常:中断服务程序和被中断的进程可能发生并发访问资源 2、软中断和tasklet,软中断和taklet随时都可能倍调度执行,从而打断当前正在执行 进程的上下文。 3、内核抢占:调度器支持可抢占性,会导致进程和进程之间的并发访问。 4、多处理器并发执行,多处理器上可以同时
阅读全文
摘要:[1]内核抢占 如果进程在执行内核函数时允许发生内核切换(被替换的进程是正执行内核函数的进程),这个内核就是抢占的。 抢占内核的主要特点 是:一个在内核态运行的进程,可能在执行内核函数期间被另外一个进程取代 使内核可抢占的目的是减少用户态进程的分配延迟(即从进程变为可执行状态到它实际开始运行之间的时
阅读全文
摘要:POSIX的shm_open()在/dev/shm/下打开一个文件,用mmap()映射到进程自己的内存地址 System V的shmget()得到一个共享内存对象的id,用shmat()映射到进程自己的内存地址 目前这里主要看 System V的设计 这里先说一说设计思路!! 进程A和进程B 由于地
阅读全文
摘要:用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单.缺点就是使用 copy_from_user()/copy_to_user()完成内核和用户的通信, 效率其实不高, 多用在传递控制 选项 信息,不适合做大量的数据传输用户态函数:发送:int setsockopt (
阅读全文
摘要:如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的。因此诞生了弥补以上两个要求的tasklet。它具有以下特性: a)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行。 b)多个不同类型的tasklet可以并行在多个CPU上。 c)软中断是静态分配的,在
阅读全文
摘要:中断分为同步中断和异步中断。 同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,比如系统调用 异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断 按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者
阅读全文