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