Principles and Methodologies for Serial Performance Optimization

Sujin Park, Mingyu Guan, Xiang Cheng, and Taesoo Kim, Georgia Institute of Technology

主要贡献

本文针对计算机系统中顺序执行性能优化的长期挑战,提出了一种系统化的方法。核心问题是顺序任务的优化对整体性能至关重要,因为根据Amdahl定律,系统的最大加速潜力受顺序部分限制。尽管并行处理取得进展,但顺序瓶颈的优化仍是基础。本文的研究目标是定义顺序性能优化的结构化框架,包括三个原则(任务移除、更换和重排序)以及从中提炼的八种可操作方法论:批处理、缓存、预计算、延迟、放松、上下文化、硬件专化和分层。这些方法论通过对过去十年OSDI和SOSP论文的审查,证明其全面覆盖了观察到的顺序优化策略。创新点包括将这些方法论合成统一框架,将开放式优化挑战转化为结构化过程,并引入SysGPT,一个基于精选文献微调的GPT模型,用于提供上下文感知的性能建议。此外,通过文件存储系统和内核同步的案例研究,展示了框架的实际价值,并揭示了未利用的优化机会。

背景知识/关键观察/设计原则

顺序性能优化的定义和挑战。 顺序性能优化是系统设计中的基本挑战。Amdahl定律(公式1)[8,Validity of the single processor approach to achieving large scale computing capabilities, 1967, AFIPS Conf. Proc.] 提供了通过利用多个处理器实现计算任务加速潜力的洞见。该定律指出,通过并行化程序的最大可能加速($S_{parallel}$)受必须顺序执行的程序部分(串行分数$F_{serial}$)限制。换言之,它强调并非程序的所有部分都能并行化,因此即使有无限额外资源,程序运行速度始终有限。很明显,增加$F_{parallel}$(并减少$F_{serial}$)会导致更好性能。然而,缺乏系统方法来优化程序的$F_{serial}$。此外,许多问题(程序)由于组成任务之间的计算依赖性无法并行化,使得优化$F_{serial}$成为加速程序的唯一方式。

串行分数的定义。 程序的串行分数在确定整体运行时间中起关键作用,并在优化性能中具有重要意义。我们将程序的串行分数($F_{serial}$)定义为任务序列$t_1, t_2, \dots t_n$,如公式2所示。

公式1和2
公式1和2

公式3和4
公式3和4

在许多常见场景中,任务序列被迭代执行,重复任务的优化是性能提升的主要焦点。每一次迭代称为一个epoch,公式3表示执行一个epoch的经过时间,通常表示延迟。$S_n$ 表示上述定义的任务序列,$F$ 表示处理$S_n$所需的执行时间,其中$n$ 是任务数量($S_n$的长度)。公式4定义了吞吐量,提供在给定时间框架内可以执行的epoch数量的洞见。

性能优化的原则。 在追求提升顺序工作负载的系统性能时,焦点在于优化任务序列$S_n$,以最终减少运行时间$F(S_n)$。鉴于优化目标是顺序的,$F(S_n)$ 由序列$S_n$ 和执行它的硬件确定性地影响。除了完全重写$S_n$ 外,有三种战略方法:序列中任务的移除、更换或重排序。以下三个原则界定了这些策略:

性能优化步骤的图示
性能优化步骤的图示

图1:性能优化的步骤。

研究范围。 我们的研究针对优化系统性能的顺序部分,具体关注吞吐量和延迟。吞吐量反映系统在给定时间框架内处理任务的能力,例如请求处理速率、模型训练速度或数据扫描速度。延迟测量响应性,包括每个请求或每个操作的时间,并提供实时性能和用户体验的洞见。我们仅关注优化现有系统,不包括安全、能源使用、空间效率、容错和可维护性等关注点。我们还排除全新算法的设计,因为我们的目标是优化现有算法。

性能优化的步骤。 性能优化是一个多步骤、迭代过程,涉及低效识别、解决方案设计、实现和评估。虽然问题识别和评估的工具和基准已成熟,但中间步骤——设计和实现解决方案——仍主要依赖研究者的专业知识、创造力和经验。这些阶段通常最具挑战性,因为它们需要深入的系统知识以及预测变化如何与更广泛的系统动态交互的能力。在此背景下,本文聚焦于为第二步建立系统方法:设计解决方案。

方法细节

八种优化方法论的概述。 系统优化技术的景观广阔且通常非正式讨论,对于存在多少种不同策略或它们如何相互关联缺乏共识。在本节中,我们提炼了过去十年系统社区性能优化研究的成果,并定义了八种可操作方法论,这些方法论共同形成了顺序性能优化的结构化框架:批处理(§3.1)、缓存(§3.2)、预计算(§3.3)、延迟(§3.4)、放松(§3.5)、上下文化(§3.6)、硬件专化(§3.7)和分层(§3.8)。我们通过移除、更换和重排序的原则解释每种方法论,详细说明其理由和对顺序性能的影响,并用代表性系统论文的例子说明。为了经验验证框架的覆盖范围,我们对过去十年在OSDI和SOSP发表的477篇论文进行了详尽审查。我们的分析表明,这些八种方法论集体涵盖了过去十年实践中观察到的所有常见顺序性能改进模式。

批处理。 当计算一批项目的成本低于单独计算每个项目的总成本时,将这些项目组合成批次将提升整体效率。如表1 (a)所示,对于每个epoch,重复成本(x2、x4和x6)跨epoch产生,这些成本随着每个epoch的迭代重复累积。通过批处理,如表1 (b)所示,这些单个块被合并成一个大块(x7)。为了确保批处理的功效,必须满足两个条件:优化序列的长度应比原始序列短,且批处理项目的运行时间应更短。在三个原则(§2.1)方面,批处理是一种有效利用所有三个原则的方法。首先,批处理通常通过合并计算产生益处。通过合并重复任务,特别是当每个任务产生显著开销时,可以减少整体运行时间。比较原始序列和批处理序列,后者移除x2和x4(Prm),并用x7替换x6(Prep)。除了Prm和Prep,整体运行时间改善。NEVE [44,NEVE: Nested Virtualization Extensions for ARM, 2017, SOSP] 是这种方法的一个例子(详见表2)。批处理还本质上延迟较早的任务,直到收集到一批任务。因此,它有潜力通过在批处理请求时丢弃过时任务(Prm)来减少要处理的任务总数,从而减少整体运行时间。例如,组提交和写缓冲批处理多个更新并以延迟和批处理方式应用修改,从而一些已删除或更新的过时数据不再需要提交。EAW [23,Exploiting Nil-Externality for Fast Replicated Storage, 2021, SOSP] 通过允许应用在提交前更新日志中的批处理项目来实现此方法。此外,当应用批处理时,任务顺序被重排序(Pord)。例如,最初x2位于x1和x3之间,但优化后,x1和x3将连续执行。因此,批处理可能被用于最大化数据的空间和时间局部性。IX [11,IX: A Protected Dataplane Operating System for High Throughput and Low Latency, 2014, OSDI] 在网络栈的每个阶段高效采用此策略。此概念还与缓存(§3.2)密切相关,因为批处理最终通过改善局部性提供更大的缓存机会。一般来说,批处理项目可以通过消除任务间的冗余成本实现更高带宽和吞吐量。然而,此方法可能导致延迟延长,因为批次中初始较早的任务可能等待后续任务到达,且处理批次通常比处理单个任务需要更长时间。

八种方法论的总结,包括其基础原则、视觉表示、必要条件和战略应用
八种方法论的总结,包括其基础原则、视觉表示、必要条件和战略应用

表1:八种方法论的总结,详细说明其基础原则、视觉表示、必要条件和战略应用。

缓存。 虽然批处理移除任务间的冗余成本,但缓存处理随时间推移的冗余成本。缓存的基本思想是将计算结果保存在内存中,并在以后重用,从而避免冗余计算并利用先前计算的值。表1 (c)说明缓存如何优化随时间推移的成本。为了使缓存有效,计算冗余(x4和x6)必须超过使用和维护缓存的开销。此开销涉及将计算结果存储在缓存中的成本(x7)和从中检索旧结果的成本(x' 和 x')。换言之,缓存利用Prep,通过用缓存结果替换冗余计算。因此,缓存本质上以增加内存使用为代价减少整体运行时间。在现有系统上引入新缓存层涉及识别可以战略缓存以提升性能的常见操作。表2显示了优化流处理 [60,Drizzle: Fast and Adaptable Stream Processing at Scale, 2017, SOSP] 和VM分配 [27,Protean: VM Allocation Service at Scale, 2020, OSDI] 的此类例子。除了向当前系统引入额外缓存层,还可以通过修改现有结构揭示更多缓存机会 [58,How to get more value from your file system directory cache, 2015, SOSP]。此外,许多努力致力于优化缓存策略,确定要缓存什么。选择性缓存频繁访问(热)数据在具有不均匀访问模式的环境中特别有效,以提高缓存命中率 [7,K9db: Privacy-Compliant storage for web applications by construction, 2023, OSDI]。

采用每种方法论以改善延迟或吞吐量的示例论文列表
采用每种方法论以改善延迟或吞吐量的示例论文列表

表2:采用每种方法论以改善延迟或吞吐量的示例论文列表。

预计算。 预计算通过战略地将任务移动到更早时间来优化性能,允许它们在实际需要之前执行。任务甚至可以在epoch开始之前移动到更早时间,如表1 (d)所示。虽然向前移动任务可能不会直接减少其执行时间,但它可以通过将任务移出关键路径(Prm)并利用否则空闲或竞争较少的资源来优化未来性能敏感执行的性能。另一方面,任务可以在epoch内重新排列,以寻求更好的局部性机会并减少执行时间(Pord)。Duet [21,Caladan: Mitigating Interference at Microsecond Timescales, 2020, OSDI] 在表2中作为一个示例案例,它重排序任务以更好地利用缓存。提前执行工作依赖于两种类型的推测。首先,它涉及推测任务将在不久的将来被需要。例如,主动任务执行作为防止关键操作期间意外开销的预防措施,确保对其执行的更好控制 [9,Opportunistic storage maintenance, 2015, SOSP]。其次,预计算基于当前信息推测性地执行任务,而不是等待完整信息视图可用 [10,Sharding the Shards: Managing Datastore Locality at Scale with Akkio, 2018, OSDI]。这种主动方法可以通过确保任务在需要时准备好,从而最小化等待时间并加速整体工作流来显著提升系统性能。然而,为了充分利用预计算的益处,必须精确决定何时以及哪些任务提前执行,因为不正确的推测可能引入开销。

延迟。 与预计算相反,延迟将任务推迟到更晚时间,采用懒惰方法。任务可以延迟到epoch之外(Prm)或在epoch内移到更晚时间(Pord)。延迟任务的一个主要动机是预期其在推迟时最终减少运行时间。例如,延迟任务允许它使用最更新的可用信息做出更好决策 [17,Chardonnay: Fast and general datacenter transactions for On-Disk databases, 2023, OSDI]。此外,如前所述,延迟任务的策略可以与批处理机会有效结合,因为多个延迟任务可以一起执行。作为批处理例子的NEVE [44,NEVE: Nested Virtualization Extensions for ARM, 2017, SOSP] 也利用延迟,展示了这两个方法论之间的密切关系(§4.2)。一些延迟例子甚至预期任务可能最终被取消。如果任务可能无用,它可以被考虑延迟。如果它确实证明不必要,任务可以被跳过,从而防止系统在从未需要的任务上浪费资源。乐观决策示例了此场景,根植于假设某些事件如并发冲突 [12,Take out the TraChe: Maximizing (tra)nsactional ca(che) hit rate, 2023, OSDI] 或崩溃不会发生,从而延迟它们的处理直到实际发生。延迟任务的另一个理由是优先考虑性能敏感序列$S_n$,即使它可能损害以后性能。在任务在$S_n$ 中不是立即必要且可以延迟的场景中,它可以在$S_n$ 完成后懒惰执行 [13,From ARIES to MARS: Transaction support for next-generation, solid-state drives, 2013, SOSP]。

放松。 在某些情况下,精确或彻底的答案是不必要的,而合理准确的近似就足够。当工作负载和上下文可以容忍适度不准确或不一致时,现有系统可以被修改以通过近似执行减少任务大小,从而提供更快结果。如表1 (e)所示,放松用显著更短的任务替换现有任务(Prep),或甚至完全跳过它们(Prm)。例如,采样是一种流行的放松方法,它分析数据的小子集而不是整个数据集 [14,Coz: Finding code that counts with causal profiling, 2015, SOSP]。尽管处理数据的小部分,采样旨在提供反映整体数据集的洞见,从而促进更快分析和决策。除了准确性,其他软件要求如一致性 [15,Clof: A compositional lock framework for multi-level numa systems, 2021, SOSP] 或可用性 [16,Performance and protection in the ZoFS user-space NVM file system, 2019, SOSP] 可能在追求性能时被妥协。

上下文化。 系统设计与实际工作负载执行之间通常存在语义差距。设计决策往往旨在满足一般要求,由于对未来使用的 uncertainty,但这种缺乏工作负载意识可能阻碍最优性能。为了桥接此差距,现有系统通常通过将运行时上下文纳入决策过程来定制。此上下文通常通过收集执行期间可用数据获得 [17,Chardonnay: Fast and general datacenter transactions for On-Disk databases, 2023, OSDI]。表1 (f)说明了一个系统执行额外任务以告知未来决策的案例。虽然这些可能产生运行时开销(表示为x7),但由此产生的性能(Prep)改进通常证明成本合理。或者,在关键路径外剖析工作负载特征启用无运行时惩罚的专化 [18,Interruptible tasks: Treating memory pressure as interrupts for highly scalable data-parallel programs, 2015, SOSP]。eBPF 还通过让应用引导内核向更高效、工作负载感知的行为来帮助桥接语义差距 [19,TriCache: A User-Transparent Block Cache Enabling High-Performance Out-of-Core Processing with In-Memory Programs, 2022, OSDI]。

硬件专化。 为特定硬件配置定制一般系统设计是另一种常见方法。针对硬件的优化主要涉及确定哪些任务应在哪些硬件上执行,考虑工作负载特征和硬件规格。例如,许多研究为特定硬件要求定制现有一般系统,如非易失性内存、非均匀内存访问 [62,Nap: A Black-Box Approach to NUMA-Aware Persistent Memory Indexes, 2021, OSDI]、FPGA [66,FAERY: An FPGA-accelerated Embedding-based Retrieval System, 2022, OSDI] 或SmartNIC [22,Witcher: Systematic Crash Consistency Testing for Non-Volatile Memory Key-Value Stores, 2021, SOSP]。在表1 (g)中,任务x4 在不同硬件(F')上执行,该硬件可以更高效执行它,导致运行时间减少($F(x_4) > F'(x_4)$)。当为特定硬件优化现有系统时,利用硬件的优势必须超过过渡到该硬件产生的软件开销(x7、x8)。

分层。 层是系统设计中定义的逻辑划分或抽象,用于组织和结构化系统的组件。每个层封装特定功能或服务集,帮助模块化系统并使其更容易理解、维护和扩展。虽然层提供清晰的结构益处,但它们也引入性能开销,源于层间的额外处理、通信或间接。分层,最后一种方法论,通过减少与层相关的开销来优化顺序性能——通过合并多个层、更高效分解层,或在适当情况下选择性绕过层。绕过。 它涉及在系统中创建捷径或替代路径,以避免不必要的步骤或过程,从而减少延迟并改善整体性能。在表1 (h)中,x4 通过快速路径完全跳过(Prm)。许多现有工作绕过内核栈 [5,File systems unfit as distributed storage backends: Lessons from 10 years of Ceph evolution, 2019, SOSP; 16,Performance and protection in the ZoFS user-space NVM file system, 2019, SOSP; 19,TriCache: A User-Transparent Block Cache Enabling High-Performance Out-of-Core Processing with In-Memory Programs, 2022, OSDI; 21,Caladan: Mitigating Interference at Microsecond Timescales, 2020, OSDI; 29,The nanoPU: A Nanosecond Network Stack for Datacenters, 2021, OSDI; 37,Rocksteady: Fast Migration for Low-latency In-memory Storage, 2017, SOSP; 40,KV-Direct: High-Performance In-Memory Key-Value Store with Programmable NIC, 2017, SOSP; 46,Scale and Performance in a Filesystem Semi-Microkernel, 2021, SOSP; 48,Snap: A microkernel approach to host networking, 2019, SOSP; 54,Arrakis: The Operating System is the Control Plane, 2014, OSDI; 57,Willow: A User-Programmable SSD, 2014, OSDI; 68,XRP: In-Kernel Storage Functions with eBPF, 2022, OSDI] 并在用户空间处理操作,以消除用户和内核之间上下文切换开销,从而对运行时要求有更灵活控制 [23,Exploiting Nil-Externality for Fast Replicated Storage, 2021, SOSP]。去层化。 它减少系统架构中的层数。这种简化整合多个抽象层并移除它们之间的软件开销 [24,Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services, 2002, SIGACT News]。去层化通常牺牲一般性、灵活性或功能以在特定场景中实现改进性能。表1 (h)显示了一个场景,其中两个任务被合并成单个更大层,有效减少整体运行时间。去层化不仅将现有层组合成一个,还最小化中间开销,利用Prm和Prep。虽然去层化和绕过都旨在减少执行的层数,但它们的方法不同。去层化重构系统架构本身以具有更少层,从而简化系统。相反,绕过选择性跳过现有层而不修改底层架构——跳过的层保持存在,并在其他上下文中可能仍被执行。解耦。 与去层化相反,解耦将一个层拆分成多个层。解耦旨在最小化系统内不同组件或模块之间的依赖性。此策略通过松散部分之间的耦合来提升更精细控制和执行,允许对一个组件的更改不影响其他。此外,通过松散层间依赖,它为并行化打开更多机会。在表1 (h)中,x2 被解耦成x12和x22。尽管由于更多层可能产生层间额外开销,但益处源于它提供的更精细控制。例如,成为可能执行x1或x2单个而不是执行更大x2,或为每个任务实现不同逻辑 [25,Systems performance: enterprise and the cloud, 2014, Pearson Education]。

利用每种方法论的论文数量。由于每篇论文可能采用多种方法论,方法论累计计数超过我们范围内的论文总数
利用每种方法论的论文数量。由于每篇论文可能采用多种方法论,方法论累计计数超过我们范围内的论文总数

图2:利用每种方法论的论文数量。由于每篇论文可能采用多种方法论,方法论累计计数超过我们范围内的论文总数。

案例研究:统计。 为了经验评估八种方法论在提升系统性能中的完整性,我们系统分析了过去十年从2013到2022年在OSDI和SOSP会议发表的全部论文。审查过程严格进行,每篇论文由两个不同审阅者独立审查以确保准确性和最小化偏差。2023和2024年的论文有意排除在此分析之外,以作为评估我们微调模型的新鲜数据集,如§5所述。如图2所示,我们对477篇论文的分析揭示271篇不聚焦于顺序任务的性能优化。在剩余206篇性能相关论文中,每种用于提升现有性能的技术都与我们的八种方法论之一对齐。此外,这些方法论通常结合使用。平均而言,研究论文利用大约2.01种方法论,展示了改进系统性能的多维度方法的必要性。表2提供了在SOSP 2021呈现的文件和存储系统论文的详细分解,作为案例研究以说明方法论在给定领域内的实际应用。它提供了方法论如何在实践中被利用来解决文件和存储系统挑战的洞见。此外,我们提供了直接从方法论派生的进一步性能优化建议。

方法论之间的关系。 通过八种方法论优化系统性能不是孤立的;相反,这些策略通常相互关联,并在结合应用时放大彼此。批处理和延迟是密切交织的优化策略。批处理聚合多个操作以集体执行它们,本质上修改它们的执行时机。例如,写缓冲示例了批处理和延迟的结合使用,因为它积累多个写操作以在以后时间一起执行它们,提高数据传输和写效率。此方法不仅最小化重复、立即操作,还战略延迟执行到更合适时刻,从而利用批处理和延迟来提升性能。解耦将紧密集成组件分离成更细粒度子任务,提升模块化和灵活性。这种分离促进单个组件的更针对性优化。通常,为特定硬件配置或软件要求的专化需要初始解耦集成机制。这确保修改最小且不意外影响任何其他系统组件。例如,Akkio [10,Sharding the Shards: Managing Datastore Locality at Scale with Akkio, 2018, OSDI] 在客户端应用和数据存储系统之间引入中介层,以将分片数据分配与管理分离。因此,这允许应用指定比现有分片小得多的自己的分片大小,并确定数据跨分片的分布,促进针对每个应用需求的定制分片分配。类似地,解耦可以启用更有效的缓存机会,特别是当任务输出子集随时间重用时。例如,Tsai et al. [58,How to get more value from your file system directory cache, 2015, SOSP] 首先将权限检查与目录查找解耦,允许权限结果独立缓存和重用,为常见操作创建快速路径。

将方法论应用于实际问题。 在探索方法论的实际应用以改进系统性能时,我们为OSDI'22的一篇论文《Application-informed kernel synchronization primitives》[53,Application-Informed Kernel Synchronization Primitives, 2022, OSDI] 带来一个案例研究。该论文引入SynCord,一个框架,使应用开发者能够为内核锁部署自定义行为。内核锁是内核内的同步原语,以确保并发线程不同时访问共享资源或代码的关键部分。当多个线程同时请求相同锁进入关键部分时,锁实现内部将这些线程组织成等待队列。此过程确保有序锁获取,并允许仅一个线程在任何时刻进入关键部分。因此,关键部分和锁实现本质上是串行的($F_{serial}$)且无法从并行化受益。因此,优化这些串行组件具有显著改进性能的潜力。

SOSP'21呈现的文件和存储系统论文的完整列表。每篇论文标注了用于改进性能的相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层。还提供了从这些方法论派生的进一步优化建议
SOSP'21呈现的文件和存储系统论文的完整列表。每篇论文标注了用于改进性能的相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层。还提供了从这些方法论派生的进一步优化建议

表3:SOSP'21呈现的文件和存储系统论文的完整列表。每篇论文标注了用于改进性能的相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层。还提供了从这些方法论派生的进一步优化建议。

图3展示了SynCord用于提升锁性能的策略以及它们如何与我们的方法论对齐。主要地,SynCord在等待队列中维护并发线程并允许动态重排列等待者。SynCord的一个关键贡献是将其重排序策略与锁机制解耦,允许策略部分在用户空间管理(1)。因此,它允许用户空间创建自己的锁获取顺序规则,促进内核锁行为专化以满足特定工作负载需求或要求(2)。使用用户定义策略,SynCord动态重排序等待队列中的线程,而不是传统的先进先出策略(3)。例如,如果线程有短关键部分,它可能被优先并移动到前面,或如果它在较慢核心上操作,它可以被延迟到后面。此战略重排序考虑到底层硬件,如通过将来自相同NUMA节点的线程批处理在一起(4)来移除它们之间的缓存线反弹(5)。此外,SynCord提供API以完全绕过内核锁,允许在用户空间以用户自己的风险重新定义它(6)。虽然此方法放松了安全保证,但它揭示了性能提升的机会。虽然SynCord纳入了我们的大多数方法论,但两个方法论仍未直接采用,这具有进一步优化的潜力。第一个是缓存。为了容纳各种用户定义锁策略,SynCord通过影子变量[45,Shadow Variables, 2018, https://www.kernel.org/doc/Documentation/livepatch/shadow-vars.txt] 提供辅助数据,存储为内核中的键值存储。在锁性能至关重要的场景中,线程通常反复积极获取和释放锁。因此,为此辅助数据引入缓存机制将允许在后续访问时重用先前访问的数据,从而进一步减少每次使用锁重复搜索键值存储的相关开销。另一个被忽略的机会是去层化。为了保护内核免受潜在故障用户代码的影响,SynCord将用户定义策略编译成eBPF [20,A thorough introduction to eBPF, 2017, https://lwn.net/Articles/740157/] 字节码,允许通过eBPF验证器进行静态分析。然而,eBPF程序的执行在每次使用锁时引入额外开销。一个潜在优化涉及一旦用户定义策略程序通过静态验证器,就将其编译成本机代码,启用直接执行。此方法将消除锁机制和用户提供策略之间的中介开销。总之,此案例研究说明了方法论的成功应用。而且,探索额外方法论如缓存和去层化呈现了进一步优化的潜在途径。它不仅展示了这些方法论在实际研究工作中的适用性,还突出了其作为检查表的作用,以最大化性能优化并最小化任何潜在机会的遗漏。

SynCord [53]的策略与我们的方法论整合。SynCord利用大多数方法论来优化内核锁的性能。而且,使用方法论,我们识别了两个潜在优化机会:缓存和去层化
SynCord [53]的策略与我们的方法论整合。SynCord利用大多数方法论来优化内核锁的性能。而且,使用方法论,我们识别了两个潜在优化机会:缓存和去层化

图3:SynCord [53]的策略与我们的方法论整合。SynCord利用大多数方法论来优化内核锁的性能。而且,使用方法论,我们识别了两个潜在优化机会:缓存和去层化。

SysGPT:系统性能的提示。 为系统性能优化设计有效解决方案仍是一个开放式且直觉驱动的过程,通常依赖经验而非结构化指导。虽然识别瓶颈和评估结果的工具已成熟,但中间步骤——制定可操作解决方案——通常缺乏系统支持。为了解决此差距,我们引入SysGPT,一个微调[4,Fine-tuning, 2024, https://platform.openai.com/docs/guides/fine-tuning#preparing-your-dataset] 大语言模型(LLM),提供上下文感知的优化建议。我们的目标是使我们的方法论更适用于现实世界优化工作流。虽然标准LLM如GPT-4 [3,OpenAI Models: GPT-4, 2024, https://platform.openai.com/docs/models/gpt-4] 在广泛语料上训练,但它们通常产生模糊或过于冗长的输出,缺乏系统级决策所需的具体性。因此,我们调查是否一个内化十年系统研究提炼洞见的模型可以提供更针对性和实际可行的建议。

实现。 为了构建SysGPT,我们首先基于我们对2013到2022年发表的所有SOSP和OSDI论文的全面审查构建了微调数据集。此语料包含广泛的系统性能问题,每个问题标注了问题描述、观察和原始论文中采用的解决方案策略。解决方案标注了我们§3定义的分类中的适用方法论,以及它如何用于解决问题的简洁解释。数据集跨越多样系统领域,包括文件和存储系统、数据库、机器学习基础设施等。值得注意的是,我们排除了2023和2024年的论文,以仅用于评估目的,如§5.2和§5.3所述,确保SysGPT在未见例子上测试。使用此数据集,我们微调GPT-4o [2,OpenAI Models: GPT-4o, 2025, https://platform.openai.com/docs/models/gpt-4o] 以产生SysGPT,一个领域专化的LLM,提供顺序系统性能优化的结构化建议。

用于微调SysGPT的提示。观察可以包括背景、现有挑战、相关工作等。基于系统和用户提供的描述,助手提出多个优化系统性能的建议。每个建议明确与八种方法论相关联,并伴随其应用的简要解释
用于微调SysGPT的提示。观察可以包括背景、现有挑战、相关工作等。基于系统和用户提供的描述,助手提出多个优化系统性能的建议。每个建议明确与八种方法论相关联,并伴随其应用的简要解释

图4:用于微调SysGPT的提示。观察可以包括背景、现有挑战、相关工作等。基于系统和用户提供的描述,助手提出多个优化系统性能的建议。每个建议明确与八种方法论相关联,并伴随其应用的简要解释。
图5:从上传论文自动提取问题描述和观察的提示。提示明确指示模型仅识别和提取相关问题和观察,同时排除任何提出的解决方案。

训练期间使用的提示格式如图4所示。一旦微调,SysGPT可以交互使用。给定系统性能问题和上下文,模型返回一组优化策略,每组根植于我们的方法论并由简要理由支持。为了支持可重复性和促进系统和LLM交集的未来研究,我们发布我们的完整数据集和评估基准[1,Sysgpt, 2025, https://github.com/sslab-gatech/SysGPT]

定性结果。 我们首先检查SysGPT是否产生比基线模型更可行和有意义的建议。评估优化建议的质量本质上具有挑战性。目前没有为此任务建立的基准,且建议的效用很大程度上取决于它如何在实践中被解释和应用。由于响应的有效性通常仅在用户在上下文中阅读和推理建议时变得清晰,我们在本节中包含SysGPT和基线GPT-4生成的实际输出,以进行直接检查和比较。表4比较了SysGPT和基线GPT-4的响应。测试集包括2023年SOSP和OSDI的所有数据库相关论文,这些论文从我们的训练数据中排除。为了确保全面覆盖和消除选择偏差,我们包括所有10篇数据库论文的完整列表,即使那些不主要聚焦于性能优化的论文。其中6篇处理性能相关问题,而剩余的聚焦于安全、隐私或可维护性等主题。为了确保科学严谨性,我们仅使用每个案例的第一个模型输出,温度设置为0以确保确定性行为。由于空间限制,表中包含总结句子,虽然大多数直接从完整模型输出中提取。为了消除准备测试集输入的人类偏差,我们使用具有知识检索能力的单独GPT-4o模型自动从每篇论文中提取问题语句和观察。图5所示的提取提示明确指示模型仅包括问题和相关观察,同时省略论文中描述的任何解决方案或贡献。此设置确保两个模型仅基于它们在相同输入下的自身推理被评估,且评估管道完全自动化,无人类干预。由于问题和观察直接源自原始论文,一个强模型应生成与作者提出的解决方案有意义对齐的建议。在此上下文中,SysGPT一致产生高度对应于ground-truth解决方案的输出,通常不仅匹配方法论,还匹配特定实现细节。例子包括具体推荐如“通过在缓存中单独存储热/冷数据设置不同寿命”或“将范围索引解耦成前端暂存缓冲和后端索引更新”。相反,GPT-4倾向于产生更泛化的响应,如“利用运行时启发式”或“实现内存中缓存层”,这些响应较不具体且通常缺乏可操作指导。为了进一步验证此区别,我们进行了基于LLM的比较分析,遵循语言模型评估的标准实践。在此设置中,GPT-4o [2,OpenAI Models: GPT-4o, 2025, https://platform.openai.com/docs/models/gpt-4o] 作为独立评估者,任务是判断两个模型输出中哪个更密切对齐论文的实际解决方案。此评估的提示如图6所示。对于测试集中的42篇论文中的37篇(88%),评估者更喜欢SysGPT的输出而非基线。这强烈偏好源于SysGPT提供更相关和详细建议的能力,这些建议更好地对齐系统研究者设计的实际解决方案。例如,在Nomad [63,Nomad: Non-Exclusive memory tiering via transactional page migration, 2024, OSDI] 的案例中,评估者指出SysGPT的响应“直接地址三个关键策略中的两个:上下文化和延迟,清晰聚焦于基于应用行为优化内存管理和减少不必要迁移。”这展示了SysGPT的方法论如何启用它为真实系统问题生成更针对性和可操作建议。对于剩余5篇GPT-4o输出被偏好的论文,评估者的理由主要聚焦于更广泛策略覆盖而非建议质量。例如,在CHIME [47,Chime: A cache-efficient and high-performance hybrid index on disaggregated memory, 2024, SOSP] 的案例中,评估者指出虽然GPT-4o的响应覆盖所有三个组件(批处理、上下文化和预计算),但它缺乏关键实现细节如RDMA使用和热点缓冲设计。相反,SysGPT为批处理和预计算提供了更实际和详细建议,虽然它错过了上下文化方面。这突出了SysGPT在提供具体、可操作推荐方面的优势,即使它偶尔优先深度而非优化策略覆盖的广度。

SOSP'23和OSDI'23的数据库论文完整列表,显示问题和观察(P+O)、标准GPT-4和SysGPT的建议,以及实际解决方案。解决方案和建议标注了相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层
SOSP'23和OSDI'23的数据库论文完整列表,显示问题和观察(P+O)、标准GPT-4和SysGPT的建议,以及实际解决方案。解决方案和建议标注了相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层

表4:SOSP'23和OSDI'23的数据库论文完整列表,显示问题和观察(P+O)、标准GPT-4和SysGPT的建议,以及实际解决方案。解决方案和建议标注了相应方法论:(1)批处理,(2)缓存,(3)预计算,(4)延迟,(5)放松,(6)上下文化,(7)硬件,(8)分层。

提示。基于LLM的比较评估
提示。基于LLM的比较评估

图6:提示。基于LLM的比较评估。

定量结果。 虽然§5.2中的定性结果突出了模型生成建议的具体性和可行性,但它本质上是解释性的。为了提供更客观证据,我们还包括定量评估,评估模型在给定系统性能问题时如何准确识别适用的优化方法论。

任务定义。 我们将评估框架化为多标签分类任务:给定系统性能问题及其相关观察,模型必须从§3定义的八种中预测适用的方法论集。然后,我们评估这些预测如何与相应论文中实际使用的方法论对齐。此公式化启用使用标准分类度量如精确度、召回率和F1分数进行可测量评估。它还通过聚焦于模型是否正确识别底层优化原则来减少开放式解决方案生成涉及的主观性。

评估设置。 测试集包括2024年在OSDI和SOSP发表的所有性能相关论文(96篇中的42篇)。这些论文不仅从微调数据集排除,还在基线GPT-4o模型[2,OpenAI Models: GPT-4o, 2025, https://platform.openai.com/docs/models/gpt-4o] 和SysGPT的知识截止日期(2023年9月30日)后发布。因此,两个模型都没有访问这些论文的内容,确保在真正未见例子上的公平评估。每篇论文基于作者描述的实际解决方案标注ground-truth方法论。我们比较三种方法:(1)基线GPT-4o模型,(2)使用3、5和10个例子的GPT-4o的少样本提示,以及(3)我们的微调SysGPT。少样本例子从我们的训练集中抽取,并在给定10个例子(N=10)时仔细选择以覆盖所有八种方法论。每个提示构建在图4所示的结构上。它在系统提示中包括分类的简要描述,以及N个代表性输入-输出例子和模型输出的格式指令。所有模型使用相同输入——问题描述和观察——如图5所述自动提取进行评估。这确保任何性能差异反映模型的推理能力而非提示质量、输出格式或对测试案例的先前暴露的差异。度量。 我们报告八个方法论标签的微平均精确度(正确预测方法论的分数)、召回率(正确识别的ground-truth方法论的分数)和F1分数(精确度和召回率的调和平均)。部分匹配被考虑;例如,如果ground truth是(批处理、缓存)且模型预测(批处理、预计算),这计为一个真阳性、一个假阴性和一个假阳性。

在SOSP/OSDI'24测试集上的方法论预测评估。我们比较SysGPT和GPT-4o在少样本提示(N=0、3、5、10)下有/无top2输出约束
在SOSP/OSDI'24测试集上的方法论预测评估。我们比较SysGPT和GPT-4o在少样本提示(N=0、3、5、10)下有/无top2输出约束

表5:在SOSP/OSDI'24测试集上的方法论预测评估。我们比较SysGPT和GPT-4o在少样本提示(N=0、3、5、10)下有/无top2输出约束。

结果。 表5总结了我们的评估结果。SysGPT在F1分数上明显优于所有GPT-4o配置,展示了使用方法论感知监督的微调导致更准确和相关预测。在其默认形式中,GPT-4o倾向于无论输入上下文枚举几乎所有方法论,导致每个查询平均6.23个建议。此行为导致高假阳性数量——导致低精确度和高召回率——并最终产生噪声和无帮助输出。为了补偿GPT-4o的过度生成倾向,我们添加了限制其输出到top-2最有前景方法论的约束。虽然此调整改进了GPT-4o的精确度,但现在召回率显著下降,且整体F1分数仍低于SysGPT。我们相信此改进源于SysGPT在微调期间暴露于具有正确标记方法论的现实解决方案模式。此训练使SysGPT更有效地过滤无关建议并聚焦于基于问题和观察的 feasible 策略。为了评估非确定性采样下的鲁棒性,我们评估性能(Best@k)跨多个温度设置(T=0.1、0.3、0.5、0.7)和试验(k=1、3、5、10),反映平均用户从多次试验中可能期望的。对于每个温度,我们生成k个样本并报告相对于ground truth的最佳评分预测。如图7所示,SysGPT在所有温度设置和试验计数上一致实现更高分数,比GPT-4o平均F1分数改进39.1%。这展示了SysGPT的方法论感知训练即使在变化采样条件下也启用更稳定和可靠预测。这些结果验证SysGPT的性能提升不仅仅由于与训练数据的风格对齐,而是源于其改进能力以识别相关优化原则。方法论感知微调改进了精确度(更少无关建议)和召回率(更全面覆盖),并泛化到以后出版年的未见论文。这展示了SysGPT不仅仅再现过去解决方案,而是学习可转移推理模式,适用于新系统性能问题。

在温度值为0.1、0.3、0.5和0.7下的非确定性采样下的F1分数。对于每个温度,我们生成k个响应并报告k次试验中的最佳分数(Best@k)
在温度值为0.1、0.3、0.5和0.7下的非确定性采样下的F1分数。对于每个温度,我们生成k个响应并报告k次试验中的最佳分数(Best@k)

图7:在温度值为0.1、0.3、0.5和0.7下的非确定性采样下的F1分数。对于每个温度,我们生成k个响应并报告k次试验中的最佳分数(Best@k)。

讨论:补充因果剖析。 性能优化是一个多方面挑战。优化顺序代码不是万能药,且对一个任务的改进并不总是转化为端到端性能提升。如Coz [14,Coz: Finding code that counts with causal profiling, 2015, SOSP] 论文所示,如果组件不在关键路径上,加速它可能对整体性能影响小或无影响。Coz引入因果剖析,一种量化加速程序不同部分潜在影响的技术,以识别优化最有效的部分。一旦识别此类区域,挑战就成为如何有效优化它们。这就是我们工作的贡献。虽然Coz识别高影响优化目标,但我们的方法论提供了实现这些优化的系统框架。它们共同形成互补性能优化管道,指导聚焦位置和如何进行。

任务间协调。 虽然我们的框架以单个序列建模性能,但协调多个任务通常对实现系统级性能改进至关重要。在多线程和分布式环境中,任务间交互——如共享资源竞争、调度延迟或通信开销——可能主导执行时间,即使单个操作被优化。使任务执行对齐以减少竞争、基于硬件拓扑调度工作或重叠通信和计算的策略是广泛认可的技术,用于改进吞吐量和延迟。然而,这些协调策略通常需要跨多个执行上下文推理,超出我们顺序模型的假设。虽然一些协调效果——如改进局部性或延迟执行——可以通过批处理或重排序部分捕获,但对任务间动态的完整处理仍超出当前范围。将我们的方法论扩展以纳入协调感知技术代表未来工作的有前景方向。

SysGPT的局限性。 SysGPT针对性能优化的第二步:设计解决方案。因此,其有效性取决于输入质量和后续实现。明确定义的问题和详细观察产生精确、可操作建议,而模糊输入可能导致泛化建议。SysGPT以自然语言提供概念指导,但不直接修改代码。因此,实现和评估仍需要开发者专业知识。我们设想一个未来,其中整个优化管道——从性能监控和解决方案设计到代码生成和评估——被自动化。实现此愿景将需要在程序分析、合成和系统工具方面取得重大进展。我们的工作向此目标迈出一步,提供自动化性能优化的基础。

相关工作。 优化系统性能一直是计算机系统研究的长期愿望。除了无数旨在通过多样策略提升各种系统性能的研究,还有一些努力探索性能优化的高层方法论。Lampson [38,Hints and Principles for Computer System Design, 2021] 提供了计算机系统设计的提示和原则,建议原则如简单性、及时性、效率、适应性、可靠性和可取性。虽然Lampson对效率的讨论部分与我们系统性能优化的目标对齐,但它主要依赖直觉和高层次想法。相反,我们的工作采用系统方法来优化顺序执行方面的系统性能,通过定义基本原则并经验验证四个方法论的完整性,对过去十年进行审查。我们说明这些方法论如何实际应用于有效解决现实世界问题,通过案例研究和SysGPT,显著扩展了现有性能优化文献。《Systems Performance》书[25,Systems performance: enterprise and the cloud, 2014, Pearson Education] 也提供了改进性能和减少延迟的方法论。然而,它针对系统管理员并解释更好系统监控的实际工具。基于各种性能分析工具和理解它们的背景介绍,该书指导如何更好地使用现有系统和工具,而不是如我们的工作那样根本优化系统设计本身。与CAP定理[24,Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services, 2002, SIGACT News] 类似,后者指出分布式系统只能优化一致性、可用性和分区容忍中的两个,我们的方法论定义了系统性能优化的边界。两个框架都帮助缩小探索范围,引导开发者向可行和实际改进。

实验环境

数据集:基于2013-2022年OSDI和SOSP的477篇论文构建的微调数据集,包含性能问题、观察和解决方案标注;测试集为2023-2024年的论文,用于定性和定量评估。模型架构:基于GPT-4o微调的SysGPT,训练时使用特定提示格式(图4),输出结构化建议。硬件配置:未明确指定GPU/CPU细节,但涉及标准LLM训练环境。软件配置:使用OpenAI的微调API,语言为自然语言处理,依赖GPT-4o基模型;数据集和基准开源于GitHub。

实验结果

统计分析实验:审查477篇论文,其中206篇聚焦性能,平均每篇使用2.01种方法论,所有优化技术均覆盖八种方法论(图2);文件存储系统案例(表3)展示了方法论应用和进一步建议。

SysGPT定性评估:在2023年数据库论文上,SysGPT的建议更具体且与实际解决方案对齐(如热/冷数据分离),优于GPT-4的泛化输出;LLM评估显示88%案例偏好SysGPT(表4)。

SysGPT定量评估:在2024年42篇论文的多标签分类任务中,SysGPT的F1分数高于GPT-4o(包括少样本变体),平均改进39.1%;在不同温度和试验下保持稳定(表5、图7)。

案例研究结果:在SynCord上,方法论识别了缓存和去层化作为未利用机会(图3);整体验证框架完整性。

结论

顺序系统性能优化仍是系统研究中的基本但往往缺乏结构的任务。我们提出基于三个核心原则——移除、更换和重排序——的系统化框架,并将其提炼成过去十年系统文献中常用的八种可操作方法论。此分类澄清了优化机会空间,并提供关于性能的系统语言。在此基础上,我们引入SysGPT,一个微调LLM,训练用于提出根植于此方法论的策略。在未见论文上的评估中,SysGPT在定性和定量评估中显著优于GPT-4基线,展示了其生成针对真实系统性能问题的针对性、可操作建议的优越能力。未来工作可扩展到协调感知技术和自动化优化管道。