【问题标题】:Benchmarks used to test a C and C++ allocator?用于测试 C 和 C++ 分配器的基准?
【发布时间】:2011-02-03 08:16:29
【问题描述】:

请就用于测试 C 和 C++ 分配器的基准提供建议?考虑满足以下任一方面的基准:

  1. 速度
  2. 碎片化
  3. 并发

谢谢!

【问题讨论】:

  • 你想测试它的哪个方面,速度,碎片等?

标签: c++ c memory memory-management benchmarking


【解决方案1】:

如果您询问 C/C++ 程序的通用分配器,那么我发现这篇论文 Hoard: A Scalable Memory Allocator for Multithreaded Applications 考虑了这个问题。这是本文档的引述

目前还没有标准套件 评估基准 多线程分配器。我们知道 没有特别强调的基准 服务器的多线程性能 Web 服务器 1 和 数据库管理员。我们选择了基准 在其他论文中描述和 否则发表(拉森 Larson 和 Krishnan 的基准测试 [22] 和来自的 shbench 基准 MicroQuill, Inc. [26]),两个 多线程应用程序 包括基准(BEMengine [7] 和 barnes-hut [1, 2]),并写了一些 我们自己强调的微基准 内存分配的不同方面 性能(线程测试,主动假, 被动错误)。

这篇论文有点旧了。然而,我最近看到了一个用于 HP-UX (MallocNextGen) 的分配器,而 HP 也不能确保它适用于所有可能的应用程序。它说:

新的分配器一般是 有望提高业绩 应用程序。然而,可能有 一些应用程序 性能可能会下降。因此用户 建议对其进行基准测试 具有默认内存的应用程序 libc 中的分配器和 使用前 libmallocng 中的分配器 生产中的新分配器 环境。

至于速度和并发性,我自己的经验是,您必须衡量自己程序的性能才能比较两个不同的分配器。如果我们谈论 Linux,您可以使用 LD_PRELOAD 来加载不同的分配器。

【讨论】:

  • +1。是的,如果没有标准的基准,那么我们应该在哪个基础上感知和解释结果?
  • 据我了解,一种想法是衡量您自己的应用程序性能。另一方面,您可以选择一组真实的程序和自己的测试来比较分配器。
【解决方案2】:

几年前我自己测试了几个分配器,我的经验是结果都取决于测试的类型。如果您想自己编写一些基准测试,请考虑以下情况:

  • 分配大量单一大小的内存,然后全部释放
  • 分配大量不同大小的内存,然后全部释放
  • 只分配几个内存块,释放它们,然后重复这个循环几次(对相同大小的块和不同大小的块重复)
  • 分配大量不同大小的内存,释放一半(例如偶数分配),然后循环分配和释放内存
  • 使用两个线程并行分配内存
  • 使用三个、四个、五个...线程并行分配内存

您会注意到每次测试的结果都会有所不同。在一种情况下非常好的分配器,在其他情况下可能很差。

在实践中,这意味着最好在您的应用程序中,在真实/真实的情况下对其进行测试。

【讨论】:

    【解决方案3】:

    您可以下载nedmalloc 并尝试将您的分配器与它进行比较。它有一个名为test.c 的测试和源代码,你可以根据你的分配器重写它。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 2017-11-07
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2011-11-27
      • 1970-01-01
      相关资源
      最近更新 更多