互联网
基于Linux系统对
mlock原理及其性能的研究
苗杰
国家计算机网络与信息安全管理中心江苏分中心
摘要:Linux系统支持mlock内存锁定功能,启用该功能物理主机可以将物理内存页锁住,阻止内存页调出到 swap交换空间启用mlock功能可以将进程使用的部分或者全部的虚拟内存锁定到物理内存中,Linux内核主要通过mlock的四个函数来实现物理内存贞的锁定和解锁从RHEL6.5G A版本开始,虚拟化libvirt就 已提供对mlock功能支持默认情况下虚拟机qemu-kvm进程中的mlock功能是关闭的,若要开启qemu-kvm进程的mbck功能,需在虚拟机的配置文件中添加内存锁定的配置选项,若网卡设备以virtio方式添加 到虚拟机时,启用mlock功能会影响虚拟机的实际占用物理内存=为了验证mlock功能对业务性能造成的 影响,针对两种应用场景分别对其进行性能测试,主要验证了 mlock功能使用不同内存锁定选项参数对创 建多线程和page fault产生的性能影响
关键词:Linux;mlock;)#:拟化;多线程;性能
0引言
在一些业务的使用过程中,严格时间相关的程序,锁住 物理内存.可以避免内存页频繁调出调人带来的性能损耗对 于安全性要求较高的应用程序,需要敏感数据被禁止输出到 交换文件中,否则程序结束后,攻击者就可能从交换文件中恢 复出这些敏感数据:Linux内核通过mlock的四个函数来实现 物理内存页的锁定和解锁,虚拟化环境中也可修改虚拟机的配 置文件来启用内存锁定功能,从而满足一些应用场景的需求1mlock简介及其原理
mlock (memory locking)是Linux内核实现内存锁定的一种方式,用来将进程使用的部分或者全部的虚拟内存锁定到 物理内存中。mlock机制主要有以下功能:(1 )被锁定的物 理内存在被解锁或进程退出前,不会被页回收流程处理;(2) 被锁定的物理内存,不会被交换到swap设备;(3)进程执 行mlock操作,立刻分配物理内存。
mlock机制提供以下四个函数供使用,如表1所示:
表1mlock相关函数
函数 描述
int mlock (const void*addr,size t len)将起始地址addr,长度为len的虚拟内存锁定到物理内存:
int munlock (const void *addr,size t
len )
munlock()将起始地址addr,长度为len的物理内存解锁
int mlockall (int flags)flags当前虑拟内存新增加虑拟内存
MCL_CURRENT:〇 x
MCL_FUTURE:x〇
MCL_CURRENT|MCL_FUTURE:〇 〇〇:颌定到物理内存_
x:不锁定到物理内存
iint munlockall (void)munlockall()将mlocka丨丨()的物理内存解锁
(说明:上述几个函数只能由root用户执行。)
每个进程都拥有一段连续的虚拟内存,内核实际的使用据结构来管理虚拟内存区域,简称vma vma管理虚拟内存的 情况并不是以整个虚拟内存为管理单位,而是将整个虚拟内方式如图1所示。
存划分为若干个虚拟内存区域,内核中使用vm_area_struct数
662021.04
互联网p ro ce ss a dd ress
vm_end
vm_start
vm一flags
vm_end
vm_start
vm_flags
图1vma管理虚拟内存I High address i Low ad d re ss
每一个vma代表一个已映射的、连续的且属性相同(如 可读/写)的虚拟内存区域。内核采用链表和AVL
树形式管 理vma,链表用于遍历,AVL树用来查mlock操作会给相 应的vma的vm_flags置一个VM LOCKED标记,而这个标记 则会影响到物理内存回收和交换。mlock锁定的虚拟内存区域,可能跟现有的vma管理的虚拟内存区域并不完全重合,由于 同一个vma的内存属性要求一致,而是否具有VM_LOCKED 标记也是其属性之一,所以mlock操作可能导致现有的vma 被合并或分割。vma的合并和分割如图2所示。标识某个页面的活跃程度,从而决定如何在两个链表之间移 动页面。
内核函数vmscan仅会遍历扫描active list和inactive list 链表来回收页面。内核在LRU中新增了一个unevictable list,将不可回收的页面都放在unevictable list中,mlock的页被放 在unevictable list中,同时给该页置一个PG mlocked标记。除了 mlock的页,ramdisk或ramfs的页和共享内存映射的页 也被放入 unevictable_list中。
解锁并不立刻将解锁的页回收,而是将解锁的页放回 active list或inactive_list链表,然后交由页回收流程处理,所 以mlock的页不会被页回收流程处理。
当通过fork系统调用创建一个子进程,子进程将拷贝父 进程的整个虚拟内存,包括对所有vma的拷贝,不过子进程 的vma并不继承VM_LOCKED标记。由于线程共享进程资源,所以线程的vma将继承VM_LOCKED标记。
2 mlock功能在虚拟化应用中的实现
从RHEL6.5GA版本中,Linux系统虚拟化libvirt已提供 对mlock功能的支持。当启动虚拟机时,默认情况下qemu-kvm进程中的mlock功能是关闭的。若要开启qemu-kvm进程 的mlock功能,需在虚拟机的xml文件中,添加如下配置行:
L O C K E D v m_fl*g*-\'M E X E C
prev next
!丨v m_fla g»*V M_L O C K E D
'l--**•-------
new
v m fla**-\T v4L O C K E D\E X E C \
•______A___
prev,next,
图2 vma的合并和分割
prev,next是已受链表管理的vma结构,new是将要新加入链表的vma。当new加入时,如果new的起始地址 与prev的结束地址相同,且new属性与prev属性均为VM_ LOCKED,则将prev和new合并成prev’。若new的结束 地址与next的起始地址有重合,但next属性是VM EXEC,则next被分割成两部分,一部分加人prev’,另一部分变成 next'〇
Linux给进程使用的虚拟内存由LRU来管理,操作系统 对LRU的实现主要基于一对双向链表,activejist和inactive_ l i s t同时引人两个页面标志符PG_active和PG_referenced来
<memoryBacking>
<locked^>
</memoryBacking>
网卡设备以PC I/Vutio方式添加到虚拟机时,给虚拟机配 置10G B的内存,经测试虚拟机启动后实际占用的物理内存如 下表2所示:
表2 mlock功能对虚拟机内存的影响
应用场景网卡设备模式m lo c k=o n|o f f虚拟机占用物理内存l V irtio on10G B
2V irtio o f f900M B
3PC I on10G B
4*注PC I o f f10G B
(说明:网卡设备PC1模式下,虚拟机占用配置的10GB 内存。)
3 mlock功能对访问内存的影响
进程一般会访问虚拟内存,需要建立虚拟内存和物理内 存的映射关系,而启用mlock功能会对进程运行中的page fault
I 2021.04 6
7
互联网
假设线程整个栈空间大小10M B .
其中1M
B
空间已使用
假设I 0M
B
虚拟内存和物理内存建立映射关系耗时l m
s , 1M B
虚拟内存和物理内存建立映射关系耗时0.1m s
当进程涉及多
线程操作时:
(1 )采用m
l o c k 机制,线程整个栈空间10M B 会被映射
到物理内存,若一个进程中有2000个线程,则线程栈空间和 物理内存建立映射关系共耗时2000m s
(2 )
未采用m lo c k 机制,线程栈空间已使用的1M B 会
被映射到物理内存,若一个进程中有2000个线程,则线程 空间和物理内存建立映射关系共耗时200m s
若进程涉及多线程操作,采用m
lo c k 机制,线程栈空间
和物理内存建立映射关系将带来额外的时间开销:
4 mlock 功能对业务性能的影响
为了验证m
lo c k 功能对业务性能带来的影响.按如下两
种应用场景分别对其进行性能测试
(I )利用进程测试T 具.验证
m lo c k 功能是否开启对其
创建线程性能的影响。测试结果如表5所示。
表5 mlock 功能对创建线程性能影响
进程数
mlock=off
m lock=on
M CL_CURRENT
M CL_FUTURE
A
比率
B
189,52588,57087,0380.990.972138,753140,054123,0391.010.894156,696157,32195,180 1.000.618142,348146,58150,431.030.3516
104,230
145,429
4,541
1.40
0.04
m lock =on|ofF
off
线程栈空间映射 物理内存大小
1M B
映射物理内存 时间开销
低
产生影响,进而影响内存访问时间.mlock 功能对内存访问的 影响如表3所示:
表3 mlock 功能对内存访问的影响
mlock =on|off 访问内存产生page
fault 次数访问内存时间开销
on 1低off
多次
高
(1 )采用mlock 机制,仅在进程虚拟内存和物理内存建 立映射关系时产生一次page fault
(2)未采用mlock 机制,每当访问进程中不同的虚拟内 存单元时,就会产生一次page fault
若进程中涉及实时处理环节,应在进入实时处理环节前, 将进程虚拟内存锁定到物理内存,否则page fault 会影响实时 处理。
在一些实际应用中会涉及多线程操作,每个线程均有自 己的栈空间,启用mlock 功能会对线程栈空间映射物理内存带 来一定的影响,如表4所示-表4 mlock 功能对线程映射的影响
m lock =on|ofF
线程栈空间映射映射物理内存物理内存大小
时间开销on
10M B
高
测试单位为thread/s ;
比率 A =m lo c k o n ( M C L _C U R R E N T > /o f f ;比率 B =m lo c k o n ( M C L _F U T U R E ) /o f f
从表5中可以看出随着并发进程逐渐增多,使用m
l o c k 的
M C L _F U T U R E
特性,会严重影响进程创建线程的性能:图形
效果如图3所示_
(2)动态分配内存20GB ,验证mlock 功能是否开启对
m lo c k 功能对创建线程性能影响
200,000
150.000
100.000
50,000
U
m
1
2
4
8
进程数
■ m lock=off ■ MCL.CURRENT 3 MCL_FUTURE
图3 mlock 功能对创建线程性能影响
(下转第85页)
68
2021.04 I
传送网
2.2异厂商跨域协同测试
为验证基于ACTN架构的SDN两级协同实现跨域OTN 解耦互通与业务发放,验证集团先进架构的可用性,山东联 通基于现网搭建测试环境.选定测试环境进行测试,即烽火、华为设备通过NNI灰光、UNI两种方式跨域对接,混合组网。端到端透传业务路径:华为CPE-华为本地网-华为省网-烽 火本地网-烽火C
PE.省内烽火集中化工作同步进行,目前已 部署控制器,测试场景烽火域纳管网元主要为临时测试网元 (FONST6000及FONST 1000 U2设备):华为域均为现网在 用网元,新增末端CPE OSN 1800丨E设备:
测试完成:控制层NCE-S进行跨域统一管控,实现拓扑 查看、时延测量、基于约束路由的E2E业务下发、状态变更 同步等。
2.3后续应用建议
由于各厂商对于SDN管控支持情况进度不一,目前的 测试仅考虑了透传组网业务的跨域实现(含UNI和NNI两种 方式),对于EOO和EOS类业务,2021年需重点实现基于 PE0TN网络的上述两种业务组网及人云,以及对应业务的B/〇域流程打通,包含省内NCE-S北向对接第三方编排器与应 用层打通,进而全面支撑云网协同业务(含MPLS-TP人云、EOO入云及EOS入云)。EOO和EOS类业务的异厂商跨域 协同,需视各厂商的开发力度进行现网验证和跟踪
3结束语
基于SD0TN的跨域业务协同,对于光传送网现网架构下 的SDN化演进有重要意义,本文从异厂商物理网络对通和管 控层对通两个方面进行论证分析,以省内华为-烽火、华为-中兴现网测试案例进行辅助,
总结异厂商基于ACTN架构的 光域SDN北向对接方案及技术关键点,进而为全面实现异厂 商网络一体化打下基石SDOTN可实现基于业务算路策略和 路径约束、时延可视的端到端跨域OTN业务编排与快速发放,且具备跨域业务保护恢复等功能,支持多厂商OTN设备混合 组网,并且对网络层互通的NNI、UN1两种方式均进行了支 持验证,有助于构建灵活高效智能一体化政企精品网。后续 根据各厂商的开发情况,需进一步实现对EOO和EOS类业务 的异厂商跨域协同。
作者简介:吕文琳(1981 —),女,江苏镇江人,高级T_程师,工程硕士;研究方向:电子通信工程。
(收稿日期:2020-11-30;责任编辑:赵明亮)
(上接第68页)
page fault产生的影响:如表6所示:
表6 mlock功能对page fault的影响
单位mlock=on (M CL_FUTURE)mlock=off off/on page fault
次数
5,020,28820,2630.004从表6中可以看出使用mlock的MCL_FUTURE特性,动 态分配内存时会大幅增加page fault,图形效果如图4所示:
mlock功能对page fault的影响
6,000,000
5.000. 000
4.000. 000
3.000. 000
2.000.000 1,000,000
■ page fault数
5结束语
基于Linux系统对mlock实现原理进行了研究,并测试了
mlock功能开启对进程创建线程和page fault产生的性能影响华为linux系统下载
从两个测试结果可以看出,使用mlock的MCL_FUTURE特
性来进行内存锁定,当进程涉及动态内存分配时会大幅增加
page fault,同时并发进程数增加会严重降低进程创建线程的性
能,这是由mlock实时锁定了物理内存造成的。因此可以根据
具体情况和需求来决定是否需要使用mlock功能。
作者简介:苗杰(1987—),男,江苏南京人,中级.T.程师,
硕士;研究方向:网络与信息安全。
(收稿日期:2020-11-23;责任编辑:赵明亮)图4 mlock功能对page fault影响
I2021.04 8
5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论