LWN:云上的休眠!

Linux内核的hibernation功能原本用于笔记本电脑,现因云服务需求重新受到关注。Amazon在2018年底增加了EC2实例休眠支持,以节省成本。该功能在云环境中面临可靠性、安全性及性能挑战,如设备状态异常、内存管理压力和I/O操作延迟。内核开发者正努力改进,包括opportunistic swapping和提高硬件一致性。

关注了就能看到更多这么棒的文章哦~

Hibernation in the cloud

By Jonathan Corbet 

May 25, 2020 

OSPM

Hibernation(休眠)通常被认为是笔记本电脑专用的功能,而且是老旧过时的笔记本电脑才会用的功能。人们通常不认为它与云服务环境有关。但是,在2020年Linux内核中的电源管理和调度峰会(OSPM)上,Andrea Righi提出,如果能让hibernation可靠地工作,那么在云系统上可能真的有一席之地。

hibernation的核心思想是彻底关闭系统,但在系统启动时会自动将其恢复到hibernation之前的状态,连当时正在运行的进程也恢复好。要做到这一点,就必须在关机前将内存中即将丢失的内容写入persistent storage来避免数据丢失。hibernation的优点是系统可以在不需要供电的情况下长久保留状态,代价是在hibernation和恢复时都会新增大量的I/O操作。

hibernation在2004年的时候是一个热门话题,当时它通常被称为 "software suspend";参见LWN内核索引条目中的software suspend词条,就能明白它当时有多热门。不过在2008年左右,当suspend-to-RAM功能(通常被称为 "suspend")开始广泛使用时,hibernation的相关开发就停滞了下来。在Ubuntu 12.04中完全放弃了对hibernation的支持。Fedora 29版本中包含了一个试验性的suspend-then-hibernate功能,但 "didn't go well",因此后来也被弃用了。他指出,现在hibernation大多时候已经没什么人提起了。

因此,当人们看到亚马逊在2018年底增加了对休眠EC2实例的支持的时候,感到非常意外。Hibernation突然就来到了云端,这与之前看到的应用场景非常不一样。Amazon的应用场景里面是希望用hibernation来暂停workload以节省成本。例如,亚马逊的 "spot instance "的优先级很低,等待空余资源。这样只要有个十分钟的提前通知,就可以把它关闭掉。这样做虽然不是很好,不过"一分钱一分货"。这是一个hibernation可以有帮助的场景。当这个instance被关闭时,它不用直接丢失所有内容了,而是可以hibernate,然后在资源再次可用时恢复工作。

How it works

Hibernation的工作原理是将内存内容写入磁盘上的 "hibernation image"镜像,此镜像会比系统中的RAM大小要小一些。数据在写入磁盘的过程中可以被压缩,并且那些可以恢复出来的page(主要是页面缓存中干净的、来自文件内容并且未被修改过数据)可以直接丢掉。Rafael Wysocki补充说,hibernation的设计是假设用户用到的大多数数据都会被swap出去了。这样一来需要备份的数据量将少于RAM size的50%。在下一次启动时,内核会检查那个计划用来恢复的映像文件,如果发现签名有效,就会把映像恢复到内存中去。然后,会用一些架构相关的特殊代码来跳转回到当初的kernel状态,这样系统就会恢复到之前的时刻然后继续执行了。

他认为,hibernation最大的问题是它是否可靠。可能没有办法100%确保可靠,系统中的各个设备,如果状态不太正常的话,都可能会导致进入hibernation的过程失败。对于hibernation过程本身来说这并不是一个大问题,因为数据都还在,尚未丢失。但是你要是非常依赖hibernation机制的话,肯定不会满意的。并且这些外设也可能会导致恢复过程出错,这样麻烦就更大了。此外kernel也有可能在休眠或resume的时候发现内存不够用了,这样整个功能就没法正常运作了。

除此之外,尽管这段代码已经有很长的历史了,但仍然有bug存在。Righi提到有一个bug在2019年底刚被修复。并且这也有security方面的影响,因为hibernation镜像在persistent storage里面保存了敏感数据。此外内存和磁盘速度可能也是个问题。他帮助过一位客户,当时看到有hibernation有超时。后来发现,他们运行在一个存储速度较慢的[Andrea Righi]instance(虚拟机)上,而timeout超时值的设置对这台机器并不合适。此外,也可能出现要保存的RAM没法塞在hibernation镜像里的问题。

他认为调试hibernation问题在任何场景下都是一个特殊的挑战,在云环境下可能更糟,尤其是你很可能无权控制hypervisor程序。

提高hibernation的可靠性,在很大程度上依赖于要使用更好的硬件设备。在这里,云场景可能具有优势,因为无论实例在哪里运行,"硬件"往往是统一的。在存储映像文件的时候,内存使用量能越小越好,这样的话就不应该使用stacked block device。内核代码应该避免在hibernation和resume过程中进行大块memory的allocation。

性能(以hibernation时间来衡量)可以通过减小hibernation镜像的大小来提高,这是通过调整/sys/power/imagesize来实现的。更小的imagesize会导致更多的可恢复内存被丢弃,从而减少所需的I/O量,但代价是恢复后文件缓存里面有用的数据就更少。增大image size则有效果相反,hibernation需要更长的时间,但系统恢复后会程序能更快地运行起来。

还有个技巧,就是在恢复系统后执行swapoff,这样可以强制将swap区的所有数据恢复到RAM中。这样系统可以很少浪费时间来进行paging操作,尽快恢复到全速运转。但是swapoff调用却总是很慢,这是因为swap代码在将数据送回RAM时没有正确使用readahead。现在在linux-next中已经有了这个问题的fix。Wysocki说,内核可以直接在resume时自动完成这个swapping in的动作,这是一个更好的解决方案。

对于未来的计划,Righi说,内核可以在空闲的时候进行opportunistic swapping(就是更加积极地进行预测和swap);这样可以把更多的数据放到persistent storage中,从而加快hibernation的速度。他已经在这方面尝试了一些hack的改动,有效果,但他希望有更好的解决方案。最后,他说,hibernation可以为基于云的系统带来一些真正的好处,但必须要先解决可靠性问题。

Rafael responds

Righi说完之后,Wysocki就接下来讲述了。他说他想回应Righi的几个观点。他同意hibernation目前用的不多,但其实他自己目前也在桌面系统上在使用(这个环境没有电池)。自2016年以来,他没有看到过一次故障。也就是说,整个系统的设计都是围绕着hibernation和resume会发生在同一台机器上的假设而设计的。甚至可以说,他对于hibernation能在cloud instance环境里面也用起来,感到非常意外。

他承认x86 hibernation代码中有很多很麻烦的bug,但其中大部分在2016年得到了修复。架构代码中的hibernation功能是挺可靠的了,但一些驱动程序仍然存在问题。不过现在大多数驱动都支持suspend,hibernation的支持一般都是基于suspend的,所以能支持hibernation的设备也非常广泛。他试过的大部分笔记本都可以开箱即用,没有出现问题,不过他承认自己没有做过大量的测试。

他重复说,他认为问题很可能出在这个场景里resume的机器可能是同之前进行hibernation的机器并不是同一台。按理来说,hypervisor提供的hardware emulation应该能保证系统基本相同,但他强调这里 "没有任何保证"。

Hibernationh支持的真正麻烦是在于它给memory-management subsystem带来了太大的压力。它迫使数据都换出到swap分区(或文件)去,采用的方法是把系统中所有memory都分配掉,同时也关闭了out-of-memory killer功能。这种情况下确实可能会出现一些奇怪现象,但是从内存管理开发人员的角度来看,这是一个不起眼的corner case,所以没有引起他们足够重视来优先改进这个地方。

关于安全问题,他说,如果云提供商要提供hibernation功能,他们就得负责对hibernation镜像文件进行加密,以及其他一些安全措施。试图在内核中加入加密功能的做法,却遭到了 "security people "的反对,他们不喜欢在这里实现一个重复功能。还有,不知道应该用什么方法来把镜像加密的密钥传递给用来做resume操作的kernel,这并不是一件容易的事情。所以,这里还是有一些挑战要面对的。

就这样,会议结束了,同时2020年的OSPM也落下了帷幕。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

代码下载链接: https://pan.quark.cn/s/a22871fb98ec 在当前高度竞争的商业环境中,个体经营者与小型仓储管理者正承受着市场压力和不断攀升的运营开支。为了有效应对这些挑战,他们迫切需要一套能够提升工作效率和经营成效的管理工具。基于此需求,一款免费的正版单机版进销存管理软件应时而生,为个体经营者和小型仓储单位提供了一站式的解决方案。 进销存管理软件是企业进行商品流通管理的关键系统,其功能涵盖了商品采购、销售及库存管理这三大核心业务流程。正版免费进销存软件的推出,不仅减轻了企业的财务负担,同时也增强了管理的便捷性和数据记录的精确度。 进货管理构成了整个进销存框架的基础。免费进销存软件配备了详尽的进货管理模块,能够完整记录每次采购的详细信息,包括供应商资料、采购量、单价和总费用等,这对于分析采购成本和控制预算具有重要作用。用户可以利用软件迅速创建采购订单,并对货物的到货状态进行监控。此外,软件还提供采购数据分析工具,协助管理者洞察市场趋势,从而制定更为科学合理的采购计划。 销售管理是进销存软件的重点功能。通过运用此类软件,用户可以精确记录每一笔销售活动,涵盖客户资料、商品规格、销售价格和折扣信息。软件能够自动生成销售凭证,简化交易过程,显著提升工作效率。再者,销售统计分析功能使管理者能够全面了解销售状况,准确识别畅销及滞销产品,进而优化销售策略,增加销售量和盈利。 库存管理对于保障业务连续性和控制成本至关重要。正版免费进销存管理软件能够实时更新库存信息,并对库存水平低于安全线的商品发出警示,有效预防缺货问题。同时,用户可以随时查询库存详情,并执行定期的库存盘点,减少不必要的库存积压,加速资金周转。软件内置的库存调拨和报废处理功能,使库存管...
内容概要:本文系统性地介绍了基于灰狼优化算法(GWO)优化BP神经网络的风电功率预测方法,并提供了完整的Matlab代码实现。该方法通过GWO算法全局寻优能力强的特点,优化BP神经网络的初始权重与阈值,有效缓解了传统BP网络易陷入局部最优、收敛速度慢等问题,从而显著提升风电功率预测的精度与模型稳定性。文中详尽阐述了数据预处理、适应度函数设计、GWO-BP模型构建流程及预测结果评估等关键技术环节,同时列举了多个智能优化算法与机器学习相结合的科研方向,涵盖电力系统优化、新能源预测、路径规划、信号处理等多个前沿领域,展现了广阔的应用前景与研究价值。; 适合人群:具备Matlab编程基础与机器学习基础知识,从事新能源发电预测、智能优化算法研究或电力系统分析的高校研究生、科研人员及工程技术开发者。; 使用场景及目标:①应用于风电场功率预测系统,支持电网调度决策与能源管理优化;②为GWO优化神经网络的建模范式提供可复现的技术参考,适用于其他时序预测任务的研究与拓展;③帮助科研人员深入理解智能算法与神经网络融合的设计思路与实现路径。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料,按照文档结构循序渐进学习,重点关注GWO-BP的优化机制与参数调优策略,动手调试并尝试迁移至光伏预测、负荷预测等相似场景,同时借鉴文中提出的创新方向以启发后续科研工作。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: **本资源原本已设置为“0积分下载”**,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,**自动将部分资源的积分调整为非0数值**(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 **因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。** 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。**强烈建议:仅在页面显示为0积分时进行下载。** 另外,本资源描述中**并未直接提供具体的下载地址或外部链接**,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
内容概要:本文系统阐述了基于Benders分解算法求解电力系统中机组组合问题的混合整数规划模型,并提供了完整的Matlab代码实现。针对机组组合这一典型的多时段、大规模、强耦合优化难题,文章采用Benders分解方法将原问题分解为整数变量主导的主问题(决定机组启停状态)和连续变量构成的子问题(执行经济调度),通过迭代生成Benders割平面反馈至主问题,逐步逼近最优解。该方法有效处理了启停成本、爬坡速率、最小开停时间等复杂工程约束,展现出良好的收敛性与计算效率。研究强调算法实现的完整性与科研复现价值,配套资源包含YALMIP建模工具包及相关案例数据,便于读者进行调试与扩展。; 适合人群:具备电力系统运行与优化基础知识,熟悉Matlab编程及数学规划建模,从事能源系统调度、运筹优化或相关方向研究的研究生、科研人员及工程技术人员(尤其适合有1–3年科研经验者)。; 使用场景及目标:①掌握Benders分解在混合整数规划中的建模思路与分解策略;②深入理解机组组合问题的数学结构及其在电力调度中的实际意义;③提升对割平面生成机制、对偶变量求解及主从问题协同迭代的编程实现能力;④用于学术论文复现、科研课题攻关或高校课程设计与教学实践。; 阅读建议:建议结合YALMIP工具箱进行模型快速构建,重点关注主问题与子问题之间的信息交互逻辑,调试时应注意对偶变量的正确提取与割平面的有效性验证,推荐下载网盘资源中的完整代码包进行运行测试与参数调优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值