Meta大规模基础设施系统检测静默数据错误的方法

在大规模基础设施系统中,静默数据错误(Silent Data Corruptions, SDCs)是一个普遍存在的问题。这些被更大系统未能检测到的数据错误可能导致数据丢失,并在系统栈中传播,最终表现为应用程序级别的故障。

硬件中的SDC会影响大规模应用的计算完整性,其来源包括数据路径依赖性、温度变化和老化等因素。这类错误不会在系统日志中留下任何记录或痕迹,因此在工作负载内部保持未检测状态,并可能跨越多个服务层传播。本文探讨了在大型基础设施内检测和缓解SDC的测试策略。鉴于问题的复杂性,我们实验了不同的检测与缓解方法,并对比了两种主要途径:1) Fleetscanner(生产外测试),2) ripple(生产内测试)。通过3年以上的生产经验,我们评估了硅片测试流程相关的基础设施权衡。

在典型制造周期中,服务器或CPU会在供应商处接受几小时的测试,然后在集成商处进行几天的最佳情况下的测试,并采用抽样方式。然而,一旦组件投入生产环境,实现规模化测试就变得非常困难。因此,我们需要创新的检测方法来确保应用健康性和集群恢复能力,即通过检测并规模化地解决SDCs问题。

每次测试迭代都会占用生产负载的时间。生产外测试在从测试切换至生产负载时存在启动和关闭的过程。而生产内测试可能会遗留对负载性能产生不利影响的配置残留。当扩大到整个集群规模时,这种变异性以及所需的测试时间都变得至关重要。对于生产内测试而言,挑战在于如何以最小影响智能共置;而对于生产外测试,则是有效利用生产停机时间,同时不影响其他维护任务。

在Meta,我们实施了多种方法来检测SDCs,其中最有效的两种方法是机会主义和周期性测试,以及生产内/ripple测试。机会主义测试已在集群中运行约3年。在评估两种方法之间的权衡后,我们认为两者在检测SDCs方面同样重要,并推荐在大规模集群中同时使用和部署这两种方法。我们发现生产内测试可以在15天内检测出大约70%的集群数据损坏,而同样的损坏机会主义测试可能需要6个月才能发现。但是,最后30%的故障只能通过机会主义测试检测到,因此两种方法在故障检测方面同等重要。

我们的研究表明,静默错误可能在数据中心CPU执行的任何一组功能中发生,机器在生命周期的不同阶段都可能遇到SDCs。由于这些错误可能给基础设施带来潜在问题,我们在集群中运行一系列专有和供应商特定的测试来检测不良硬件。

我们采取两种关键的基础设施测试方法:

  1. 生产外测试(机会主义测试)
  2. 生产内测试(ripple测试)

机会主义测试:

在大规模基础设施环境中,机器通常会经历多次计划内或计划外的维护事件。我们依赖这些维护事件,在此基础上搭载并运行SDC测试。系统重启、内核升级、固件升级、设备重新映像、主机配置以及命名空间重新配置和修复等都是启用机会主义测试的维护示例。我们通过内部工具Fleetscanner实现这一机制,用于机会主义地测试SDCs。

机会主义测试允许测试具有更长的运行时间(数分钟级别),从而实现更为深入的检测。然而,机会主义测试的内在架构意味着在可疑机器或CPU的两次测试间隔之间可能发生损坏。我们测量了测试频率以评估该测试模式的有效性。目前观察到,通过上述所有机制,一台机器平均每180天经历一次机会主义测试。这个数字取决于集群规模和升级节奏,且根据机器类型有所不同。我们提供了细粒度控制,以便在敏感层级和服务上启用更频繁的机会主义测试节奏。

通过这种方式,我们在集群中成功进行了超过6800万次测试,总测试时间约为40亿秒。

Ripple测试:

尽管机会主义测试能够提供频繁的集群覆盖范围,但它不足以防止在测试窗口之间出现的生产故障,或者那些依赖于不同数据模式的故障,以及因不同操作模式间切换导致的故障。

Ripple测试通过与工作负载同步执行静默错误检测解决了上述所有问题。通过密切关注工作负载特性——基于服务预定节奏,伴随着工作负载进行影子测试并在集群中不时注入预期结果的位模式——我们可以以显著加快的速度实现全集群覆盖。我们提供了精细控制,以确定与工作负载共置执行测试的测试间隔、测试持续时间和设备配置。

由于这里的测试“涟漪”般穿过我们的基础设施,所以测试时间比机会主义测试运行时间低1000倍。Ripple测试通常在集群内为数百毫秒量级。它们基于工作负载行为进行调度,并可以按工作负载开启或关闭。鉴于缺陷的本质以及基于规模的ripple测试方法,通过独特的种子生成更多转换事件,我们能够检测到仅在数千次测试迭代后才会显现的远程故障。为了支持这种测试,我们在集群中管理了一种资源开销,但相较于更频繁的管理工作,这种开销可忽略不计。我们已将早期研究成果分享给CPU供应商,他们从我们的集群中学到了经验教训,并在其工具中实现了类似机制以取得相似效果。

通过此机制,我们每个月在集群中运行大约25亿个独特测试/测试种子。这一框架在过去几年内在集群中实时运行,并在与工作负载共置的情况下取得了近1亿秒的总测试时间。

结合机会主义和ripple测试的优点:

虽然在大规模基础设施中检测SDCs是一项挑战,但多年的测试表明,机会主义和ripple测试可以提供一种新颖解决方案,尽可能快速地规模化检测SDCs。

指标

机会主义测试

Ripple测试

测试用例数

~6800万(累计总数)

~25亿(每月数量)

测试时间

~40亿集群秒(累计)

~1亿集群秒(每月)

性能感知

独特SDC覆盖率

23%

7%

达到相同SDC覆盖率所需时间

~6个月(70%)

~15天(70%)

上表展示了上述两部分所列数字的比较。对于本文归类的缺陷类型,约70%的常见覆盖率检测可在15天内完成。机会主义测试能够在6个月内追上剩余23%的独特故障CPU,而剩余7%则通过集群内的重复ripple实例检测出来。两种测试模型各有优势。我们还不断回顾和评估这些覆盖率指标,以指导和更新我们在集群范围内围绕测试向量、测试节奏和测试运行时间的测试策略。预计随着不同类型的缺陷,覆盖率分配可能会有所不同。

历史上,每个CPU在基础设施烧录测试中仅经历几个小时的测试。进一步的测试通常通过抽样方式进行。我们观察到,为了保障应用健康性和集群弹性,需要采用新的检测方法。我们展示了在大规模环境下进行测试的能力,每月都能持续完成数十亿秒的测试。这些创新技术使我们能够检测并规模化地缓解静默数据损坏问题。

检测静默数据损坏对大规模基础设施来说是一项艰巨的任务。应用程序对这类问题表现出高度敏感性,如果没有加速检测机制,可能会在数月内暴露在这些损坏之下。这不仅会导致数据丢失,还可能需要耗费数月时间来调试和解决由静默损坏导致的软件层面残余问题。这项研究展示了源于多年观察静默损坏现象及其发生模式的研究成果,以及更快的检测时间。静默数据损坏的影响可能会对应用程序产生连锁效应,我们必须将其视为一个关键问题加以解决。因此,我们需要尽快在大规模基础上检测这些问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【探索Linux】—— 强大的命令行工具 P.22(POSIX信号量)

阅读导航 引言一、POSIX信号量的基本概念二、信号量的相关操作1 . 初始化信号量sem_init ( )(1)原型(2)参数(3)返回值(4)示例代码 2 . 等待信号量(1)sem_wait…

面试浏览器框架八股文十问十答第一期

面试浏览器框架八股文十问十答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)什么是 XSS 攻击&#…

高程 | 类与对象(c++)

文章目录 📚面向对象程序设计的基本特点🐇抽象——概括问题,抽出公共性质并加以描述。🐇封装——将抽象所得数据和行为相结合,形成一个有机的整体,形成“类”。🐇继承——在原有类特性的基础上&…

Python爬虫学习

1.1搭建爬虫程序开发环境 爬取未来七天天气预报 from bs4 import BeautifulSoup from bs4 import UnicodeDammit import urllib.request url"http://www.weather.com.cn/weather/101120901.shtml" try:headers{"User-Agent":"Mozilla/5.0 (Windows …

C/C++进制转换

十进制转化为二进制 进制转化#include <iostream> using namespace std;void change(int); int main() {int num;cout << "请输入一个十进制数: ";cin >> num;cout << "转化后的二进制数为: ";change(num);return 0; } void chan…

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

straight insertion sorting

直接插入排序算法&#xff1a;第一个元素作为有序序列&#xff0c;从第二个元素开始&#xff0c;在其之前的序列里找到对应的位置&#xff0c;然后插入。 下面用了tmp作为哨兵。 #include <iostream> using namespace std;const int Nn 100010; int a[Nn];int main() …

[嵌入式系统-26]:RT-Thread -13- 内核组件编程接口 - 文件系统

目录 一、RT-Thread文件系统 1.1 概述 1.2 如何配置文件系统 1.3 支持哪些文件系统 1.4 不同文件系统的比较 二、文件系统编程接口 2.1 概述 2.2 两种文件系统接口的比较 三、POSIX 文件操作函数 3.1 概述 3.2 代码实例 一、RT-Thread文件系统 1.1 概述 RT-Thread…

Java Lambda表达式:简化编程,提高效率

Java Lambda表达式&#xff1a;简化编程&#xff0c;提高效率 1. 使用Lambda表达式进行集合遍历1.1 未使用Lambda表达式&#xff1a;1.2 使用Lambda表达式&#xff1a; 2. 使用Lambda表达式进行排序2.1 未使用Lambda表达式&#xff1a;2.2 使用Lambda表达式&#xff1a; 3. 使用…

精通C语言:打造高效便捷的通讯录管理系统

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言项目 贝蒂的主页&#xff1a;Betty‘s blog 引言 在我们大致学习完C语言之后&#xff0c;我们就可以利用目前所学的知识去…

HCIA-HarmonyOS设备开发认证V2.0-内核扩展组件

目录 一、CPU 占用率1.1、CPU 占用率基本概念1.2、CPU 占用率运行机制1.3、CPU 占用率开发流程 二、动态加载2.1、 动态加载基本概念2.2、动态加载运行机制 坚持就有收获 一、CPU 占用率 1.1、CPU 占用率基本概念 CPU&#xff08;中央处理器&#xff0c;Central Processing U…

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档&#xff1a;https://github.com/InternLM/tutorial/tree/main/langchain 基础作业&#xff1a;复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 &#xff08;1&#xff09;数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

单html页面使用Vue3和Element-Plus

快速入门&#xff08;直接整案例&#xff0c;看显示效果&#xff09; 使用CDN方式引入Vue3使用CDN方式引入Element-Plus的样式文件和组件库 案例1&#xff08;按钮&#xff0c;表格&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta …

什么是死锁以及如何避免死锁?

死锁是多线程或多进程编程中的一个常见问题&#xff0c;发生于两个或多个进程或线程在执行过程中&#xff0c;因为争夺资源而相互等待对方释放资源&#xff0c;导致它们之间形成了一个无尽的循环等待&#xff0c;从而无法继续执行的情况。在死锁状态下&#xff0c;所有相关的进…

人工智能时代

一、人工智能发展历史:从概念到现实 人工智能(Artificial Intelligence,简称AI)是计算机科学领域中一门旨在构建能够执行人类智能任务的系统的分支。其发展历程充满曲折,从概念的提出到如今的广泛应用,是技术、理论和实践相互交织的产物。 1. 起源(20世纪中期) 人工智…

对称密钥密码体制、公钥密码体制

1 对称密钥密码体制 加密密钥与解密密钥都使用相同密钥的密码体制。 数据加密标准 DES DES 属于对称密钥密码体制&#xff0c;是一种分组密码。 在加密前&#xff0c;先对整个明文进行分组。每一个组长为 64 位。 然后对每一个 64 位 二进制数据进行加密处理&#xff0c;…

预处理和预编译、预编译头文件stdafx.h和pch.h

预处理和预编译 预处理&#xff1a;发生在编译前&#xff0c;做些代码文本的替换工作。 宏定义&#xff1a;#define宏定义的替换。文件包含&#xff1a;#include指明的源程序文件嵌入到当前源文件的指令位置处。条件编译&#xff1a;根据标识符来判断程序段是否需要编译这段代…

云计算基础-华为存储实验

存储配置流程 创建硬盘域&#xff08;CK&#xff0c;包括热备CK&#xff09;创建存储池&#xff08;CKG、Extent&#xff09;创建LUN、LUN组、将LUN加入LUN组创建主机、主机组、将主机加入主机组创建映射视图&#xff08;LUN组和主机组的映射&#xff09; 1. 创建CK 创建硬盘…

MyBatis sql拦截器实现一个自动根据租户进行分表的方案

需求描述&#xff1a; 在一个多租户系统中&#xff0c;通过 MyBatis 实现动态数据表分离。具体来说&#xff0c;您希望通过 MyBatis 拦截器在执行 SQL 时自动将表名根据当前租户 ID (tenantId) 进行修改。这样&#xff0c;每个租户的数据就可以存储在专属于它们的表中&#xf…

【数据结构】二叉查找树和平衡二叉树,以及二者的区别

目录 1、二叉查找树 1.1、定义 1.2、查找二叉树的优点 1.2、查找二叉树的弊端 2、平衡二叉树 2.1、定义 2.2、 实现树结构平衡的方法&#xff08;旋转机制&#xff09; 2.2.1、左旋 2.2.2、右旋 3、总结 1、二叉查找树 二叉查找树又名二叉排序树&#xff0c;亦称二叉搜…