2010-04-01 83 views
8

請給出用於測試C和C++分配器的基準的建議嗎?滿足以下任何方面的基準被認爲是:用於測試C和C++分配器的基準測試?

  1. 速度
  2. 碎片
  3. 併發

謝謝!

+0

你想測試什麼方面,速度,碎片等? – 2010-04-01 12:01:40

+0

我根據你的建議編輯過。謝謝。 – Viet 2010-04-01 12:04:33

回答

4

如果你問一個關於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

5

你可以下載nedmalloc並嘗試比較你的分配器。它有一個測試名爲test.c的源代碼,您可以根據您的分配器重寫該代碼。

+0

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

5

幾年前,我自己測試了幾個分配器,我的經驗是結果都取決於測試類型。如果你想自己寫一些基準,考慮以下情況:

  • 分配大量的單一大小的內存,然後釋放它所有
  • 分配許多不同大小的內存,然後釋放它所有
  • 只分配幾塊內存,釋放它們,然後重複這個循環幾次(對相同大小的塊和不同大小的塊重複)
  • 分配大量不同大小的內存,空閒一半(例如,偶數分配),然後在循環中分配並釋放內存
  • 使用兩個線程並行
  • 使用分配內存三,四,五,...線程並行

分配內存,你會發現,其結果將是每個測試不同。在一種情況下非常好的分配器在其他情況下可能不好。

實際上這意味着最好在您的應用程序中以真實/現實的情況進行測試。

+0

+1聽起來不錯Patrick。 – Viet 2010-04-01 14:23:36