/* * Simple loop testing the CPU-affinity syscall. */ #include #include #include #include #define __NR_sched_set_affinity 226 _syscall3 (int, sched_set_affinity, pid_t, pid, unsigned int, mask_len, unsigned long *, mask) #define __NR_sched_get_affinity 227 _syscall3 (int, sched_get_affinity, pid_t, pid, unsigned int *, mask_len, unsigned long *, mask) int main (void) { int ret; unsigned int now, count, mask_len, iteration; unsigned long mask, new_mask = (1 << 0); ret = sched_get_affinity(0, &mask_len, &mask); if (ret) { printf("sched_get_affinity returned %d, exiting.\n", ret); return -1; } printf("current process's affinity: %d bytes mask, value %08lx.\n", mask_len, mask); printf("trying to set process: affinity to %08lx.\n", new_mask); ret = sched_set_affinity(0, sizeof(new_mask), &new_mask); if (ret) { printf("sched_set_affinity returned %d, exiting.\n", ret); return -1; } ret = sched_get_affinity(0, &mask_len, &mask); if (ret) { printf("sched_get_affinity returned %d, exiting.\n", ret); return -1; } printf("current process's affinity: %d bytes mask, value %08lx.\n", mask_len, mask); iteration = 0; repeat: now = time(0); count = 0; for (;;) { count++; if (time(0) != now) break; } if (iteration) printf("speed: %d loops.\n", count); iteration++; goto repeat; return 0; }