DF-3372 / probe_affinity.c
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <sys/usched.h> static void groom(int n, unsigned char a){ unsigned char g[8]; int i, u; g[0]=8; g[1]=AF_INET; g[2]=0x11; g[3]=0x22; g[4]=a; g[5]=2; g[6]=3; g[7]=4; for(i=0;i<n;i++){ u=socket(AF_INET,SOCK_DGRAM,0); bind(u,(struct sockaddr*)g,8); close(u);} } static int tcpb(int len){ unsigned char sa[8]; int s,r; memset(sa,0,sizeof sa); sa[0]=len; sa[1]=AF_INET; s=socket(AF_INET,SOCK_STREAM,0); r=bind(s,(struct sockaddr*)sa,len); close(s); return (r==0)?0:errno; } int main(void){ int cpu, r224, r8; for(cpu=0; cpu<6; cpu++){ int cp = cpu; if (usched_set(0, USCHED_SET_CPU, &cp, sizeof(cp)) < 0) { printf("cpu%d: usched_set failed: %s\n", cpu, strerror(errno)); continue; } groom(64,224); r224=tcpb(2); groom(64,8); r8=tcpb(2); printf("cpu%d: groom224 -> %d, groom8 -> %d %s\n", cpu, r224, r8, (r224!=r8) ? "<<<< FLIP" : ""); } return 0;} |