前言

linux 性能的自我学习。

正文

什么是软中断呢?

举一个网络的例子。

linux 将中断处理过程分为两个阶段:

上半部用来快速处理中断,他在中断禁止模式下运行,注意是处理跟硬件紧密相关或时间敏感的工作。

下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。

比如网卡接收到数据包后,会通过硬件中断的方式通知内核有新的数据到了。这时候,内核就应该调用中断处理程序来响应它。

对于上半部分来说,就是快速处理,把网卡的数据读取到内存中,然后更新硬件寄存器的状态,最后发一个软中断信号,通知下半部分进一步处理。

下半部分被软中断唤醒后,需要从内存中找到网络数据,再按照协议栈,对数据进行逐层解析和处理,直到把它送到了应用程序。

实际上,上半部分会打断cpu正在执行的任务,然后立即执行中断处理程序。下半部分以内核线程的方式执行,并且每个cpu都对应一个软中断内核线程,名字为: ksoftirqd/cpu 编号

软中断不仅仅是硬中断的下部分,一些内核自定义时间也是软中断,比如内核调度和rcu锁。

怎么查看软中断呢?

这里有10个不同的中断类型。

下面开始实验。

实验

需要用到的工具是:

docker sysstat sar hping3 tcpdump 等工具。

  1. sar 是一个系统活动报告工具,既可以实时查看系统当前的活动,又可以配置保存和报告历史数据。

  2. hping3 是一个可以构造tcp/ip 协议数据包的工具,可以对系统进行安全审计、防火墙测试等。

  3. tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。

hping3 在centos 安装方式:

创建本地安装目录
mkdir -p /usr/local/hping && cd /usr/local/hping
下载并解压
wget https://github.com/antirez/hping/archive/master.zip && unzip master.zip && cd hping-master
安装依赖包
yum install -y libpcap-devel yum install -y gcc gcc-c++ yum install -y tcl tcl-devel
设置软连接
ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h
进行安装
./configure && make strip && make install
测试查询版本
hping3 -v

然后执行:

hping3 -S -p 80 -i u100 192.168.62.136

这个时候你就发现变慢了:

 curl http://192.168.62.136:5555

变慢一般查看cpu:

看起来似乎正常。

查看软中断:

watch -d cat /proc/softirqs

分析网卡情况:

sar -n DEV 1

第一列:表示报告时间

第二列: iface 表示网卡

第三四列: rxpck/s 和 txpck/s 分别表示每秒接收、发送的网络帧数,也就是pps

第五、六列: rxkb/s 和 txkb/s 表示每秒接收、发送的字节数,也就是bps。

这里就看到一个问题:

比如说接收了12690.54 包,但是txkB/s 只有669.21k。

还有一个是接收了6550.00,发送是12690.54,如果是tcp的话,那么应该是收发个数差不多,因为tcp的确认机制。

然后可以说,接收的都是小包。

然后就可以通过tcpdump 来确定是什么问题,可以抓取到很多s包,确定是syn flood 攻击。

下一节快速定位问题的手段

linux 性能自我学习 ———— 软中断 [五]的更多相关文章

  1. 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习

    3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 ​ 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...

  2. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  3. Linux性能优化从入门到实战:01 Linux性能优化学习路线

      我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等.   把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...

  4. Linux网络课程学习第五天

    学习心得: 通过本章节课学习收获很多,不仅学会了使用vim编辑器以及编写简单的shell脚本.从一个从未接触过Linux系统的我一下学会并掌握了这么多自我感觉进步还是挺大的.但是还是要坚持学下去,毕竟 ...

  5. Linux运维学习第五周记

    休惊岁岁年年貌 且对朝朝暮暮人 细雨晴时一百六 画船鼍鼓莫违民 雨生百谷,春雨贵如油 第五周学记 这周主要学习了九三级磁盘.存储相关知识和Linux文件系统以及计算机网络的内容 磁盘和文件系统 磁盘结 ...

  6. 鸟哥的linux私房菜学习-(五)补充:重点回顾

    为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力: 默认的图形模式登陆中,可以选择语系以及作业阶段.作业阶段为多种窗口管理员软件所提供,如 ...

  7. Linux网络编程学习(十一) ----- 五种I/O模式(第六章)

    1.五种I/O模式是哪几个? 阻塞I/O,非阻塞I/O,I/O多路复用,信号驱动I/O(SIGIO),异步I/O 一般来讲程序进行输入操作有两个步骤,一是等待有数据可读,二是将数据从系统内核中拷贝到程 ...

  8. Linux 网卡驱动学习(五)(收发包具体过程)【转】

    转自:https://blog.csdn.net/xy010902100449/article/details/47362787 版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...

  9. Linux内核驱动学习(五)KThread学习总结

    文章目录 简介 例程 运行结果 参考 简介 使用内核线程需要包含头文件#include <linux/kthread.h>,下面整理了一下常用的api接口,如下表格所示: 函数 功能 st ...

  10. Linux系统自我学习的一些笔记1

    远程连接: 1.查看IP地址  ip addr 2.远程登陆linux系统 ssh  主机名@IP地址 文件操作: 新建文件touch 例如:touch test.txt (创建单个文件) 例如:to ...

随机推荐

  1. C++ //统计元素个数 //统计内置数据类型 //统计自定义数据类型

    1 //统计元素个数 2 3 #include<iostream> 4 #include<string> 5 #include<vector> 6 #include ...

  2. 以Servlet来解释 抽象实现类

    在 Java Servlet API 中: Servlet 接口定义了一个 Servlet 的基本行为.这个接口是抽象的,因为它包含抽象方法,比如 service(), init(), 和 destr ...

  3. Java与sql中的字符串表示

    在 Java 中,双引号 "" 用于表示字符串字面量,而单引号 '' 用于表示字符字面量.这意味着在 Java 中,您可以使用双引号来包围包含任意数量字符的字符串,包括零个字符(空 ...

  4. C++标准库字符串流sstream

    sstream与strstream 在C++有两种字符串流,一种在<strstream>中定义,另一种在<sstream>中定义,两者的区别如下: strstream里包含st ...

  5. MYSQL 是如何保证binlog 和redo log同时提交的?

    MYSQL 一个事务在提交的时候能够保证binlog和redo log是同时提交的,并且能在宕机恢复后保持binlog 和redo log的一致性. 先来看看什么是redo log 和binlog,以 ...

  6. 你是怎么处理vue项目中的错误的?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.错误类型 任何一个框架,对于错误的处理都是一种必备的能力 在Vue 中,则是定义了一套对应的错误处理规则给到使用者,且在源代码级别,对 ...

  7. demo介绍:uni-app统合--各类大转盘demo介绍

    这里给大家介绍下我做的一个uni-app的demo:抽奖系统 废话不多说直接上效果图: 线上案例: 首页: 大转盘抽奖页面: 轮播机抽奖页面: 九宫格抽奖页面: 翻牌抽奖页面: 奖品列表页面: 抽奖的 ...

  8. WPF 组件间通信 MVVM 进行解耦

    假设有这样一个需求,有这样一个聊天界面,主界面是选项卡,其一选项卡内部是真正的聊天列表和聊天界面,我们需要实时的在主界面显示未读消息的数量 假设我们已经有方法可以拿到未读消息的数量,那么如何在主界面的 ...

  9. C# 委托(delegate)本质理解

    代码如下,很简单 namespace Delegate { class Program { delegate void SayHi(); void SayHi_1() { Console.WriteL ...

  10. Spring Cloud Alibaba服务的注册与发现之Nacos部署

    1.Nacos官网介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理.Nacos 帮助您更敏捷和容 ...