首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

高清大图描绘辛苦的ksoftirqd

在这个过程中内核线程ksoftirqd起到了至关重要的作用。 下面附上高清大图。...ksoftirqd在接收traffic时非常重要 其实不单从veth接收数据包会涉及到ksoftirqd,普通的物理网卡、loopback虚拟网卡的数据包接收都会涉及到这个内核线程。...借助这张图,我想应该可以比较形象地阐述这个观点:如果iptables设置得非常多的话,会导致ksoftirqd/4处理每一个skb的时间变长,进而使得它消费RingBuffer的速度变慢,对外的表现就是机器的吞吐量上不去...ksoftirqd在发送数据时也非常重要 ksoftirqd在数据包发送的时候也非常的重要。发送过程二哥没有画图,我借助一张别人的图来给大家看一下ksoftirqd在数据包发送过程中所扮演的重要角色。...当skb被放到队列后,这个线程触发了软中断,接下来就由ksoftirqd负责后续的数据发送过程。

1.1K41

深度剖析 CVM ksoftirqd0进程导致的业务请求缓慢之谜

知其然,更要知其所以然, ksoftirqd 进程会导致 CVM CPU 99%,背后的凶手是谁,让我们逐步揭开这个面纱。 业务表现:API请求变慢,影响用户访问。...现状 业务请求慢,首先查看对应服务器的资源占用情况,发现 ksoftirqd/0 进程 CPU 使用率为99.2%,是什么原因导致的呢?...ksoftirqd/0进程是一个内核线程,它负责处理第一个CPU(CPU0)上的软中断。当ksoftirqd/0的CPU使用率异常高时(在这个案例中为99.2%),通常意味着系统正在处理大量的软中断。...以下是一些排查ksoftirqd/0高CPU使用率的步骤: 检查网络流量:首先应该检查服务器是否正在处理大量的网络流量。可以使用iftop、nload或iptraf等工具来监控网络流量。...寻求专家帮助:如果以上步骤都无法确定问题所在,可能需要寻求Linux系统专家的帮助,他们可以提供更深入的系统分析和故障排除服务。 开始分析 iptraf - 交互式彩色界面的网络监控工具。

24310
您找到你想要的搜索结果了吗?
是的
没有找到

图解Linux网络包接收过程

好了,大概了解了网卡驱动、硬中断、软中断和ksoftirqd线程之后,我们在这几个概念的基础上给出一个内核收包的路径示意: 图2 Linux内核网络收包总览 当网卡上收到数据以后,Linux中第一个工作的模块是网络驱动...2.1 创建ksoftirqd内核线程 Linux的软中断都是在专门的内核线程(ksoftirqd)中进行的,因此我们非常有必要看一下这些进程是怎么初始化的,这样我们才能在后面更准确地了解收包过程。...); 当ksoftirqd被创建出来以后,它就会进入自己的线程循环函数ksoftirqd_should_run和run_ksoftirqd了。...3.2 ksoftirqd内核线程处理软中断 图9 ksoftirqd内核线程 内核线程初始化的时候,我们介绍了ksoftirqd中两个线程函数ksoftirqd_should_run和run_ksoftirqd...五 总结 网络模块是Linux内核中最复杂的模块了,看起来一个简简单单的收包过程就涉及到许多内核组件之间的交互,如网卡驱动、协议栈,内核ksoftirqd线程等。

4.1K72

不为人知的网络编程(十):深入操作系统,从内核理解网络包的接收过程(Linux篇)

Linux 2.4以后的内核版本采用的下半部实现方式是软中断,由ksoftirqd内核线程全权处理。...4.1 创建ksoftirqd内核线程 Linux的软中断都是在专门的内核线程(ksoftirqd)中进行的,因此我们非常有必要看一下这些进程是怎么初始化的,这样我们才能在后面更准确地了解收包过程。...5.2 ksoftirqd内核线程处理软中断 ksoftirqd内核线程: 内核线程初始化的时候,我们介绍了ksoftirqd中两个线程函数ksoftirqd_should_run和run_ksoftirqd...首先在开始收包之前,操作系统要做许多的准备工作(以Linux为例): 1)创建ksoftirqd线程,为它设置好它自己的线程函数,后面指望着它来处理软中断呢; 2)协议栈注册,linux要实现许多协议,...理解了整个收包过程以后,我们就能明确知道Linux收一个包的CPU开销了: 1)首先第一块是用户进程调用系统调用陷入内核态的开销; 2)其次第二块是CPU响应包的硬中断的CPU开销; 3)接着第三块是ksoftirqd

1.8K30

微软正常状态和黑屏状态 的进程占用top区别

【提示】:在linux操作系统中,一般有以下5种状态的进程信息:D:不可中断睡眠态(通常出现在IO阻塞)、R:运行态、S:睡眠态、T:已停止、z:僵尸态 第三行:%Cpu(s): 0.1 us, 0.0...si:Linux kernel通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。...当软中断出现瓶颈的时候,系统有个进行叫ksoftirqd,每个CPU都有自己对应的ksoftirqd/n(n为CPU的逻辑ID),每个ksoftirqd的内核线程都会去运行对应的ksoftirqd(函数...所以,当网络出现阻塞的时候,软件中断程序ksoftirqd肯定会出现瓶颈。此时我们可以通过ps aux|grep ksoftirqd查看ksoftirqd的瓶颈。

69410

Linux 网络子系统

网络启动的准备工作 首先在开始收包之前,Linux要做许多的准备工作: 1.创建ksoftirqd线程,为它设置好它自己的线程函数,后面就指望着它来处理软中断呢。...在这个初始化过程中,把自己的DMA准备好,把NAPI的poll函数地址告诉内核 4.启动网卡,分配RX,TX队列,注册中断对应的处理函数 创建ksoftirqd内核线程 Linux的软中断都是在专门的内核线程...= "ksoftirqd/%u", }; 当ksoftirqd被创建出来以后,它就会进入自己的线程循环函数ksoftirqd_should_run和run_ksoftirqd了。...创建ksoftirqd内核线程 linux内核通过调用subsys_initcall来初始化各个子系统,在源代码目录里你可以grep出许多对这个函数的调用。...内核线程初始化的时候,我们介绍了ksoftirqd中两个线程函数ksoftirqd_should_run和run_ksoftirqd

3.2K21

如何调试Kubernetes集群中的网络延迟问题?

— 2 — 深入挖掘 Linux 内核的网络包处理过程 为了理解为什么问题会出现在 kube 节点服务的接收端,我们来看下 Linux 是如何处理网络包的。...在最简单原始的实现中,网卡接收到一个网络包以后会向 Linux 内核发送一个中断,告知有一个网络包需要被处理。...许多年前,Linux 新增了一个 NAPI,Networking API 用于代替过去的传统方式,现代的网卡驱动使用这个新的 API 可以显著提升高速率下包处理的性能。...通过整理 Linux 内核处理网络包的路径,我们发现这个处理过程确实有可能发生停顿。如果 softirq 处理调用之间的间隔变长,那么网络包就有可能处于网卡的 RX 队列中一段时间。...现在我们可以使用一些工具来帮助我们实时追踪 Linux 内核的运行状态,为此我可以可以使用 bcc。

1.9K30

CPU软中断概念与案例

2 概念 2.1 软中断概念 linux的中断会打断CPU当前的工作,中断一般都设计的短小精悍。...但是也为了解决中断处理程序执行时间过长和中断丢失的问题,Linux的中断分为两个阶段: 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理硬件相关和时间敏感的工作 下半部用来延迟处理上半部未完成的工作...而下半部以内核线程的方式执行,并且每个CPU都对应一个软中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的软中断内核线程的名字就是 ksoftirqd/0。...不过要注意的是,软中断不只包括了刚刚所讲的硬件设备中断处理程序的下半部,一些内核自定义的事件也属于软中断,比如内核调度和RCU 锁(Read-Copy Update 的缩写,RCU是 Linux 内核中最常用的锁之一...S Oct10 0:01 [ksoftirqd/1] 这些线程的名字外面都有中括号,这说明 ps 无法获取它们的命令行参数(cmline)。

1.3K20

Linux网络包接收过程的监控与调优

Linux内核对网络包的接收过程大致可以分为接收到RingBuffer、硬中断处理、ksoftirqd软中断处理几个过程。...在Linux的整个网络栈中,RingBuffer起到一个任务的收发中转站的角色。对于接收过程来讲,网卡负责往RingBuffer中写入收到的数据帧,ksoftirqd内核线程负责从中取走处理。...只要ksoftirqd线程工作的足够快,RingBuffer这个中转站就不会出现问题。但是我们设想一下,假如某一时刻,瞬间来了特别多的包,而ksoftirqd处理不过来了,会发生什么?...对于我们的Linux的处理软中断的ksoftirqd来说,它也和番茄工作法思路类似。一旦它被硬中断触发开始了工作,它会集中精力处理一波儿网络包(绝不只是1个),然后再去做别的事情。...# sysctl -a | grep net.core.netdev_budget = 300 这个的意思说的是,ksoftirqd一次最多处理300个包,处理够了就会把CPU主动让出来,以便Linux

2.5K41

Linux网络包接收过程的监控与调优

Linux内核对网络包的接收过程大致可以分为接收到RingBuffer、硬中断处理、ksoftirqd软中断处理几个过程。...在Linux的整个网络栈中,RingBuffer起到一个任务的收发中转站的角色。对于接收过程来讲,网卡负责往RingBuffer中写入收到的数据帧,ksoftirqd内核线程负责从中取走处理。...只要ksoftirqd线程工作的足够快,RingBuffer这个中转站就不会出现问题。但是我们设想一下,假如某一时刻,瞬间来了特别多的包,而ksoftirqd处理不过来了,会发生什么?...对于我们的Linux的处理软中断的ksoftirqd来说,它也和番茄工作法思路类似。一旦它被硬中断触发开始了工作,它会集中精力处理一波儿网络包(绝不只是1个),然后再去做别的事情。...# sysctl -a | grep net.core.netdev_budget = 300 这个的意思说的是,ksoftirqd一次最多处理300个包,处理够了就会把CPU主动让出来,以便Linux

1.6K10
领券