用于测试C和C++分配器的基准测试?
如果你问一个关于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来加载不同的分配器。
+1。是的,如果没有标准的基准,那么我们应该从哪个角度来理解和解释结果呢? – Viet 2010-04-01 14:22:57
据我了解,一个想法是衡量自己的应用程序性能。另一方面,您可以选择一组真正的程序和自己的测试来比较分配器。 – 2010-04-01 14:26:15
几年前,我自己测试了几个分配器,我的经验是结果都取决于测试类型。如果你想自己写一些基准,考虑以下情况:
- 分配大量的单一大小的内存,然后释放它所有
- 分配许多不同大小的内存,然后释放它所有
- 只分配几块内存,释放它们,然后重复这个循环几次(对相同大小的块和不同大小的块重复)
- 分配大量不同大小的内存,空闲一半(例如,偶数分配),然后在循环中分配并释放内存
- 使用两个线程并行
- 使用分配内存三,四,五,...线程并行
分配内存,你会发现,其结果将是每个测试不同。在一种情况下非常好的分配器在其他情况下可能不好。
实际上这意味着最好在您的应用程序中以真实/现实的情况进行测试。
+1听起来不错Patrick。 – Viet 2010-04-01 14:23:36
你想测试什么方面,速度,碎片等? – 2010-04-01 12:01:40
我根据你的建议编辑过。谢谢。 – Viet 2010-04-01 12:04:33