Linux-Sys-CPU-Affinity
view release on metacpan or search on metacpan
Affinity.xs view on Meta::CPAN
OUTPUT:
RETVAL
Linux_Sys_CPU_Affinity* cpu_or (cpusetA, cpusetB)
Linux_Sys_CPU_Affinity *cpusetA
Linux_Sys_CPU_Affinity *cpusetB
CODE:
char* class_name = cpusetA->class_name;
if (cpusetA->size != cpusetB->size)
croak("The size of given cpusets are different");
Linux_Sys_CPU_Affinity *new_cpuset = make_from_object(cpusetA, 1);
CPU_OR_S(cpusetA->size, new_cpuset->set, cpusetA->set, cpusetB->set);
RETVAL = new_cpuset;
OUTPUT:
RETVAL
Linux_Sys_CPU_Affinity* cpu_xor (cpusetA, cpusetB)
Linux_Sys_CPU_Affinity *cpusetA
Linux_Sys_CPU_Affinity *cpusetB
CODE:
char* class_name = cpusetA->class_name;
if (cpusetA->size != cpusetB->size)
croak("The size of given cpusets are different");
Linux_Sys_CPU_Affinity *new_cpuset = make_from_object(cpusetA, 1);
CPU_XOR_S(cpusetA->size, new_cpuset->set, cpusetA->set, cpusetB->set);
RETVAL = new_cpuset;
OUTPUT:
RETVAL
void cpu_zero(cpuset)
Linux_Sys_CPU_Affinity *cpuset
CODE:
init_set(cpuset, NULL);
XSRETURN_EMPTY;
void reset(cpuset, sv = &PL_sv_undef)
Linux_Sys_CPU_Affinity *cpuset
SV *sv
PREINIT:
AV* av = NULL;
CODE:
if (SvOK(sv))
av = _extract_and_validate_av(sv);
init_set(cpuset, av);
XSRETURN_EMPTY;
IV cpu_isset (cpuset, cpu)
Linux_Sys_CPU_Affinity *cpuset
UV cpu
PPCODE:
int res = CPU_ISSET_S((uint32_t) cpu, cpuset->size, cpuset->set);
mXPUSHu( res );
XSRETURN(1);
void cpu_set (cpuset, cpu)
Linux_Sys_CPU_Affinity *cpuset
UV cpu
PPCODE:
CPU_SET_S((uint32_t) cpu, cpuset->size, cpuset->set);
XSRETURN_EMPTY;
void cpu_clr (cpuset, cpu)
Linux_Sys_CPU_Affinity *cpuset
UV cpu
PPCODE:
CPU_CLR_S((uint32_t) cpu, cpuset->size, cpuset->set);
XSRETURN_EMPTY;
UV cpu_count(cpuset)
Linux_Sys_CPU_Affinity *cpuset
PPCODE:
int cpu_count = CPU_COUNT_S(cpuset->size, cpuset->set);
mXPUSHu( cpu_count ); // PUSHs(sv_2mortal(newSVuv(cpu_count)));
XSRETURN(1);
IV cpu_equal (cpusetA, cpusetB)
Linux_Sys_CPU_Affinity *cpusetA
Linux_Sys_CPU_Affinity *cpusetB
PPCODE:
int res = 0;
if (cpusetA->size == cpusetB->size)
res = CPU_EQUAL_S(cpusetA->size, cpusetA->set, cpusetB->set);
mXPUSHu( res );
XSRETURN(1);
AV* get_cpus(cpuset)
Linux_Sys_CPU_Affinity *cpuset
CODE:
RETVAL = get_cpus_from_cpuset(cpuset);
OUTPUT:
RETVAL
AV* get_affinity(cpuset, pid)
Linux_Sys_CPU_Affinity *cpuset
UV pid
CODE:
Linux_Sys_CPU_Affinity *new_cpuset = make_from_object(cpuset, 0);
int res = sched_getaffinity((pid_t) pid, new_cpuset->size, new_cpuset->set);
if (res == -1) {
SV *error = get_sched_error_text(errno, 1);
croak((char *) SvPV_nolen(error));
}
RETVAL = get_cpus_from_cpuset(new_cpuset);
safefree(new_cpuset);
OUTPUT:
RETVAL
IV set_affinity(cpuset, pid)
Linux_Sys_CPU_Affinity *cpuset
UV pid
PPCODE:
int res = sched_setaffinity((pid_t) pid, cpuset->size, cpuset->set);
if (res == -1) {
SV *error = get_sched_error_text(errno, 0);
croak((char *) SvPV_nolen(error));
}
mXPUSHi( res );
XSRETURN(1);
void DESTROY (cpuset)
PPCODE:
Linux_Sys_CPU_Affinity *self = (Linux_Sys_CPU_Affinity *) SvUV(SvRV(ST(0)));
if (PL_dirty)
return;
CPU_FREE(self->set);
safefree(self);
XSRETURN_EMPTY;
IV get_nprocs ()
PPCODE:
int nprocs = get_available_nprocs();
mXPUSHi( nprocs );
XSRETURN(1);
( run in 0.464 second using v1.01-cache-2.11-cpan-5511b514fd6 )