Example #1
0
static void stats_check_alloc(struct ifstat *s)
{
	int cpus = get_number_cpus();

	if (s->irqs_len != get_number_cpus()) {
		if (s->irqs) xfree(s->irqs);
		if (s->irqs_srx) xfree(s->irqs_srx);
		if (s->irqs_stx) xfree(s->irqs_stx);
		if (s->cpu_user) xfree(s->cpu_user);
		if (s->cpu_nice) xfree(s->cpu_nice);
		if (s->cpu_sys) xfree(s->cpu_sys);
		if (s->cpu_idle) xfree(s->cpu_idle);
		if (s->cpu_iow) xfree(s->cpu_iow);

		s->irqs_srx = xzmalloc(sizeof(*(s->irqs_srx)) * cpus);
		s->irqs_stx = xzmalloc(sizeof(*(s->irqs_stx)) * cpus);
		s->irqs = xzmalloc(sizeof(*(s->irqs)) * cpus);
		s->cpu_user = xzmalloc(sizeof(*(s->cpu_user)) * cpus);
		s->cpu_nice = xzmalloc(sizeof(*(s->cpu_nice)) * cpus);
		s->cpu_sys = xzmalloc(sizeof(*(s->cpu_sys)) * cpus);
		s->cpu_idle = xzmalloc(sizeof(*(s->cpu_idle)) * cpus);
		s->cpu_iow = xzmalloc(sizeof(*(s->cpu_iow)) * cpus);
		s->irqs_len = cpus;
	}
}
Example #2
0
int set_cpu_affinity(const char *str, int inverted)
{
    int ret, i, cpus;
    const char *p, *q;
    cpu_set_t cpu_bitmask;
    q = str;
    cpus = get_number_cpus();
    CPU_ZERO(&cpu_bitmask);
    for (i = 0; inverted && i < cpus; ++i)
        CPU_SET(i, &cpu_bitmask);
    while (p = q, q = next_token(q, ','), p) {
        unsigned int a;	 /* Beginning of range */
        unsigned int b;	 /* End of range */
        unsigned int s;	 /* Stride */
        const char *c1, *c2;
        if (sscanf(p, "%u", &a) < 1)
            return -EINVAL;
        b = a;
        s = 1;
        c1 = next_token(p, '-');
        c2 = next_token(p, ',');
        if (c1 != NULL && (c2 == NULL || c1 < c2)) {
            if (sscanf(c1, "%u", &b) < 1)
                return -EINVAL;
            c1 = next_token(c1, ':');
            if (c1 != NULL && (c2 == NULL || c1 < c2))
                if (sscanf(c1, "%u", &s) < 1)
                    return -EINVAL;
        }
        if (!(a <= b))
            return -EINVAL;
        while (a <= b) {
            if (inverted)
                CPU_CLR(a, &cpu_bitmask);
            else
                CPU_SET(a, &cpu_bitmask);
            a += s;
        }
    }
    ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask),
                            &cpu_bitmask);
    if (ret)
        panic("Can't set this cpu affinity!\n");
    return 0;
}
Example #3
0
char *get_cpu_affinity(char *cpu_string, size_t len)
{
    int ret, i, cpu;
    cpu_set_t cpu_bitmask;
    if (len != get_number_cpus() + 1)
        return NULL;
    CPU_ZERO(&cpu_bitmask);
    ret = sched_getaffinity(getpid(), sizeof(cpu_bitmask),
                            &cpu_bitmask);
    if (ret) {
        whine("Can't fetch cpu affinity!\n");
        return NULL;
    }
    for (i = 0, cpu_string[len - 1] = 0; i < len - 1; ++i) {
        cpu = CPU_ISSET(i, &cpu_bitmask);
        cpu_string[i] = (cpu ? '1' : '0');
    }
    return cpu_string;
}