用于测试C和C++分配器的基准测试?

问题描述:

请给出用于测试C和C++分配器的基准的建议吗?满足以下任何方面的基准被认为是:用于测试C和C++分配器的基准测试?

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

谢谢!

+0

你想测试什么方面,速度,碎片等? – 2010-04-01 12:01:40

+0

我根据你的建议编辑过。谢谢。 – Viet 2010-04-01 12:04:33

如果你问一个关于C/C++程序的一般分配器,那么我发现这篇文章Hoard: A Scalable Memory Allocator for Multithreaded Applications考虑了这个问题。这是本文档

报价目前还的 基准评估 多线程分配器没有标准套件。我们知道 没有特别强调的基准 服务器的多线程性能 应用程序,如web服务器1和 数据库管理器。我们选择基准 在其他文件中描述和 否则出版,二 多线程应用程序,其包括 基准(BEMengine(从Larson和克里希南 [22]和从 MicroQuill公司的shbench基准[26]拉尔森 基准) [7]和 巴恩斯小屋[1,2]),并写了一些我们自己的微基准 强调存储器分配的 不同方面 性能(threadtest,活性假, 被动假)。

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

新的分配器一般是 预计将提高应用程序的性能 。但是,某些应用程序的性能可能会降低,因此可能会有一些应用程序。因此,用户 在生产 环境中使用 新分配器之前建议衡量他们 应用程序使用默认的内存分配器 libc中,并与 分配器在libmallocng。

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

+0

+1。是的,如果没有标准的基准,那么我们应该从哪个角度来理解和解释结果呢? – Viet 2010-04-01 14:22:57

+0

据我了解,一个想法是衡量自己的应用程序性能。另一方面,您可以选择一组真正的程序和自己的测试来比较分配器。 – 2010-04-01 14:26:15

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

+0

+1谢谢AraK! – Viet 2010-04-01 14:22:03

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

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

分配内存,你会发现,其结果将是每个测试不同。在一种情况下非常好的分配器在其他情况下可能不好。

实际上这意味着最好在您的应用程序中以真实/现实的情况进行测试。

+0

+1听起来不错Patrick。 – Viet 2010-04-01 14:23:36