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. kubeadm部署高可用版Kubernetes1.21[基于centos7.6]

    1. 基础环境规划: 主机名 IP地址 节点说明 k8s-node01 192.168.1.154 node1节点 k8s-node02 192.168.1.155 node2节点 master01 ...

  2. iOS MonkeyDev 尝试体验(非越狱开发)

    一.前言 随着iOS系统的逐渐开放,iOS越狱需求的人越来越少,那么在非越狱系统上面开发越狱插件那将是一个不错的选择,在github上面发现一个开源的Xcode工程模板. 整合了越狱开发的工具.重签名 ...

  3. 修复Apache Log4j 2 远程代码执行漏洞jar包(jdk8编译)

    Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了大量丰富的特性.该日志框架被大量用于业务系统开发,用来记录日志信息.大多数情况下,开发者可能会将用户输 ...

  4. MySQL学习笔记-约束

    约束 约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据库中数据的正确.有效和完整. 一. 常用的约束 约束作用于表中的字段,可以在创建表或修改表的时候添加约束. AUTO_INCREM ...

  5. k8s——pod(label和selector)

    k8s的label和selector 在Kubernetes中,label和selector是两个重要的概念,它们一起用于实现资源对象的关联和调度. label 创建label 有两种方式创建labe ...

  6. Linux设备驱动--阻塞与非阻塞I/O

    注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...

  7. 阿里bxet逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 x82y 分析过 ...

  8. INFINI Labs 产品更新 | Easysearch 新增 kNN 搜索功能、Console 支持 LDAP 认证登录等

    INFINI Labs 产品又更新啦~,包括 Easysearch v1.3.0.Gateway v1.16.0.Console v1.4.0.Agent v0.5.1.本次产品更新了许多实用新特性, ...

  9. Scrapy框架(十)--增量式爬虫

    增量式爬虫 - 概念:监测网站数据更新的情况,只会爬取网站最新更新出来的数据. - 分析: - 指定一个起始url - 基于CrawlSpider获取其他页码链接 - 基于Rule将其他页码链接进行请 ...

  10. flutter 环境搭配 (一)

    首先下载flutter SDK Flutter中文网 官网 (p2hp.com 选择下载 SDK 解压后 ,添加到环境变量中. 配置国内镜像, PUB_HOSTED_URL=https://pub.f ...