#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#define __USE_GNU
#include <sched.h>
#include <ctype.h>
#include <pthread.h>
#define MAX_N1 3
#define MAX_N2 1
#define MAX_N3 0
#define MAX_N4 0
#define MAX_N5 0
#define LOOP_NUM 1000*1000*1000
#define gettid() syscall(__NR_gettid)
#define MAXEPOLLSIZE 100
int gaiefd[MAX_N1];
typedef struct thdparam {
unsigned int uiNum;
unsigned long ulLoop;
unsigned int tid;
int imalloclen;
unsigned char szInfo[32];
} thdparam;
long long ustime(void) {
struct timeval tv;
long long ust;
gettimeofday(&tv, NULL);
ust = ((long)tv.tv_sec)*1000000;
ust += tv.tv_usec;
return ust;
}
int *thread_fun1(void *arg)
{
long long t1,t2,diff;
struct thdparam *parg = arg;
unsigned int uiNum = 500;//(parg->uiNum + 3)*100;
unsigned long aulMem[10240];
int imalloclen = parg->imalloclen;
unsigned int uiLoop;
unsigned long ulCount = 0;
int i;
void *p;
t1 = ustime();
while(1)
{
for (i = 0; i < 1000; i++)
{
ulCount ++;
p = malloc(imalloclen);
aulMem[i] = p;
if ((ulCount&0xFFFF)==0)
{
t2 = ustime();
diff = t2-t1;
t1 = ustime();
printf("tid %d malloclen %d %lu,diff %llu\n", parg->tid, imalloclen, ulCount, diff);
ulCount = 1;
return NULL;
}
}
for (i = 0; i < 1000; i++)
{
free(aulMem[i]);
}
}
return NULL;
}
void setparam(pthread_attr_t * pattr, unsigned int cpuindex)
{
cpu_set_t cpu_info;
pthread_attr_init(pattr);
CPU_ZERO(&cpu_info);
CPU_SET(cpuindex, &cpu_info);
if (0!=pthread_attr_setaffinity_np(pattr, sizeof(cpu_set_t), &cpu_info))
{
printf("set affinity failed");
return;
}
}
int main(int argc, char ** argv)
{
unsigned int i = 0;
unsigned int cpuindex = 0;
int imalloclen = atoi(argv[1]);
cpu_set_t cpu_info;
int cpu_num = (int)sysconf(_SC_NPROCESSORS_ONLN);
printf("The number of cpu is %d\n", cpu_num);
struct thdparam astharg[MAX_N1];
pthread_t thid1[MAX_N1];
pthread_attr_t attr1[MAX_N1];
for (i = 0; i < MAX_N1 ; i++)
{
cpuindex++;
setparam(attr1+i, cpuindex);
astharg[i].uiNum = i;
astharg[i].ulLoop = LOOP_NUM;
astharg[i].tid = i;
astharg[i].imalloclen = imalloclen;
//sprintf(astharg[i].szInfo, "f1V1T%dL%lu\n",i,astharg[i].ulLoop/(1000*1000));
(void)pthread_create(&thid1[i], attr1+i,(void *)thread_fun1,astharg + i);
}
while(1)
{
//printf("diff_main %lu %lu\n",*pulValue1, *pulValue2);
sleep(50);
}
return 0;
}
设置cpu亲和力demo
最新推荐文章于 2024-11-15 10:32:05 发布