前言

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. CentOS 设置系统时间与网络时间同步

    CentOS 设置系统时间与网络时间同步 一.Linux的时间分为(两种) System Clock(系统时间) 指当前Linux Kernel中的时间 Real Time Clock (硬件时间,简 ...

  2. 【专业技能】程序员的软件工程素养之画好 UML 时序图

    目录 前言 一.认识时序图 1.1时序图元素 1.2怎么使用 二.画好时序图 2.1一般步骤 2.2举个例子 2.3推荐工具 三.其它作用 四.文章小结 前言 笔者在本科的时候上过软件工程的专业课,也 ...

  3. Java 封装+构造器+this 小测试

    1 package com.bytezero.account; 2 3 4 public class Account 5 { 6 private int id; //账号 7 private doub ...

  4. 在.NET程序中整合微软的Playwright,使用 Playwright 的最佳实践和技巧

    Playwright 是一个由 Microsoft 开发的开源工具,用于自动化 Web 浏览器的测试和操作.它提供了一种跨浏览器.跨平台的自动化解决方案,可以在 Chromium.Firefox 和 ...

  5. Linux性能监控(一)-sar

    sar是一个非常全面的一个分析工具,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可以进行有效的分析.sar工具将对系统当前的状态进行取样,然后通过计算数据 ...

  6. go-view 依赖库

    go-view 依赖库 打包es5 由于当前node版本是 16.18 最新版本的不支持,所以装个老版的 npm install @vitejs/plugin-legacy@4.0.4 --save- ...

  7. day04-实现SpringBoot底层机制

    实现SpringBoot底层机制 Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器 1.任务1-创建Tomcat,并启动 (1)创建一个Maven项目,修改pom.x ...

  8. Android 开发Day3

    每次重新创建一个项目时,需要下载所对应的.gradle文件,但是你的磁盘里有相应的.gradle文件,随着你创建的Project越多,下载的gradle文件就会越多,占用内存就会越大 . 解决方案: ...

  9. MySQL(表相关操作)

    一 存储引擎 日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同存储方式 和处理机制(txt.word) 针对不同的数据应该有对应的不同的处理机制来存储 存储引擎就是不同的处理机制 MySQ ...

  10. WPF MVVM 集合内容更改时如何添加操作,触发通知

    用过mvvm设计WFP程序的人都知道,在我们mvvm中有一个非常重要的接口叫做 INotifyPropertyChanged 这个接口的主要作用是用于触发属性更改时向我们xaml中绑定此属性值的控件发 ...