性能測定/ソース一覧
性能測定ソース一覧
メモリ負荷(C言語)
メモリに対して負荷をかけるツール。
指定した分のメモリ領域をN個確保する。
その後繰り返しメモリ領域にアクセスして負荷をかけ続ける。
mem.cソース
mem.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/time.h>
int main(int argc, char* argv[])
{
char *outputdir; int size_mb = 1, size_total = 0, mem_num = 0, interval = 0, memset_mb; int acsMem; struct timeval s, t; double start=0, end=0; size_t size_byte, memset_size; FILE *output;
if (argc != 7) { fprintf(stderr, "Usage: %s <Size(MB)> <MemNum> <AccessMem> <memsetMemSize> <Interval(sec)> <OutputFile>\n", argv[0]); exit(1); } size_mb = atoi(argv[1]); size_byte = size_mb * 1048576UL; mem_num = atoi(argv[2]); acsMem = atoi(argv[3]); memset_mb = atoi(argv[4]); memset_size = memset_mb * 1048576UL; interval = atoi(argv[5]); outputdir = argv[6]; printf("-----Info----------\n"); printf("MemSize[MB] * MemNum = %d * %d\n", size_mb, mem_num); printf("Access Memory = %d\n", acsMem); printf("memset MemSize[MB] = %d\n", memset_mb); printf("interval = %d\n", interval); printf("Output Directory = %s\n", outputdir); printf("PID = %d\n", getpid()); printf("-------------------\n");
output = fopen(outputdir, "a"); fprintf(output, "-----Info----------\n"); fprintf(output, "MemSize[MB] * MemNum = %d * %d\n", size_mb, mem_num); fprintf(output, "Access Memory = %d\n", acsMem); fprintf(output, "memset MemSize[MB] = %d\n", memset_mb); fprintf(output, "interval = %d\n", interval); fprintf(output, "Output Directory = %s\n", outputdir); fprintf(output, "PID = %d\n", getpid()); fprintf(output, "-------------------\n"); fclose(output); char *bufary[mem_num];
printf("Memory initialize...\n"); for(int cnt = 0; cnt < mem_num; cnt++){ bufary[cnt] = (char*)malloc(size_byte); if(!bufary[cnt]){ printf("bad aloc\n"); return 1; } memset(bufary[cnt], 0xff, size_byte); size_total += size_mb; printf("allocated : cnt=%d, total=%d(MB))\n", cnt+1, size_total); }
if(interval == 0){ int count = 0; while(1){ count++; sleep(1); } }else{ while(1){ gettimeofday(&s, NULL); memset(bufary[acsMem-1], 0xff, memset_size); gettimeofday(&t, NULL); start = s.tv_sec + (double)(s.tv_usec * 1e-6); end = t.tv_sec + (double)(t.tv_usec * 1e-6); output = fopen(outputdir, "a"); fprintf(output, "acsMem=%d, memset_size=%d\nmemset_time=%f[ms]\n", acsMem, memset_mb, (end - start) * 1000); fclose(output); sleep(interval); } } return 0;}
実行手順
コンパイル手順
# gcc -std=c99 -o mem mem.c
実行例:
メモリ100MB領域を5個分確保する。1秒おきに1番目のメモリの50MB分を操作するのを繰り返す。
# mem 100 5 1 50 1
- 最終更新:2014-06-07 18:55:45