IRQ均衡 硬中断

IRQ是中断号

2003

电脑 拨号 56K Modem

USB 打印机

拨号成功,打印机会是乱码,他们会不兼容

因为终端号一样 (类似ip地址冲突)

在bios里面调整设备的中断号

如今设备bios在初始化时,就会分配设备中断号

由bios统一管理 (类似DHCP)

vnet2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet6 fe80::fc54:ff:fe00:fafe prefixlen 64 scopeid 0x20<link>
ether fe:54:00:00:fa:fe txqueuelen 1000 (Ethernet)
RX packets 119 bytes 10400 (10.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 459 bytes 29832 (29.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

每增加一个虚拟机(kvm)就会增加一个类似这样的虚拟网卡

windows pc 一个网络适配器可以增加多个网段

[root@servera ~]# cd /proc/irq/
[root@servera irq]#
[root@servera irq]# ls
0 10 12 14 16 21 25 27 29 30 32 34 36 38 4 41 43 45 47 49 6 8 default_smp_affinity
1 11 13 15 2 24 26 28 3 31 33 35 37 39 40 42 44 46 48 5 7 9
[root@servera irq]#

查看中断号

实例

watch -n 1 'cat /proc/interrupts | grep eno16'

查看网卡的中断号,可以发现cpu1在活动(我在宿主机里ping当前虚拟机)

网卡绑核心

进程绑核心

当流量很大,网卡对cpu消耗会增大,把网卡绑在特定cpu上

网卡绑核 (rhel7)



更改流量在哪个网卡上工作

中断号是不变的

echo f > smp_affinity

也可以在前四个上面跑

这个绑了核不会变

rhel8

Every 1.0s: cat /proc/interrupts | grep  rxtx                                                                          foundation0.ilt.example.com: Sun Jul  3 12:33:40 2022

57:          0          3          0         48        164         78  IR-PCI-MSI 1572864-edge      ens160-rxtx-0
58: 8 0 15 5 0 0 IR-PCI-MSI 1572865-edge ens160-rxtx-1
59: 0 4 0 0 0 0 IR-PCI-MSI 1572866-edge ens160-rxtx-2
60: 0 0 5 0 0 0 IR-PCI-MSI 1572867-edge ens160-rxtx-3
62: 0 0 221 0 120 1112 IR-PCI-MSI 5767168-edge ens192-rxtx-0
63: 15 28 72 6 2 17 IR-PCI-MSI 5767169-edge ens192-rxtx-1
64: 4 674 0 0 0 0 IR-PCI-MSI 5767170-edge ens192-rxtx-2
65: 8 4 0 286 0 122 IR-PCI-MSI 5767171-edge ens192-rxtx-3

他们是linux物理网卡 ens160-rxtx-0 ens192-rxtx-0 其他为linux虚拟网卡

红帽8你设置了smp_affinity他也会变

proc/irq

[root@192 56]# cat effective_affinity
00000000,00000000,00000000,00000008
[root@192 56]# cat effective_affinity
00000000,00000000,00000000,00000004
[root@192 56]#

你无法绑核,他自动变,很均衡

红帽8,他很智能,他自动会均衡



每10秒变一次

结果,也可以提升缓存命中率

[root@192 56]# systemctl stop irqbalance.service
将均衡服务关掉,终极提高缓存命中率,但是完全不负载均衡,这是极端

网卡与cpu绑定,提升网卡缓存命中率 (最好是指定网卡绑在多几个核上,到处跳也不是很好)



频繁的跳,不仅消耗cpu资源,也会使缓存命中率变低

红帽8关闭均衡

为什么要绑核

缓存命中率

在开始工作前,数据必须放在cpu缓存中

当处理一个数据时,数据必须被调用到cpu缓存中才能被执行

内存不处理数据,只做数据暂存,随机存储器

cpu处理数据

1,2,3(缓存) 内存 硬盘

从内存中调度到缓存中,把它记录下来,如果下次还要调度数据,就直接从缓存中读取

inter L1 32K + 32K = 64K
L2 256K
L3 12M 24M

cache-hit 命中率 运行一个应用程序在缓存中的比率

cache-miss 丢失率 反之,如果不在缓存中为丢失率 (低效率)



每个核缓存内容不一样的,所以进程和网卡中断绑核

如果在程序运行时,没有绑核,他会均衡运行在多个核上。当他第一次运行时,没命中,就丢失,读了之后填充回来。填充到缓存snoop,如果运行在第二个核上,第一个核复制过来的东西。就被缓存命中了,因为第一个核复制了缓存到第二个核

下次进程再运行,两个缓存都有了!

缓存极大提升效率(命中后),但是他非常小,很容易被下一个进程填充

依赖缓存的话,就得运行在特定到几个核上。 减少开销和数据轮换

数据在缓存中改变,还需从缓存读到内存中

缓存中改变,立马写到内存。实时看到变化,开销较多 write-through 透写

当我(缓存)被覆盖时,才开始写 write-back 回写

测试

cache-a

cache-b

time cache-a

time cache-b

测时间

同样的结果不同的写法,哪一个更快?更优秀?

有些写法会更能利用缓存

valgrind --tool=cachegrind ./cache-a

valgrind --tool=cachegrind ./cache-b

通过命令可以知道谁的缓存命中率高,

也可以直接从速度的方面被感知出来

valgrind打印的值

miss rate 丢失率

绑核提升缓存命中率也能提升运行效率,但是会负载过高

利用缓存利用率可以大大提升性能

好好写代码可以利用缓存,绑核也可以利用缓存。别把代码瞎写。也别让cpu在100个内核里乱跳

lab cputuning-cpucache start

内存管理

内存地址和分配

1.虚拟内存

每个应用程序都会申请一段连续的,线性的地址空间
实际上并不连续
在物理内存看来,虚拟内存就是拆东墙补西墙
看上去像要多少给多少
实际上,用多少给你多少,精简模式 200G--10G。并不是你要多少有多少
虚拟地址空间范围 32bit windows XP 2^32 = 4GB
2^64 = 16EB MMU 内存管理单元 memory management unit
MMU在cpu里,他负责虚拟内存与物理内存的映射 cat /proc/cpuinfo
address sizes : 45 bits physical, 48 bits virtual 目前来说我们只用到了2^48 = 256TB 内存空间
2^48 ~ 2^63 未开发
如今可以满足256TB的寻址,但没有程序要这么多
内存随时在用,内存随时回收

2.物理内存

物理页是真实的内存,他不连续
RAM+SWAP 构成
真正的内存 加上swap中转一下,不至于死机
block size 磁盘最小空间
page size 页大小 最小单位 ------------------------------ [root@servera ~]# getconf -a | grep -i pagesize
PAGESIZE 4096
一个内存页4kb x86
ARM 64kb
[root@foundation0 ~]# pmap 42594
42594: /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
000055d9387f7000 160K r-x-- vsftpd
000055d938a1e000 4K r---- vsftpd
000055d938a1f000 4K rw--- vsftpd
000055d938a20000 8K rw--- [ anon ]
000055d939fed000 132K rw--- [ anon ]
00007f7c90414000 20K r-x-- libcap-ng.so.0.0.0
00007f7c90419000 2044K ----- libcap-ng.so.0.0.0
00007f7c90618000 4K r---- libcap-ng.so.0.0.0
00007f7c90619000 4K rw--- libcap-ng.so.0.0.0
00007f7c9061a000 120K r-x-- libaudit.so.1.0.0
00007f7c90638000 2048K ----- libaudit.so.1.0.0
00007f7c90838000 4K r---- libaudit.so.1.0.0
00007f7c90839000 4K rw--- libaudit.so.1.0.0
00007f7c9083a000 40K rw--- [ anon ]
00007f7c90844000 108K r-x-- libpthread-2.28.so
00007f7c9085f000 2044K ----- libpthread-2.28.so 全是4的倍数
这些动态链接库,也是要消耗内存的
虚拟地址和真实的物理内存的映射,需要一个表来记录

32bit 4G 3.2G可用

被保留出来的给内核用

剩下的内存被保留,用来被保留出来的1G,其中1G之中有128M用来做页表

kernel通过页表转换虚拟地址到物理地址

1G中的1M给bios和io设备

1G的16M给DMA 直接内存映射

直接分配内存,不需要地址转换

16M给设备用的(内核模块之类,反正不是应用程序)

内核的功能都是由DMA直接提供内存

64bit 256TB虚拟地址 128TB用于内核 128TB用于应用程序



很少出现内存溢出,所有的内存都是活动状态

除非你把User space用完才可能出现溢出(没话说)

某一个区域的内存用完,也会产生内存溢出

16Mdma用完 表的128M用完都属于内存溢出 不像32那么紧缺。解决区域性内存

当一个应用程序启动时,CPU MMU会将虚拟内存物理内存映射 存在 page table PTE 页表条目

当应用程序关闭时,这个映射关系也随之结束

如果再次运行,又需要再次映射,这会消耗cpu资源

大页

大页的存在就是为了缓存一下 映射表信息。你关闭了进程后对应的映射表信息,随之关闭。你再开启那个程序,又得映射出来。这就需要大页给你缓存一下。降低cpu开销(cpu就不用那么忙,因为有大页缓存)

如果该系统瓶颈在cpu上,则牺牲内存资源来降低cpu开销,否则不需要

TLB:大页缓存: 给PTE条目充当缓存用 ,给映射关系提供缓存。大页是一段连续的物理内存,不可释放

hugepage 大页 一个大页 2048 kB

启用大页。来降低cpu开销

HugePages_Total:       0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 374592 kB
DirectMap2M: 10110976 kB
DirectMap1G: 8388608 kB
[root@foundation0 ~]# cat /proc/meminfo [root@foundation0 ~]# free -m
total used free shared buff/cache available
Mem: 16014 5572 7456 41 2985 10071
Swap: 8071 0 8071
[root@foundation0 ~]# [root@foundation0 ~]# sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
[root@foundation0 ~]# [root@foundation0 ~]# tail -n 1 /etc/sysctl.conf
vm.nr_hugepages = 200 [root@foundation0 ~]# sysctl -p
vm.nr_hugepages = 200
[root@foundation0 ~]# free -m
total used free shared buff/cache available
Mem: 16014 5972 7052 41 2989 9671
Swap: 8071 0 8071
[root@foundation0 ~]# 5572变成5972

SAWP 物理内存 (硬盘划分出一段空间)

当物理内存(主板实际内存紧张时,会将内存中暂时不用的程序丢到swap中存放,如果再次调用该程序时,会从swap中再次调用到内存中运行)
打开10个word文件,每个100M,需要1G内存,但我目前值编辑其中一个WORD文件,则其他9个可以放到SWAP中,前提是内存紧张
如果没有swap,当内存紧张时,你又运行了一个新的应用程序,则系统内存溢出。死机 对于应用程序来说swap就是物理内存,对于看的见摸得着的内存条来说,swap就是虚拟内存
紧张就是一下子,解决紧张时间。临时暂存。提升可靠性

有关容器

让容器关闭swap,让容器尽量不去用swap,去使用真实内存

--memory-swappiness 0 有swap也不用 如果你用swap,容器认为你资源很充足,他就把容器运行在上面。我给你关了swap就说明这上面没有内存,你运行在其他上面

RHCA rh442 006 中断号 缓存命中率 内存概念 大页的更多相关文章

  1. 大页内存(HugePages)在通用程序优化中的应用

    今天给大家介绍一种比较新奇的程序性能优化方法-大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失.这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在O ...

  2. 大页内存(HugePages)

    原文转载自:http://blog.csdn.net/yutianzuijin/article/details/41912871 今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePag ...

  3. OpenStack 高性能虚拟机之大页内存

    目录 文章目录 目录 前文列表 虚拟存储器系统 页式虚拟存储器 大页内存 Linux 的大页内存 大页的实现原理 大页内存配置 透明巨型页 THP 大页面对内存的影响 Nova 虚拟机的大页内存设置 ...

  4. Memcached的LRU和缓存命中率

    缓存命中率 命中:直接从缓存中读取到想要的数据. 未中:缓存中没有想要的数据,还需要到数据库进行一次查询才能读取到想要的数据. 命中率越高,数据库查询的次数就越少. 读取缓存的速度远比数据库查询的速度 ...

  5. 黄聪:Mysql5.6缓存命中率

    MySQL缓存命中率,网上说法不一,下面我说下我的看法,大家轻拍: 总的select查询数等于com_select(没命中) + qcache_hits(命中) + 解析错误的查询. 再来看看Com_ ...

  6. 合理配置MySQL缓存 提高缓存命中率

    众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍.故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率.MySQL数据库也不例外.在这里,笔者 ...

  7. 浅谈CPU三级缓存和缓存命中率

    CPU: CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多.缓存的出现主要是 为了解决CPU运算速度与内存读写速度不匹配的矛盾 ...

  8. Innodb存储引擎的缓存命中率计算

    数据库的慢查询是我们在生产环境中必须经常检测的,如果慢查询语句过多,说明我们应该增加buffer_pool的大小了.常常检查的指标就是查看缓存命中率是否过低. mysql> show statu ...

  9. MySQL缓存命中率概述

    工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句,先去查询缓存,判断是否存 ...

  10. MySQL缓存命中率概述及如何提高缓存命中率

    MySQL缓存命中率概述 工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句 ...

随机推荐

  1. 不到200行用Vue实现类似Swiper.js的轮播组件

    前言 大家在开发过程中,或多或少都会用到轮播图之类的组件,PC和Mobile上使用 Swiper.js ,小程序上使用swiper组件等. 本文将详细讲解如何用Vue一步步实现的类似Swiper.js ...

  2. 【Java】JVM字节码分析

    一.功能 1.工作原理 2.解释和运行 jvm本质上是运行在计算机上的程序,负责运行java字节码文件 对字节码文件中的指令,实时的解释成机器码,供计算机执行 3.内存管理 自动为对象.方法等分配内存 ...

  3. 让Easysearch运行在Kylin V10 (Lance)-aarch64上

    简介 本文主要介绍在国产操作系统 Kylin V10 (Lance)-aarch64 上安装单机版 Easysearch/Console/Agent/Gateway/Loadgen 系统配置 在安装之 ...

  4. 网络诊断工具traceroute的使用

    在 Linux 系统中,traceroute 是一个网络诊断工具,用于确定数据包从你的计算机到目标主机(如一个网站或远程服务器)所经过的路由路径. 如果你的系统中没有安装 traceroute,你可以 ...

  5. Mysql中innodb的B+tree能存储多少数据?

    引言 InnoDB一棵3层B+树可以存放多少行数据?这个问题的简单回答是:约2千万.为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构.数据组织方式说起. 在计 ...

  6. 使用Kimi+Markmap总结网页内容生成思维导图

    AI可以帮助我们更高效地阅读文章进行提炼总结,像上图这张思维导图,就是使用Kimi进行内容提炼,再使用markmap生成思维导图,下面讲解下详细实现步骤: 一.工具准备 Kimi,将文章或一篇网页投给 ...

  7. Linux多网卡的bond模式原理

    Linux多网卡绑定 ​ 网卡绑定mode共有7种: bond0,bond1,bond2,bond3,bond4,bond5,bond6,bond7 常用的有三种: ​ mode=0: 平衡负载模式, ...

  8. anaconda里虚拟环境安装jupyter notebook

    安装jupyter notebook 打开anaconda prompt,进入虚拟环境 conda activate Pytorch_learning 下载安装jupyter notebook con ...

  9. Linux 内核:设备驱动模型 学习总结

    背景 其实之前就转载过别人针对Linux的设备驱动模型(Linux Device Driver Model,LDDM)的文章,但是受限于自身的能力,因此花了点时间重新学习了一下. 前人写的文章很好,我 ...

  10. Python_9 py文件导入和路径处理

    一.查缺补漏 Python中两个值交换可以直接交换如:a,b=b,a 冒泡就是从小到大排序,因为越到后越大 自动导包也适用于自己创建的模块 关于正斜杠和反斜杠https://www.cnblogs.c ...