Тесты, используемые для тестирования распределителя C и C ++? - PullRequest
8 голосов
/ 01 апреля 2010

Пожалуйста, сообщите о тестах, используемых для тестирования C и C ++ распределителя? Учитываются критерии, удовлетворяющие любому из следующих аспектов:

  1. Скорость
  2. Фрагментация
  3. параллелизм

Спасибо!

Ответы [ 3 ]

7 голосов
/ 01 апреля 2010

Несколько лет назад я сам тестировал несколько распределителей, и мой опыт показывает, что все результаты зависят от типа теста. Если вы хотите самостоятельно написать некоторые тесты, рассмотрите следующие ситуации:

  • выделяет много памяти одного размера, затем освобождает все
  • выделяет много памяти разных размеров, затем освобождает все
  • выделите только несколько блоков памяти, освободите их и повторите этот цикл несколько раз (повторите для блоков одинакового размера и блоков разного размера)
  • выделяет много памяти разных размеров, освобождает половину (например, четные выделения), затем выделяет и освобождает память в цикле
  • использовать два потока для параллельного распределения памяти
  • использовать три, четыре, пять, ... потоков для параллельного распределения памяти

Вы заметите, что результаты будут отличаться для каждого теста. Распределители, которые очень хороши в одной ситуации, могут быть плохими в других.

На практике это означает, что лучше всего протестировать его в своем приложении в реальной / реалистичной ситуации.

5 голосов
/ 01 апреля 2010

Вы можете скачать nedmalloc и попытаться сравнить ваш распределитель с ним. У него есть тест с именем test.c с исходным кодом, который вы можете переписать в соответствии с вашим распределителем.

4 голосов
/ 01 апреля 2010

Если вы спросите об общем распределителе для программы на C / C ++, я найду эту статью Hoard: Масштабируемый распределитель памяти для многопоточных приложений , в которой рассматривается этот вопрос. Это цитата из этого документа

Пока еще нет стандартного набора критерии оценки многопоточные распределители. Мы знаем о нет ориентиров, которые особо подчеркивают многопоточная производительность сервера приложения, такие как веб-серверы 1 и менеджеры баз данных. Мы выбрали ориентиры описано в других статьях и иначе опубликовано (Ларсон бенчмарк от Ларсона и Кришнана [22] и бенчмарк от Шбенча MicroQuill, Inc. [26]), два многопоточные приложения, которые включить тесты (BEMengine [7] и Барнс-Хат [1, 2]), и написал несколько собственные микробанки, чтобы подчеркнуть различные аспекты распределения памяти производительность (threadtest, active-false, пассивно-ложь).

Эта бумага довольно старая. Однако недавно я видел распределитель для HP-UX ( MallocNextGen ), и HP также не может гарантировать его пригодность для всех возможных приложений. Это говорит:

Новый распределитель обычно ожидается улучшение производительности Приложения. Тем не менее, может быть некоторые приложения для которых производительность может ухудшиться. Следовательно, пользователи Рекомендуется сравнить их приложения с памятью по умолчанию распределитель в libc и с Распределитель в libmallocng перед использованием новый распределитель в производстве окружающая среда.

Что касается скорости и параллелизма, мой собственный опыт заключается в том, что вы должны измерять производительность своей собственной программы, чтобы сравнивать два разных распределителя. Если мы говорим о Linux, вы можете использовать LD_PRELOAD для загрузки различных распределителей.

...