1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h>
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define NLIVE 1000000
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define NITERS (3*1000*1000)
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownchar* arr[NLIVE];
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovint main ( int argc, char* argv[] )
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int i, j, nbytes = 0;
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   int pdb = 0;
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   int jpdb;
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   if (argc > 1) {
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      pdb = atoi(argv[1]);
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   }
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   printf("initialising\n");
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < NLIVE; i++)
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      arr[i] = NULL;
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   printf("running\n");
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   j = -1;
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < NITERS; i++) {
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      j++;
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (j == NLIVE) j = 0;
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (arr[j])
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         free(arr[j]);
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      arr[j] = malloc(nbytes);
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      if (pdb > 0) {
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         // create some partially defined bytes in arr[j]
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         for (jpdb=0; jpdb<nbytes; jpdb = jpdb+pdb) {
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov            arr[j][jpdb] &= (jpdb & 0xff);
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov         }
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      }
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      // Cycle through the sizes 0,8,16,24,32.  Zero will get rounded up to
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      // 8, so the 8B bucket will get twice as much traffic.
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      nbytes += 8;
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (nbytes > 32)
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         nbytes = 0;
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   }
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   for (i = 0; i < NLIVE; i++)
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      if (arr[i])
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         free(arr[i]);
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   printf("done\n");
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
53