3

私は以下のサンプル プログラムを 'C' で作成しましたが、これは動的メモリを集中的に使用し、'glibc' デフォルト アロケータと Hoard アロケータで同じ (所要時間に関して) ベンチマークを試みました。

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 #define NUM_OF_BLOCKS   (1 * 4096)
  5
  6 void *allocated_mem_ptr_arr[NUM_OF_BLOCKS];
  7
  8 int
  9 main (int argc, char *argv[])
 10 {
 11     void *myblock = NULL;
 12
 13     int count, iter;
 14
 15     int blk_sz;
 16
 17     if (argc != 2)
 18     {
 19         fprintf (stderr, "Usage:./memory_intensive <Block size (KB)>\n\n");
 20         exit (-1);
 21     }
 22
 23     blk_sz = atoi (argv[1]);
 24
 25     for (iter = 0; iter < 1024; iter++)
 26     {
 27         /*
 28          * The allocated memory is not accessed (read/write) hence the residual memory
 29          * size remains low since no corresponding physical pages are being allocated
 30          */
 31         printf ("\nCurrently at iteration %d\n", iter);
 32         fflush (NULL);
 33
 34         for (count = 0; count < NUM_OF_BLOCKS; count++)
 35         {
 36             myblock = (void *) malloc (blk_sz * 1024);
 37             if (!myblock)
 38             {
 39                 printf ("malloc() fails\n");
 40                 sleep (30);
 41                 return;
 42             }
 43
 44             allocated_mem_ptr_arr[count] = myblock;
 45         }
 46
 47         for (count = 0; count < NUM_OF_BLOCKS; count++)
 48         {
 49             free (allocated_mem_ptr_arr[count]);
 50         }
 51     }
 52 }

このベンチマーク アクティビティの結果、以下の結果が得られました (ブロック サイズ、デフォルト アロケーターの経過時間、Hoard の経過時間)。

  1. 「1K」「4.380s」「0.927s」
  2. 「2k」「8.390s」「0.960s」
  3. 「4k」「16.757s」「1.078s」
  4. 「8k」「16.619s」「1.154s」
  5. '16k' '17.028s' '13m 6.463s'
  6. '32k' '17.755s' '5m 45.039s'

ご覧のとおり、ブロック サイズが 16K 以上になると、Hoard のパフォーマンスが大幅に低下します。理由は何ですか?Hoard は、大きなサイズのチャンクを割り当てるアプリケーション向けではないと言えますか?

4

1 に答える 1

0

http://locklessinc.com/benchmarks_allocator.shtmlには、いくつかの優れたベンチマークと説明があります。

小さいアロカイトンの場合でも、tcmalloc と同様に機能します。ただし、約 64KiB を超えると、パフォーマンスが大幅に低下します。中央の「買いだめ」を使用して、スレッド間でメモリを再分配します。これは、一度に 1 つのスレッドしか使用できないため、ボトルネックになります。スレッドの数が増えるにつれて、問題はますます悪化します。

于 2014-01-29T16:46:31.860 に答える