ksm

kvm 优化特性:ksm技术,大页内存等

烈酒焚心 提交于 2020-08-15 17:53:12
参考: http://tech.it168.com/a2016/1101/3005/000003005933.shtml(ksm) http://www.cnblogs.com/dongzhiquan/p/5043912.html(大页内存优点) <kvm虚拟化技术 实战与原理解析> 简介: cow:copy on write,也就是写时复制。这是一种内存共享技术,在linux中当使用fork 函数创建一个进程时,子进程和父进程共享全部的内存,当这片共享的内存区域被进程试图修改的时候,内核会分配一块新的内存区域,并将被试图修改的共享内存区域复制到新的内存区域上,然后再让进程去修改内存区域。 ksm:kernel SamePage Merging。 ksm让内核扫描正在运行中的所有程序,并比较它们的内存,如果发现它们的内存页有相同的,那么就把它们相同的内存页合并为一个内存页,并将其标识为“写时复制”,当标识为“写时复制”的内存页需要被修改时,内核就为其分配新的内存空间,并复制内存页到新的空间,在新的内存空间上进行修改。 ksm设计初衷就是为了给虚拟化节约内存的,因为如果客户机都使用相同的系统和运行类似的程序,那么每个客户机进程就会有很大一部分的内存页是相同的,这时候使用ksm技术就能大大降低内存的使用率。也方便kvm内存的过载使用,传说有人在16G内存的机器上

Linux 操作系统原理 — 内存 — KSM 内存页共享的性能问题

南笙酒味 提交于 2020-08-11 07:41:12
目录 文章目录 目录 KSM 内存页共享的性能问题 KSM 内存页共享的性能问题 KSM(Kernel Shared Memory)是 Linux Kernel 的一种内存共享机制,在 2.6.36 版本引入。简而言之,KSM 用于合并具有相同内容的物理主存页面以减少页面冗余。在 Kernel 中有一个 KSM 守护进程 ksmd,它会定期扫描用户向它注册的内存区域,寻找到相同的页面就会将其合并,并用一个添加了写保护的页面来代替。当有进程尝试写入该页面时,Kernel 会自动为其分配一个新的页面,然后将新数据写入到这个新页面,这就是典型的 COW 机制。类似的,存储技术中有一个称为去耦合(de-duplication)的技术,通过删除冗余数据(基于数据块,或者基于更大的数据片段,比如文件)来减少已存储的数据。公共数据片段被合并(以一种 COW 方式),释放空间供其他用途。使用这种方法,存储成本更低,最终需要的存储器也更少。 KSM 最初被应用到 KVM 上,因为事实证明,如果虚拟化了许多相同的操作系统和应用程序组,那么宿主机上许多内存页面都是相同的。假如操作系统和应用程序代码以及常量数据在 VMs 之间相同,那么这个特点就很有用。当页面惟一时,它们可以被合并,从而释放内存,供其他应用程序使用。将多个 VMs 具有的相同内存页合并(共享),可以腾出更多的可用物理内存。 但是事实上

快速幂+龟速乘+费马小定理+逆元+矩阵乘法

为君一笑 提交于 2020-07-29 05:44:30
我是这个机房最菜的 我今天复习的是: 王者吃鸡CF,上分小队等你来 扯远了,接下来才是干货 快速幂+慢速乘+费马小定理+逆元+矩阵乘法(讲错了还请 笑的收敛点 本来太蒻,所以快速幂,慢速乘,费马小定理没有找到合适的例题,逆元和矩阵乘法的例题也不多而且不难 快速幂 说到求几次方,我们不难想到 \(pow()\) 这个函数,但是这个函数不仅不快而且还有坑(某位大佬曾因这个在省选翻车了),用 \(pow()\) 切记要注意 \(pow()\) 返回 \(double\) 类型的数 于是我们便要xiao习一下更快而且没那么容易锅的 \(ksm\) 这不有手就行嘛 基本思路: 1)当 \(b\) 是奇数时,那么有 \(a^b = a * a^{b-1}\) 2)当 \(b\) 是偶数时,那么有 \(a^b = a^{b/2} * a^{b/2}\) 时间复杂度: \(O(log\ n)\) 代码实现: //递归写法 int ksm(int x, int y, int mod){//求x的y次方(在%m的意义下) if(y == 0) return 1; if(y % 2 == 0){ int num = ksm(x ,y / 2) % mod;//防止计算两次,节省时间 return num * num % mod; } else return ksm(x, y - 1) * x % mod

[自用] 数论和组合计数类数学相关(定理&证明&板子)

微笑、不失礼 提交于 2020-05-01 05:05:11
0 写在前面   本文受 NaVi_Awson 的启发,有些地方相似,一些地方甚至直接引用,特此说明(感谢dalao)。 1 数论   1.0 gcd     1.0.0 gcd       $gcd(a,b) = gcd(b,a\;mod\;b)$      证明:设 $c\mid a$,$c\mid b$,则 $c\mid (b-a)$。         设 $c\nmid a$,则 $c$ 不是 $a,b-a$ 的公因子。         设 $c\mid a$,$c\nmid b$,则 $c$ 不是 $a,b-a$ 的公因子。 1 int gcd( int a, int b){ 2 if (!b) return a; 3 return gcd(b,a% b); 4 }     1.0.1 exgcd        对于一组不定方程 $a\times b+b\times y = c$。若 $gcd(a,b)\mid c$ 则这组方程有无数组解,否则无解。        求出一组 $a\times b+b\times y = gcd(a,b) $ 的解需要 $exgcd$,是在 $gcd$ 递归函数过程中实现的。        设 $x_0,y_0$ 是这一层的解,$x_1,y_1$ 是上一层的解。        首先边界条件:当$b=0$时显然$x_0=1,y_0=0$。  

老白学编程

夙愿已清 提交于 2020-04-22 23:03:33
NetData plugin 之 proc Netdata 的数据采集都是通过各个plugin来进行的。找几个有代表性的plugin来看看。 概述 该plugin 顾名思义, 是针对于类Linux系统(BSD有单独的plugin), 通过读取 /proc 下面的数据来进行采集。 列表 先列一下都有哪些项。 文件 说明 /proc/stat 系统和内核的统计信息 /proc/uptime 系统运行时间 /proc/loadavg 负载 /proc/sys/kernel/random/entropy_avail 熵池大小,单位bit /proc/pressure 参考一下 psi /proc/interrupts 中断表 /proc/softirqs 系统软中断信息 /proc/vmstat 虚拟内存统计信息 /proc/meminfo 当前内存信息 /sys/kernel/mm/ksm ksmd 类似一个COW机制 /sys/block/zram 虚拟内存的压缩 /sys/devices/system/edac/mc EDAC即error detection and correction(错误检测与纠正) /sys/devices/system/node numa node 信息 /proc/pagetypeinfo 伙伴系统信息 /proc/net/dev 网络适配器统计信息