精华内容
下载资源
问答
  • 查看linux 中断

    千次阅读 2017-11-26 20:46:00
    这篇文章主要是介绍如何详细的查看linux中断信息。 涉及linux中断原理部分请参考:http://book.51cto.com/art/200912/168622.htm 一、利用sysstat 中的工具包mpstat ps:图片是截取个人电脑,所以没什么压力:...

    这篇文章主要是介绍如何详细的查看linux软中断信息。

          涉及linux软中断原理部分请参考:http://book.51cto.com/art/200912/168622.htm

          一、利用sysstat 中的工具包mpstat

          ps:图片是截取个人电脑,所以没什么压力:

    16时32分48秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    16时32分49秒 all 4.52 0.00 1.26 0.00 0.00 0.00 0.00 0.00 94.22
    16时32分49秒 0 5.88 0.00 2.94 0.00 0.00 0.00 0.00 0.00 91.18
    16时32分49秒 1 11.11 0.00 1.01 0.00 0.00 0.00 0.00 0.00 87.88
    16时32分49秒 2 1.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 97.00
    16时32分49秒 3 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 98.00
    

          其中%irp  表示有多少中断请求发生,%soft 表示实际cpu正在处理的中断请求在生产环境中,可以保留平常时候的这些记录,在负载高的情况下,拿出来对比!

          二、查看文件/proc/interrupts (这个主要是硬件中断)

          文件标题为:

    irp的序号  各自cpu上发生的中断次数  可编程中断控制器   设备名称(request_irq的dev_name字段)

                     CPU0       CPU1       CPU2       CPU3       
      0:         42         63          0          2   IO-APIC-edge      timer
      1:        752         27       3482          3   IO-APIC-edge      i8042
      8:          1          0          0          0   IO-APIC-edge      rtc0
      9:          0          4          0          0   IO-APIC-fasteoi   acpi
     12:    2161987         41         52         42   IO-APIC-edge      i8042
     14:      75884       2900       2898       2877   IO-APIC-edge      ata_piix
     15:         83       9438       9104        100   IO-APIC-edge      ata_piix
     16:        159        101        178        111   IO-APIC-fasteoi   ehci_hcd:usb1, snd_hda_intel
     17:     682317         17         16         22   IO-APIC-fasteoi   eth1
     18:          0          0          0          0   IO-APIC-fasteoi   ips
     19:          0          0          0          0   IO-APIC-fasteoi   ata_piix
     23:         34         33         28         31   IO-APIC-fasteoi   ehci_hcd:usb2
     44:          0          0          0          0   PCI-MSI-edge      pciehp
     45:          0          0          0          0   PCI-MSI-edge      eth0
     46:          3          4          3          3   PCI-MSI-edge      mei
     47:      48497          7          6          6   PCI-MSI-edge      i915
     48:         63         66         47         64   PCI-MSI-edge      snd_hda_intel
    NMI:        972        930        262        258   Non-maskable interrupts
    LOC:    1092994     969807     894570     872319   Local timer interrupts
    SPU:          0          0          0          0   Spurious interrupts
    PMI:        972        930        262        258   Performance monitoring interrupts
    IWI:          0          0          0          0   IRQ work interrupts
    RES:    3557255    3651095     658468     682760   Rescheduling interrupts
    CAL:        579        542        625        601   Function call interrupts
    TLB:      10116      25398       8181      11007   TLB shootdowns
    TRM:          0          0          0          0   Thermal event interrupts
    THR:          0          0          0          0   Threshold APIC interrupts
    MCE:          0          0          0          0   Machine check exceptions
    MCP:         66         66         66         66   Machine check polls
    ERR:          0
    MIS:          0
    
         三、查看/proc/softirqs (主要是软中断)
                        CPU0       CPU1       CPU2       CPU3       
              HI:          0          0          0          0
           TIMER:    5455311   39758805     357638     451879
          NET_TX:         24         15         18          5
          NET_RX:     118170       1220       1370        993
           BLOCK:      86329       3305      14438       2936
    BLOCK_IOPOLL:          0          0          0          0
         TASKLET:     877029         44       5632         23
           SCHED:     344191     308721     186694     191592
         HRTIMER:       4081       3910       1393       1198
             RCU:     400523     362823     188456     192853
    
         欢迎各位讨论!
         实战参考地址:
         http://blog.netzhou.net/?p=152
         http://blog.yufeng.info/archives/2037 
    
    
    
    
    本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1032507,如需转载请自行联系原作者
    展开全文
  • linux查看中断请求记录 IRQ

    万次阅读 2015-08-03 14:43:07
    linux查看中断请求记录。通过cpu的中断请求的响应,可以看出cpu都在为哪些设备干活,干的活有多少量等信息。 [~]$ cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 1383283707 0 0 0 IO-A

    linux下查看中断请求记录。通过cpu的中断请求的响应,可以看出cpu都在为哪些设备干活,干的活有多少量等信息。

    [~]$ cat /proc/interrupts 
               CPU0       CPU1       CPU2       CPU3       
      0: 1383283707          0          0          0    IO-APIC-edge  timer
      1:          3          0          0          0    IO-APIC-edge  i8042
      3:         11          0          0          0    IO-APIC-edge  serial
      8:          1          0          0          0    IO-APIC-edge  rtc
      9:          0          0          0          0   IO-APIC-level  acpi
     12:          4          0          0          0    IO-APIC-edge  i8042
     14:         25          0          0          0    IO-APIC-edge  ide0
     82:         85          0          0          0   IO-APIC-level  uhci_hcd:usb5
     90:         96          0          0          0   IO-APIC-level  uhci_hcd:usb6
    114:    1067499          0          0          0       PCI-MSI-X  cciss0
    130:   96508322          0          0          0         PCI-MSI  eth0
    138:     384295          0          0          0         PCI-MSI  eth1
    169:          0          0          0          0   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb2
    177:          0          0          0          0   IO-APIC-level  uhci_hcd:usb3
    185:          0          0          0          0   IO-APIC-level  uhci_hcd:usb4
    NMI:      11370       6399       6845       6300 
    LOC: 1383174675 1383278112 1383174810 1383277705 
    ERR:          0
    MIS:          0


    注释:

    1. 对部分IRQ标识的解释

    Interrupt as in /proc/interrupts        Name as it appears in ftrace log
    NMI: Non-maskable interrupts           : NMI_VECTOR
    LOC: Local timer interrupts            : LOCAL_TIMER_VECTOR
    SPU: Spurious interrupts               : SPURIOUS_APIC_VECTOR
    PMI: Performance monitoring interrupts : <not added>
    PND: Performance pending work          : LOCAL_PENDING_VECTOR
    RES: Rescheduling interrupts           : RESCHEDULE_VECTOR
    CAL: Function call interrupts          : CALL_FUNCTION_VECTOR or
                                             CALL_FUNCTION_SINGLE_VECTOR
    TLB: TLB shootdowns                    : INVALIDATE_TLB_VECTOR_START to
                                             INVALIDATE_TLB_VECTOR_END
    TRM: Thermal event interrupts          : THERMAL_APIC_VECTOR
    THR: Threshold APIC interrupts         : THRESHOLD_APIC_VECTOR
    MCE: Machine check exceptions          : <not added>
    MCP: Machine check polls               : <not added>
    ERR:                                   : ERROR_APIC_VECTOR
    MIS:                                   : <not added>
    PLT: Platform interrupts               : X86_PLATFORM_IPI_VECTOR

    2. IO-APIC-edge  timer

    此处的timer为系统定时器.

    展开全文
  • OpenEuler20.03 统计缺页中断次数 本文参考Centos7实现缺页中断具体步骤 下载解压linux-4.19.90版本linux内核 下载linux-4.19.90.tar.xz压缩包发送到/usr/src目录下(可以用filezilla) 进入/usr/src目录解压缩 tar -...

    OpenEuler20.03 统计缺页中断次数

    本文参考Centos7实现缺页中断具体步骤

    下载解压linux-4.19.90版本linux内核

    下载linux-4.19.90.tar.xz压缩包发送到/usr/src目录下(可以用filezilla)

    进入/usr/src目录解压缩

    tar -xvJf linux-4.19.90.tar.xz
    

    解压结果

    解压结束后进入linux-4.19.90目录中

    修改源码

    修改arch/x86/mm/fault.c文件

    利用grep找到__do_page_fault的位置

    cat -n arch/x86/mm/fault.c | grep __do_page_fault
    

    __do_page_fault
    利用vim编辑器进入文件中在该函数上定义pfcount变量
    定义pfcount
    在__do_page_fault函数中找到good_area,令pfcount自增
    pfcount++

    修改include/linux/mm.h文件

    在extern int page_cluster;语句之后插入

    extern unsigned long volatile pfcount;
    

    mm.h

    修改kernel/kallsyms.c文件

    在kernel/kallsyms.c文件尾插入EXPORT_SYMBOL(pfcount);

    echo 'EXPORT_SYMBOL(pfcount);'>>kernel/kallsyms.c
    

    编译内核

    确认自身的OpenEuler空闲空间足够(建议提前扩展磁盘容量)

    安装ncurses-devel elfutils-libelf-devel openssl-devel

    yum install ncurses-devel elfutils-libelf-devel openssl-devel -y
    

    这里部分OpenEuler的yum工具可能并不能正常使用,用下面的代码覆盖掉
    /etc/yum.repos.d/openEuler_x86_64.repo并执行(如果该目录下有其他文件建议删除掉)
    (如果yum makecache不能正常执行检查自己的dns是否有问题)

    yum makecache
    
    #generic-repos is licensed under the Mulan PSL v2.
    #You can use this software according to the terms and conditions of the Mulan PSL v2.
    #You may obtain a copy of Mulan PSL v2 at:
    #    http://license.coscl.org.cn/MulanPSL2
    #THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
    #IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
    #PURPOSE.
    #See the Mulan PSL v2 for more details.
    
    [OS]
    name=OS
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
    
    [everything]
    name=everything
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler
    
    [EPOL]
    name=EPOL
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/EPOL/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
    
    [debuginfo]
    name=debuginfo
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/debuginfo/$basearch/RPM-GPG-KEY-openEuler
    
    [source]
    name=source
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/source/
    enabled=1
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler
    
    [update]
    name=update
    baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/update/$basearch/
    enabled=0
    gpgcheck=1
    gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
    

    产生.config文件

    (如果不是第一次编译或者编译出错需执行make mrproper)

    make menuconfig
    

    进入如下界面
    编译内核
    进入Enable loadable module support
    设置参数
    如果Module signature verification为*号则按空格取消,其余不变,保存退出(不然可能会出现证书验证的问题)

    编译内核

    安装bc

    yum install bc -y
    

    在主目录下执行make(后面的j8为8线程,单make大概需编译3小时,多线程可减少编译时间,可结合自己电脑配置决定线程数)

    make -j8
    

    等待make结束后(内核和模块都会被编译,因此不需要再单独编译模块)

    安装模块

    make INSTALL_MOD_STRIP=1 modules_install
    

    安装内核

    make INSTALL_MOD_STRIP=1 install
    

    安装完成

    查看

    重启

    编写读取pfcount与jiffies的文件

    进入自己安装的内核

    进入内核

    编写c程序

    #include <linux/module.h>
    #include <linux/sched.h>
    #include <linux/uaccess.h>
    #include <linux/proc_fs.h>
    #include <linux/fs.h>
    #include <linux/mm.h>
    #include <linux/seq_file.h>
    #include <linux/slab.h>
    
    extern unsigned long volatile pfcount;
    
    static int my_proc_show(struct seq_file* m, void* v)
    {
        seq_printf(m, "The pfcount is %ld and jiffies is %ld!\n", pfcount,jiffies);
        return 0;
    }
    
    static int my_proc_open(struct inode* inode, struct file* file)
    {
        return single_open(file, my_proc_show, NULL);
    }
    
    static struct file_operations my_fops = {
        .owner = THIS_MODULE,
        .open = my_proc_open,
        .release = single_release,
        .read = seq_read,
        .llseek = seq_lseek,
    };
    
    static int __init my_init(void)
    {
        struct proc_dir_entry* file = proc_create("readpfcount",0x0644, NULL, &my_fops);
        if (!file) {
            printk("proc_create failed.\n");
            return -ENOMEM;
        }
        return 0;
    }
    
    static void __exit my_exit(void)
    {
        remove_proc_entry("readpfcount", NULL);
    }
    
    module_init(my_init);
    module_exit(my_exit);
    MODULE_LICENSE("GPL");
    

    编写Makefile

    ifneq ($(KERNELRELEASE),)
    	obj-m:=readpfcount.o
    else
    	KDIR:= /lib/modules/$(shell uname -r)/build
    	KVER?=$(shell uname -r)
    	PWD:= $(shell pwd)
    
    default:
    	$(MAKE) -C $(KDIR) M=$(PWD) modules
    clean:
    	$(MAKE) -C $(KDIR) M=$(PWD) clean
    endif
    

    make编译readpfcount.c文件

    安装模块

    insmod readpfcount.ko
    

    利用命令lsmod可以看见模块已被安装
    lsmod

    查看pfcount与jiffies值

    cat /proc/readpfcount
    

    cat

    实验完成

    展开全文
  • 通过中断的方式通知系统数据接收完毕现象:由于是高速数据采集,pcie中断次数较多,正常情况下每秒7000次左右,不知道网卡中断次数能达到多少,但是有时上电启动发现pcie次数远远多于预想值,造成linux没有时间去...

    原理:tilepro36外接pcie接口的fpga板卡,通过中断的方式通知系统数据接收完毕

    现象:由于是高速数据采集,pcie中断次数较多,正常情况下每秒7000次左右,不知道网卡中断次数能达到多少,但是有时上电启动发现pcie次数远远多于预想值,造成linux没有时间去执行中断处理程序,fpga端显示死机。此现象随机出现。

    分析原因:

    通过认真分析hv/drivers/pcie/rootcomplex_default.c和pcie.c文件的得出pcie中断的原理如下是:

    1.rc_init中注册pcie device model,同时注册中断回调函数intcall;

    2.rc_service中一直都有一个mailloop函数在pcie dedicated tile上运行,作用是接收pcie接口的message,分析后调用回调函数intcall,根据分析后的参数不同,该回调函数发送ibound内部消息到linux驱动运行的tile,该tile再解析该内部消息并产生linux中断给OS。

    问题是回调函数intcall中发送的ibound内部消息应该分为INTx assert和deassert两种,但在错误发生的情况下我一直收到assert消息,没有收到deassert消息,所以认为fpga根本没有发送对本次中断无效的消息,造成hv一直认为中断有效,次数比预想要多。

    解决方法:

    fpga之前在pc机上使用的是MSI中断,没有使用fpga内部的assert线,但在tilepro36系统中通过观察msi_enable线发现给line一直为低,说明tilepro36硬件部分不支持MSI中断。所以需要使用fpga的assert线来发送INTx的中断消息。

    疑点是在hv/drivers/pcie/shim_config.c中ibound init时对pcie寄存器的配置中使能了assert INTA-INTD 4根中断,但没有使能deassert的4根中断。这样配置为什么deassert消息接收后仍然能正确识别呢?

    阅读(1468) | 评论(0) | 转发(0) |

    展开全文
  • 统计Linux系统缺页次数

    千次阅读 2019-12-26 10:19:24
    Centos7实现缺页中断具体步骤 一些可能用到的命令 安装vim编译器 yum -y install vim* Centos修改文件权限,将只读文件改为可写 chmod a+w -R /home/PycharmProjects/ 具体步骤 一.下载解压内核包 1)下载对应版本...
  • Linux中断机制分析

    万次阅读 多人点赞 2018-09-12 11:57:37
    上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。 1. 为什么要软中断  编写驱动的时候,一个中断产生之后,内核在中断处理函数中可能需要...
  • linux性能速查-中断

    千次阅读 2019-04-08 10:29:02
    linux系列博客为自己速查问题而写,比较乱,仅供参考,如有问题,请参考权威书籍或文档,谢谢。 中断是一种处理硬件设备请求的机制,它会打断正常的进程调度和执行,通过调用中断处理程序来响应硬件请求。它还是...
  • Linux 中断中断处理浅析

    万次阅读 多人点赞 2019-01-17 14:15:09
    1. 中断的概念 ...Linux中通常分为外部中断(又叫硬件中断)和内部中断(又叫异常)。 软件对硬件进行配置后,软件期望等待硬件的某种状态(比如,收到了数据),这里有两种方式,一种是轮询(pol...
  • 1、如果是固定IP上网使用.../etc/sysconfig/network文件是服务器网络配置,因此直接用cat命令即可查看网关。route命令在数据包没有有效传递的情况下,可以利用查看路由表。如果traceroute命令揭示出一条异常或低效的...
  • Linux中断机制(转)

    千次阅读 2019-02-13 15:22:33
      ... Linux 中断机制 中断控制器 中断描述符 中断数据结构 中断的初始化 内核接口 中断处理过程 CPU 的中断处理流程 保存中断信息 处理中断中断中返回 编写中断处理...
  • 性能分析_linux服务器CPU_中断

    千次阅读 2017-09-11 09:59:55
    中断 1. 指标范围 1.1 Interrupt rate 应该与cpu利用率结合分析,如果cpu利用率在合理范围内,大量的中断也是可以接受的。一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示存在硬件问题 1.2 ...
  • Linux中断和软中断

    千次阅读 2015-10-11 10:53:43
    从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止...
  • Linux中断原理 Linux内核中每个中断irq对应一个struct irq_dest结构体(注意:这里的irq是内核内部irq,不是硬件irq),每个struct irq_desc包含一条struct irqaction链表。 struct irq_desc { ...... struct ...
  • 统计缺页次数

    2021-05-15 08:54:46
    统计操作系统缺页次数实验目的学习虚拟内存的基本原理和Linux虚拟内存管理技术;深入理解、掌握Linux的按需调页过程;掌握内核模块的概念和操作方法,和向/proc文件系统中增加文件的方法;综合运用内存管理、系统...
  • Linux下调用request_irq注册中断时给多个同类型设备指定不同的中断名称Linux下注册中断并指定中断名称cat /proc/interrupts使用设备树描述中断节点驱动程序解析设备树节点驱动程序注册中断安装驱动模块后的效果 ...
  • linux驱动-中断

    千次阅读 2017-02-13 13:10:02
    Linux中断简述: 实现一个linux中断,需要经过申请注册中断处理函数(安装中断),然后分别实现linux中断的前半部分和后半部分。前半部分,就是申请注册的中断处理函数(中断服务程序);中断后半部分,就是中断...
  • 硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让...
  • Linux驱动开发——按键为例介绍Linux内核中断

    千次阅读 多人点赞 2020-12-14 17:49:36
    Linux内核中断1. 简介2. linux内核中中断的注册与注销3. 代码4. 测试 1. 简介      linux中断处理过程和ARM裸板中的中断处理过程是一致的。不同点在于裸板开始时所有的软件都是自行编程完成的...
  • Linux中断和定时器

    千次阅读 2017-07-08 21:47:00
    Linux中断编程: 申请和释放中断 在Linux设备驱动中,使用中断的设备需要申请和释放对于的中断,并分别使用内核提供的request_irq()和free_irq()函数。 1、申请irq int request_irq(unsigned int irq, ...
  • 读取按键状态时,如果按键未按下则休眠进程,按键按下则进入中断服务函数,在isr中唤醒进程并将对应按键按下的次数加1. 一、 宏定义设备名称和主设备号,定义中断描述结构体及初始化结构体参数,按键次数静态全局...
  • 统计Linux系统缺页的次数实验

    千次阅读 2019-01-05 19:27:10
    这是我在大三的时候的一个课程设计,觉得挺有意思,所以就算是当作我的第一个博客吧!... (3)新建内核模块,并加载到新内核,通过/proc实现用户态下查看缺页次数。 我下的虚拟机是centos: 然后我在网上下的那...
  • Linux性能优化-中断

    千次阅读 2018-12-19 18:59:50
    中断
  • Linux驱动中断函数参数详解

    千次阅读 2017-06-15 19:49:42
    中断函数参数分析总结 Int request_irq (unsigned int irq, irq_handler_t handler, unsigned long flags, const char *devname, void *dev_id)   A.先来分析形参:   第一个参数irq: 表示要分配的中断号。对于...
  • linux中断--中断原理分析

    千次阅读 2014-04-14 18:48:28
    中断之原理篇 前言: 中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。 在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使的CPU纠结在某一个IO上,一直在等待它的...
  • Linux内核-中断-中断响应和返回

    千次阅读 2017-02-09 00:27:03
    一、中断的响应和服务在前面一篇博文中,我们分析了i386 CPU的中断机制和内核中有关的初始化,现在我们进一步分析中断的响应过程和服务(和异常的响应机制不同)。我们假设外设驱动都已经完成了初始化,并且已把相应...
  • Linux之时钟中断

    万次阅读 2017-04-14 16:33:13
    Linux的0号中断是一个定时器中断。在固定的时间间隔都发生一次中断,也是说每秒发生该中断的频率都是固定的。该频率是常量HZ,该值一般是在100 ~ 1000之间。该中断的作用是为了定时更新系统日期和时间,使系统时间...
  • Linux内核:中断、软中断、tasklet

    千次阅读 2017-10-11 11:23:30
    在之前我所写的Linux驱动程序中,会经常使用到中断机制,像CC1100高频驱动、倒车雷达驱动等等。但所用到的中断机制都基本上是用到中断的顶半部,即:编写中断处理函数,通过request_irq函数申请中断,这样当中断来临...
  • 适用于操作系统第三版微课版教材

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,249
精华内容 21,699
关键字:

linux查看中断次数

linux 订阅