Making Dynamic Page Coalescing Effective on Virtualized Clouds——论文泛读

news/2024/7/8 2:15:00

EuroSys 2023 Paper 论文阅读笔记整理

问题

在现代计算机系统中,转换后备缓冲器(TLB)容量不能与存储器容量相同的速率进行扩展[1,2]。地址转换开销已成为许多大内存工作负载的主要性能瓶颈[3-19]。在虚拟化云中,用硬件支持的嵌套分页支持内存虚拟化(例如,Intel的扩展页表[20]和AMD的嵌套页表[21])。对于嵌套分页,为了解决TLB未命中问题,处理器需要遍历两层页表(即二维页面遍历),其成本可能是本地系统上TLB未中时遍历一层页表的6倍[12,20]。

大页是减少大内存工作负载的地址转换开销的主流方法,TLB条目可以缓存大页的页表条目(PTE),用于增加翻译地址数据量(例如,大页PTE的2MB与基本页面PTE的4KB)。显著增加了TLB覆盖范围,从而减少了TLB未命中,还可以减少页面遍历的步骤和页面遍历引起的内存读取。

为了创建大页,系统软件通常使用页面合并方法来动态组合连续的基本页,但它们在虚拟化平台上的有效性却受到了严重损害,因为需要二维页表遍历。本文发现,只有由主机大页支持的访客大页,才能有效地减少地址转换开销。现有的页面合并方法仅增加每层的大页,而没有考虑对大页对齐的跨层要求。当访客大页得到主机大页的支持时,称为对齐大页,可以充分发挥大页性能。当访客大页和主机大页未对齐时,称为错位大页,此问题可使性能降低67%。

本文方法

本文提出Gemini,设计为一个跨层解决方案,用于指导访客和主机中大页的形成和分配。一层的内存管理会感知到另一层的大页,并仔细管理与这些大页对应的内存区域。指导页面合并和大页分配时,首先考虑这些区域,然后再考虑其他内存区域。由于大页优先从这些区域形成和分配,而较少从其他区域分配,因此可以增加由主机大页支持的访客大页,而不会加剧大页带来的不利影响。

基于Linux/KVM和各种现实应用程序(如键值存储、web服务器和AI工作负载)中的原型实现的广泛评估表明,与最先进的页面合并方法相比,Gemini可以将TLB未命中率降低83%,并将应用程序性能提高126%。

实验

实验环境:DELLTM PowerEdgeTM T630,具有两个2.1GHz Intel Xeon E5-2620处理器,128GB DRAM,一个1.6TB SSD,一个Intel I350千兆网卡。每个处理器有8个物理核心,每个核心具有用于4KiB/2MiB页面的1536个L2 TLB条目,用于1GiB页面的4个数据TLB条目,用于4KiB页面64个数据TLB条目,用于2MiB/4MiB页面8个指令TLB条目,用于4KiBs页面64个指令TLB条目。

数据集:web服务器、数据库服务器、键值存储、人工智能工作负载、科学应用程序

实验对比:吞吐量、延迟、尾延迟、页面对齐数量、TLB缺失率

总结

针对虚拟化云场景,在主机端和访客端有不同的TLB,当二者的页面无法对其时会显著降低TLB性能。本文提出Gemini,用于指导访客和主机中大页的形成和分配。一层的内存管理会感知到另一层的大页,并仔细管理与这些大页对应的内存区域。指导页面合并和大页分配时,首先考虑对应区域,然后再考虑其他内存区域。由于大页优先从这些区域形成和分配,因此可以增加由主机大页支持的访客大页,而不会加剧大页带来的不利影响。


http://lihuaxi.xjx100.cn/news/2058218.html

相关文章

Harbor 的安装及使用

Harbor 安装官网手册: https://goharbor.io/docs/2.10.0/install-config/download-installer/ Harbor 发布包地址: https://github.com/goharbor/harbor/releases 在部署harbor的前提下先安装docker 和 docker-compose 安装docker:https://d…

基于ssm课程管理系统

基于SSM的课程管理系统的设计与实现 摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前学校对于课程信息的管理和控制,采用人工登记的方式保存相关数据,这种以…

表单验证、属性绑定(一个属性根据另一个属性有无进行操作)

表单验证 一个属性根据另一个属性有无进行操作(属性绑定) 1、问题描述 ​ 需求:表单里面后两个属性需要根据前面一个属性进行有无判断。如果前面属性没有输入值,则不需要进行操作;如果前面属性有输入值,则…

C#中处理文件的类以及应用程序配置文件简介

文章目录 一、C#中处理文件的类介绍二、应用程序配置文件应用程序配置文件的用途:如何使用配置文件: 一、C#中处理文件的类介绍 在C#中,处理文件的通用类是System.IO.File,它提供了一系列静态方法,可用于创建、复制、…

用stream流将list转为map

用stream流将list转为map 1、将list转为Map<Long, List> 按照spaceId分组&#xff0c;spaceId相同的为一组数据&#xff1a; List<BasEvaluationPriceResultDto> list new ArrayList(); Map<Long, List<BasEvaluationPriceResultDto>> priceResult…

一个类的名字后缀有Handler的都是有什么作用?

在Java中&#xff0c;类名后缀为"Handler"通常表示该类是一个处理器&#xff08;Handler&#xff09;。处理器是用来处理特定任务或事件的组件&#xff0c;通常在事件驱动的编程中使用。这种命名惯例在许多框架和库中都很常见&#xff0c;其中一些常见的用法包括&…

递归法解决多重背包问题

多重背包问题同样是01背包问题的变种&#xff0c;同样可以通过修改01背包部分代码来求解。 方法一&#xff1a;修改递归函数&#xff0c;根据题目新的限制条件——使用次数扩充状态参数个数&#xff0c;将同一个物品选用的次数同样作为参数传递到栈空间中&#xff0c;同时也对…

linux-c时间定时器函数timerfd

timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符&#xff0c;通过文件描述符的可读事件进行超时通知&#xff0c;所以能够被用于select/poll的应用场景。 ​ int timerfd_create(intclockid, intflags);int timerfd_settime(intfd, intflags, const st…