没有合适的资源?快使用搜索试试~ 我知道了~
0HAL Id:tel-039877300https://theses.hal.science/tel-03987730v20提交日期:2023年2月14日0HAL是一个多学科开放获取存档,用于存储和传播科学研究文档,无论其是否发表。这些文档可以来自法国或国外的教育和研究机构,也可以来自公共或私人研究中心。0HAL多学科开放获取存档,旨在存储和传播法国或国外教育和研究机构、公共或私人实验室发表或未发表的研究级科学文献。0多核操作系统中的线程调度:如何理解、改进和修复调度器0Redha Gouicem0引用此版本:0RedhaGouicem。多核操作系统中的线程调度:如何理解、改进和修复调度器。操作系统[cs.OS]。巴黎索邦大学,2020年。英文。NNT:2020SORUS052。tel-03987730v20计算机科学博士论文0多核操作系统中的线程调度0如何理解、改进和修复调度器0Redha GOUICEM0巴黎索邦大学巴黎第六大学计算机实验室Inria Whisper团队0博士论文答辩:2020年10月23日,法国巴黎0评审委员会成员:0Pascal Felber先生,全职教授,續夏泰尔大学评审员VivienQuéma先生,全职教授,格勒诺布尔国立工程学院(ENSIMAG)评审员RachidGuerraoui先生,全职教授,洛桑联邦理工学院考官KarineHeydemann女士,副教授,巴黎索邦大学考官Etienne Rivière先生,全职教授,鲁汶大学考官GillesMuller先生,高级研究科学家,Inria顾问Julien Sopena先生,副教授,巴黎索邦大学顾问0摘要0在这篇论文中,我们从几个角度解决了多核架构的调度器问题:设计(简单性和正确性),性能改进以及开发特定应用程序的调度器。总结所提出的贡献如下:0•Ipanema,一种专门用于多核架构线程调度器的领域特定语言。我们还在Linux内核中实现了一种新的抽象,可以动态添加用Ipanema编写的调度器。0•一系列性能和错误跟踪工具。借助这些工具,我们展示了Linux调度器CFS在现代处理器上的频率管理问题。我们提出了一个解决方案,以补丁的形式提交给社区。该补丁可以显著提高许多应用程序的性能。0•以“特性树”的形式实现的调度器模型。我们独立实现这些特性,以提供一种新的完全模块化的调度器。这种模块化调度器使我们能够全面研究不同特性的组合,为特定应用程序调度器的开发铺平了道路。0iiiv0摘要0在这篇论文中,我们从多个角度讨论了多核架构的调度器问题:设计(简单性和正确性),性能改进以及为特定应用程序开发定制调度器。总结所提出的贡献如下:0•Ipanema,一种专门用于多核处理器进程调度器开发的语言。我们还在Linux内核中实现了一种新的抽象,可以动态添加用Ipanema编写的新调度器。0•一系列性能错误搜索工具。通过这些工具,我们展示了Linux的调度器CFS在现代处理器上存在与频率管理相关的问题。我们提出了一个解决方案,以一个提交给社区的补丁的形式。这个补丁可以显著提高许多应用的性能。0•将调度器建模为“特征树”。我们独立实现这些功能,以提供一个完全模块化的新调度器。这个模块化调度器使我们能够全面研究不同功能组合,为特定应用程序的调度器开发铺平了道路。vii0致谢0尽管这篇论文署名为我,但它是四年来与其他研究人员、同事、朋友和家人的合作、讨论和支持的结果。研究不是孤立个体的工作,而是一个合作的事业,既在桌前进行,也在咖啡休息时间或家庭晚餐时进行。话不多说,让我们感谢参与这项工作的每一个人。0首先,我要感谢评审人Pascal Felber和VivienQuéma,他们花时间仔细阅读和评估这篇论文。我还要感谢考官RachidGuerraoui、Karine Heydemann和EtienneRivière,他们同意成为这个评审委员会的一部分。0这篇论文的完成离不开Gilles Muller和JulienSopena的指导和监督。Gilles,你在写作论文和组织合适的人员方面的专业知识使得这篇论文比原本更容易。我将努力保持清晰表达自己思想的严谨性,这是我在与你合作中学到的。尽管过去两年的环境困难重重,但你总是在我需要帮助时随时可得。Julien,你是激发我对系统和研究兴趣的人之一。每天与你一起工作是一种愉悦,我们分享了许多想法,每一个都比前一个更疯狂,但总是相关的。我对你从你那里学到的所有东西,作为一个科学家和一个人类,永远感激不尽。非常感谢你们两个给我这四年的激动人心。你们两个教会了我如何进行良好的系统研究,我希望能够达到你们的期望。我还要特别感谢JuliaLawall,她虽然不是我的正式导师,但在这四年期间对我提高写作和批判性思维方面帮助很大。还要特别感谢我的合著者Baptiste Lepers,Jean-PierreLozi和NicolasPalix。与你们每一个人一起工作并分享所有这些富有成果的讨论是很棒的,这些讨论提高了我的工作质量。0博士生活可能会让人感到压力重重,想要放弃。在这些时刻,身边有一个团结的群体是至关重要的。这种团结精神在LIP6特别强大,尤其是在我与Whisper、Delys和MoVe这三个团队中度过大部分时间的时候。viii0当我开始我的博士学位时,我受到了一些非凡的人们的欢迎,他们使我的融入变得容易。我非常感谢Antoine、Gauthier和Damien,他们对我和其他许多学生的指导。我希望我对新生的指导能像你们对我的指导一样好。我还要感谢所有其他的博士生和实习生,我有幸与他们共度每一天:Alexandre、Arnaud、Bastien、Cédric、Célia、Daniel、Darius、Denis、Dimitrios、Florent、Fran- cis、Gabriel、Guillaume、Hakan、Ilyas、Jonathan、Laurent、Lucas、Lu-dovic、Lyes、Marjorie、Maxime、Pierre、Saalik、Vincent、Yoann。为了不冒犯任何人,名单按字母顺序排序 :)0我也特别欣赏高级研究人员和学生之间的良好氛围。我要感谢他们所有人作为老师和/或同事向我传授的知识。感谢Jonathan,Luciana,Marc,Pierre,Pierre-Évariste和Swan,谢谢你们一切。特别感谢KarineHeydemann,在我有点迷茫时帮助我选择申请哪个硕士专业。我现在仍然记得那次讨论,已经将近7年了,我为此感激。0除了实验室的所有朋友,我还要感谢那些对计算机科学研究一无所知但仍然支持我的其他朋友。Liazid,Manil,Sami,除了欢笑,我真的知道如果我在任何事情上需要帮助,你们将是第一批回答的人,我为此感激。感谢LSCHandball的所有队友,我们保持了强烈的团队精神,无论是胜利还是失败。没有你们,我可能有时会有点疯狂。还要特别感谢Ilyas和Maxime,感谢你们带给我的欢笑和计算机科学的时刻。很高兴能把你们算作我从大学时代就认识的朋友。0最后,但同样重要的是,我要感谢我的家人一直以来对我的坚定支持。妈妈,爸爸,我永远无法偿还你们为我所做的一切。你们总是鼓励我努力工作,我很高兴我听从了你们的建议。感谢我的兄弟Djelloul,Hichem,Mourad和我的妹妹Amel,谢谢你们帮助我成为我现在的样子,并在这些年里支持我。0这些致谢比我开始写作时最初打算的要长,也更严肃。有一次,我尝试了不连续讲笑话超过五分钟的挑战,这是四年前我可能无法克服的挑战。再次感谢你们每一个人,如果我忘记了任何人,请原谅我,那可能是无意的。2.8Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . .413.1The Ipanema Tool Chain . . . . . . . . . . . . . . . . . .443.3The Ipanema DSL Through Policies. . . . . . . . . . .503.5Property Verification . . . . . . . . . . . . . . . . . . . .593.7Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . .674.1Example of a Performance Bug in CFS . . . . . . . . . .690目 录01 简介 101 . 1 调度器开发 . . . . . . . . . . . . . . . . . . . 201 . 2 性能增强 . . . . . . . . . . . . . . . . . . . . . . . . 301 . 3 应用特定调度器 . . . . . . . . . . . . . . . 301 . 4 大纲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 线程调度 502 . 1 执行实体 . . . . . . . . . . . . . . . . . . . . . . . 502 . 2 硬件资源 . . . . . . . . . . . . . . . . . . . . 602 . 3 线程调度 . . . . . . . . . . . . . . . . . . . . . 1002 . 4 Linux内核中的调度 . . . . . . . . . . . . . . 1802 . 5 通用操作系统调度器 . . . . . . . . . . . . . . . . . . . 2402 . 6 用户级调度器 . . . . . . . . . . . . . . . . . . . 3602 . 7 虚拟化调度器 . . . . . . . . . . . . . . . . . . . 3903 使用ipanema编写调度器 4303 . 2 领域特定语言方法 . . . . . . . . . . . . . . . . . . . . . . 4503 . 4 调度器作为内核模块 . . . . . . . . . . . . . . . . . . . . . . . . 5403 . 6 评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . 6204 频率-通知调度决策 6904.2监控和可视化工具7004.3调查性能错误7404.4动态频率调整7804.5处理CFS中的频率反转8604.6评估8804.7讨论10204.8结论10305面向特性的调度程序分析10505.1 CFS特性分析10605.2调度程序的特性模型11005.3特性评估11505.4找到最佳的应用程序调度程序12805.5结论1290ix0x目录06结论13106.1调度程序开发13106.2性能增强13206.3应用程序特定调度程序1330出版物1350生成的软件1360参考文献1390索引1610缩写162110引言0在1951年,Ferranti Mark1和UNIVAC计算机发布。这两台机器是第一批商业化的图灵完备机器,能够执行以打孔纸带形式的任意程序。由于其高昂的成本,此类机器仅由政府机构、大学和大公司购买。20世纪50年代最受欢迎的计算机IBM650的成本为50万美元(2020年相当于476万美元)。0他们执行了大量不同的程序,从科学计算到会计和国家普查。这些机器由人工操作员操作,将代码和数据加载到机器中,等待计算完成并检索结果。这些操作员在其正常运行中起着基础作用,因为他们确保程序的执行顺序。这是第一种调度形式。随着计算机处理能力的增加,与计算时间相比,人工操作的成本变得重要。为了最小化这种成本,计算机设计师试图将调度程序作为计算机的一部分,并取代人工操作员。随着1955年操作系统(OSs)的引入,第一个软件调度程序作为计算机资源管理的核心组件出现了。从那时起,已经开发出了大量的调度算法。它们针对不同的工作负载和性能目标。一些服务器应用程序需要最小化其请求的延迟,而批处理应用程序需要最大化其吞吐量。对于个人计算机和智能手机,用户的互动性至关重要。另一方面,嵌入式设备在服务质量和遵守截止日期方面可能有严格要求。调度程序还受到计算机底层硬件组件的演变的影响,无论是中央处理单元(CPUs),内存还是输入/输出(I/O)设备。多核处理器的出现扩展了调度程序的工作。除了管理程序应该何时执行外,它还必须选择在哪个核心上执行。非一致性存储访问(NUMA)架构,异构处理器和内存层次结构进一步增加了正确分配计算资源的问题。02引言0工作负载和用户需求的多样化以及硬件的迅猛发展一直是调度器开发的推动力。将硬件复杂性和软件需求结合起来,极大地加大了调度器决策过程的难度,并增加了其设计的复杂性。0在这篇博士论文中,我们研究线程调度以及它如何影响应用程序的性能。我们旨在为调度器开发人员提供帮助的新工具。我们的工作可以分为三个方面:调度器开发、性能提升和应用程序特定调度器。01.1调度器开发0第一个方面,调度器开发,旨在简化操作系统中新调度器的开发,同时保持高水平的安全性。开发调度器很困难,因为它涉及多个专业领域:调度理论、底层内核开发和硬件架构。这大大增加了开发过程中出错的概率。调度算法中的错误可能导致重要属性被开发人员无意中违反。由于在操作系统内核中开发的困难,实现错误经常发生,可能导致系统崩溃。此外,对硬件架构了解不足可能导致调度策略效率低下,因为存在内存延迟或异构计算单元等因素。我们的目标是通过提供易于学习的高级领域特定语言(DSL)来消除对内核开发专业知识的需求,该语言将被编译成可在Linux中使用的C代码。我们的编译器通过禁止非法操作和自动生成锁管理等代码来提高代码的安全性。DSL的抽象还将包含硬件拓扑,以帮助开发人员考虑这一点。我们还希望通过允许对调度属性进行形式化验证来避免算法错误,这可以通过我们的DSL进行半自动执行。此外,我们还为Linux提供了一个新功能,即内核模块作为调度器或SaaKM。有了这个功能,我们可以在运行时插入新的调度策略。然后,每个应用程序可以决定使用哪个策略。我们的Ipanema编译器生成的C代码与SaaKM兼容。借助SaaKM和我们的DSL,我们开发和测试了多个调度器,例如一个简化版本的Linux调度器,在我们评估的应用程序集上的性能与原始版本相似。我们还01.2性能提升30开发了一个经过验证为工作保持的版本的调度器,在某些应用程序上优于原始版本。01.2性能提升0第二个方面,性能提升,旨在帮助调度器开发人员发现性能错误。这些错误不会导致崩溃,但会悄悄地降低性能。因此,它们很难被注意到和解决。检测此类错误有两种方法:产生一个不受此错误影响的更好的调度器,或使用性能分析工具来突出显示错误。我们设计了监控工具来高效地分析调度器的行为,并设计了可视化工具来轻松跟踪性能错误并确定其来源。这些工具使我们能够在运行时记录调度事件,而不会干扰应用程序的行为,并具有高分辨率。它们还允许我们可视化特定数据,如每个核心的CPU使用率、频率或所有调度事件。借助这些工具,我们发现了一个新问题,即频率反转,它源于现代每核心动态频率缩放和调度器对CPU频率在线程放置决策中的无感知。这个问题会导致高频率核心处于空闲状态,而低频率核心处于繁忙状态。在找到这个问题的根本原因后,我们提出了两种解决方案来解决这个问题,并对它们进行了全面评估。最佳解决方案已提交给Linux社区进行审查。此外,我们还通过我们的监控工具对多个CPU的频率缩放算法的行为进行了详细分析。这种分析得益于我们的监控工具,并进一步加强了我们的观点,即调度器必须考虑核心的频率。01 . 3 应用特定调度器0第三个也是最后一个轴,应用特定调度器,旨在帮助软件开发人员为其应用程序选择最佳调度器,而不是始终使用操作系统的默认调度器。尽管通用调度器试图具有通用性并为大多数工作负载提供良好的性能,但它们并不能始终提供最佳性能。这主要是由于两个主要问题:它们的代码结构和大小以及必要的配置。代码结构和大小问题在通用调度器(如Linux的CFS)中非常突出。它们往往很大,具有相当多的功能。这些功能也往往是交织在一起的,无论是在代码还是影响方面。这增加了安全或性能错误的可能性,并加大了代码的维护难度。选择通用性也会带来一个根本性的问题:由于用户的期望不同且有时相互冲突,因此不可能始终满足每个人的期望。为了解决这个问题,大多数通用调度器可以通过在编译时静态配置或在运行时动态配置来进行配置。由于很难找到给定工作负载的正确配置,大多数用户只使用操作系统提供的默认值。对于更高级的用户,还存在许多用户提供的配置和系统管理员论坛上的技巧。我们建议从头开始构建一个实际的模块化调度器。为此,我们开发了一个调度器的特征模型,其中每个特征都是独立实现的,使其易于扩展。该模型还允许对每个特征进行单独评估,而不受其他特征的影响。通过这样的评估,我们提出了一些方法来找到适合给定工作负载的最适合的特征。最后,我们提出了从这些数据构建应用特定调度器的方法。04 简介0本文的剩余部分分为五章。第2章介绍了线程调度的技术背景和最新研究成果。它提供了理解我们的贡献所需的必要知识。第3章介绍了我们的第一个贡献,即调度器的DSLIpanema。我们介绍了语言的设计、工具链以及我们在Ipanema中实现的多个策略的评估。第4章介绍了我们的第二个贡献,即识别出一个新问题——频率反转,并提出解决该问题的策略。这个问题源于CPU上现代频率缩放的实现以及当前通用调度器在线程放置时的行为。我们通过详细的案例研究介绍了这个问题,并在多台机器上对Linux上的两种解决策略进行了广泛评估。第5章介绍了我们的最后一个贡献,即线程调度器的特征模型。该模型旨在评估调度器的各个特征,以便设计应用特定调度器。我们提出了各种方法来找到最适合给定应用程序的调度器。最后,第6章总结了本论文的工作和贡献,并讨论了未来的工作和展望。01 . 4 概述0本章旨在定义本论文中使用的线程调度的基本概念,并向读者提供必要的技术背景,以理解我们的贡献。线程调度器是系统中负责将计算资源分配给软件的组件。在本章中,我们首先定义了线程调度器管理的硬件和软件资源。然后,我们详细描述了线程调度器是什么以及它们如何运作。最后,我们描述了线程调度在各种系统中的实现方式,重点关注Linux。250线程调度0本章旨在定义本论文中使用的线程调度的基本概念,并向读者提供必要的技术背景,以理解我们的贡献。线程调度器是系统中负责将计算资源分配给软件的组件。在本章中,我们首先定义了线程调度器管理的硬件和软件资源。然后,我们详细描述了线程调度器是什么以及它们如何运作。最后,我们描述了线程调度在各种系统中的实现方式,重点关注Linux。02.1执行实体0在操作系统理论中,有多个概念描述软件及其执行方式:线程、进程、任务等。计算机科学家倾向于混淆这些术语,在其上下文中使用一个术语而不是另一个术语通常不会造成意义的丧失。然而,在调度方面,使用一个术语而不是另一个术语将是一个错误,并导致误解。为了避免这种误解,本论文将在整个过程中使用以下定义。图2.1总结了每个描述实体之间的层次关系。0线程。线程是执行指令的实体,也是线程调度器操作的最小实体。它通常由指令指针(IP)、堆栈指针(SP)和寄存器表示。当调度器分配计算资源给线程时,线程执行其IP指向的指令。线程可以在内核级别或用户级别处理。内核线程由操作系统内核管理,而用户线程由用户级程序(如语言运行时或库)操作。最终,用户级线程被映射到内核线程,以便由操作系统内核进行调度。在本论文中,除非另有说明,否则术语“线程”将用于内核线程。0进程。进程表示一组资源,包括内存映射、文件描述符、套接字等。至少有一个线程使用进程。如果多个线程共享一个进程,则需要进行通信。06线程调度0程序0进程线程0进程0线程0图2.1:多线程进程的程序示意图。0由于共享资源的存在,进程间通信相对简单。另一方面,进程间通信更加复杂,依赖于操作系统提供的进程间通信机制。0程序。程序或应用程序是由一个或多个进程组成的一组资源,其中包含一个或多个线程,它们合作以实现共同的目标。例如,一个每个标签页生成一个进程的网络浏览器仍然被视为单个程序。0任务根据上下文的不同,术语“任务”有不同的含义。在Linux中,它被用作线程或进程的同义词。在Java语言中,它既可以是线程的同义词(使用Thread类时),也可以是任何线程可以执行的工作单元(使用Executor接口时)。由于这种歧义,本论文将不使用术语“任务”。02.2硬件资源0线程调度器是系统中管理计算单元的软件组件。这些计算单元自计算机诞生以来就发生了巨大的演变。图2.2显示了现代计算机的硬件拓扑结构。在这个拓扑结构中,有执行单元(核心)、内存加速器(缓存)和主内存。其中一些组件是共享的,而其他组件是独占的。所有这些交互使得计算资源的分配对于调度器来说是一项复杂的工作。我们介绍不同的硬件组件,它们可能的交互以及对线程调度器的影响。02.2.1核心:执行单元0核心,也称为硬件线程,是处理器芯片中最小的计算单元。它执行单个线程的指令。02.2硬件资源70核心核心0φ核心0核心核心0φ核心0核心核心0φ核心0核心核心0φ核心0L10L10L10L10L20L20L20L20L3 RAM0图2.2:一个单节点8核机器,每个物理核心(ϕ核心)有两个线程和三级缓存0一次执行的最大线程数。这是线程调度器实际管理的资源,将其分配给特定时间段内的软件线程。核心通常由一组寄存器和计算单元组成。寄存器存储正在运行的线程使用的数据以及用于管理线程的元数据,例如指令指针或堆栈指针。计算单元执行各种计算,例如算术运算(算术逻辑单元(ALU))、浮点运算(浮点单元(FPU))或地址计算(地址生成单元(AGU))。0芯片级多处理。自20世纪50年代以来,计算机体系结构的许多创新改善了核心的个体性能。指令级并行技术,如指令流水线、推测执行[19]或乱序执行[80],在调度方面没有影响,只是更高效地执行指令。然而,线程级并行技术改变了线程调度器的操作方式,允许多个线程同时运行。芯片级多处理(CMP)通过将多个核心集成到单个芯片中来实现线程级并行。每个核心都是相同的,因此可以独立地执行不同的线程。使用CMP,调度器现在可以选择同时运行多个线程。0核心寄存器APU FPUAGU0芯片0核心寄存APU FPUAGU0芯片核心寄存器APU FPU AGU0核心寄存0APU FPUAGU0芯片核心寄存器0单核心0CMP0SMT0图2.3:线程级并行实现0同时多线程。早期,计算机架构师注意到所有计算单元不会同时使用,导致计算资源的浪费。为了解决这个问题,他们引入了同时多线程(SMT)[160]。SMT的思想是通过复制部分硬件(主要是寄存器)在同一个物理核心上运行多个线程。这些副本被称为逻辑核心。例如,英特尔®最常见的SMT实现Hyper-Threading[85]允许每个核心运行两个线程,即对于n个物理核心,有2n个逻辑核心可用。在本论文中,我们将使用术语“核心”来指代逻辑核心,因为调度器将线程放置在这种核心上。SMT对线程调度产生影响,因为两个共享相同计算单元的核心无法同时执行某些操作。图2.3总结了CMP和SMT之间的区别。on this kind of core. SMT has an impact on thread scheduling becausesome operations will be impossible to perform simultaneously by twocores sharing the same computing units. Figure 2.3 summarizes thedifference between CMP and SMT.08个线程调度0非对称架构。一些处理器芯片还具有具有不同功能的核心。这些非对称架构可以有专门用于某种类型计算(如视频或音频解码)的核心,也称为异构架构[71, 86,145]。这种架构的另一个用途是嵌入式设备上的能量管理。例如,ARM®big.LITTLE架构[11]具有一组低功耗和低性能核心(LITTLE)以及一组更强大且功耗较高的核心(big)。使用其中一组核心对性能和能量消耗有很大影响。动态电压和频率调整的实现0(DVFS)技术也可以看作是一种不对称性形式。实际上,如果每个核心可以以不同的频率运行,它们都有不同的可用处理能力。这将在第4章中详细讨论。02.2.2 缓存:内存访问加速器0当核心执行计算时,它们通常使用主存储器中可用的数据。访问这个存储器是软件中的频繁操作,因此研究人员致力于提高内存访问效率。一种广泛采用的方法是在核心和主存储器之间放置小型硬件缓存。缓存比主存储器快,但更昂贵。目标是利用两个属性:时间局部性[182]和空间局部性[109]。时间局部性指的是最近访问的数据在不久的将来有很高的被再次访问的概率。为了利用这个属性,使用缓存将最近访问的数据保持在靠近使用它们的核心附近。空间局部性指的是当访问一段数据时,相邻数据在不久的将来有很高的被访问的概率。为了利用这个属性,当一段数据被加载到缓存中时,相邻数据也会被加载以供将来访问。因此,计算机架构师设计了靠近核心的快速且小型的缓存以及更远离核心但更接近内存的较慢但更大的缓存层次结构。在图2.2中可以看到这一点,有三个级别的可用缓存。缓存还可以用于在核心之间轻松共享数据。在我们的示例中,有两个仅供单个物理核心使用的缓存级别(L1和L2),以及一个在所有核心之间共享的级别(L3)。共享在多个核心访问相同数据时是有益的,无需再次从主存储器中加载它。performance by allowing multiple threads to run concurrently withfast memory accesses.With the rising number of cores, the number of requests to mainmemory has drastically increased. At the same time, technologies be-hind main memory evolved more slowly than those behind processors.With more than a dozen cores, main memory cannot keep up with thenumber of requests and respond in an acceptable time.02.2 硬件资源90然而,如果所有核心使用不同的数据,它们将竞争相同的缓存位置,导致数据驱逐和随后的主存储器访问。这种现象称为缓存抖动。缓存共享或抖动对调度决策产生影响,因为不同的线程放置可能导致更多或更少的共享和抖动。02.2.3 主存储器:潜在瓶颈0尽管缓存减少了内存访问次数,但主存储器仍然是一个关键资源。一些访问无法被缓存,一些访问模式使缓存成为一种低效的优化。因此,主存储器仍然是一个潜在的性能瓶颈。0对称多处理。多核设计(CMP和/或SMT)和连接到单个主存储器的缓存层次结构的耦合使用被称为对称多处理(SMP)。4存在多个定义,包括或不包括缓存,但我们将在本论文的其余部分使用这个定义[43]。0架构使用互连将所有组件连接在一起,从缓存到主存储器和I/O设备。5一个主要特点是,无论进行访问的核心是哪个,访问内存的成本都是相同的。这些SMP架构通过允许多个线程与快速的内存访问并发运行来大大提高性能。随着核心数量的增加,对主存储器的请求数量急剧增加。与此同时,主存储器背后的技术发展速度比处理器慢。拥有十几个核心,主存储器无法跟上请求的数量,并在可接受的时间内响应。05互连可以是共享系统总线或点对点互连。0非统一内存架构。解决这个问题的一种方法是在主存储器上应用与核心相同的方法:复制。机器被分割成节点,如图2.4所示。一个节点可以被看作是一个SMP系统,具有一组核心、缓存和自己的主存储器。目标是限制同时访问同一主存储器的核心数量。理想情况下,每个节点都是一个封闭的系统,核心只能访问其节点的主存储器,即本地存储器。然而,每个节点完全隔离的系统几乎是不可能的。一些数据必须在节点之间共享,原因包括来自操作系统或跨多个节点的大规模应用的数据。因此,节点之间相互连接,以允许给定节点上的核心访问另一个节点的存储器,即远程存储器。远程访问不像本地访问那样快,因为它们必须通过额外的互连进行。这些非统一内存
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功