vppinfra: Use affinity for online cpus on FreeBSD
On FreeBSD the affinity returned by cpuset gives us a bitmask documenting the available cpus. This can be modified if we are jailed or are launched via the cpuset(1) command. Initialise the clib bitmask otherwise it is always 0 and we cannot configure any workers. Type: improvement Change-Id: I067e373ea440c6fbd03839d1cf103c8b97d8a0c6 Signed-off-by: Tom Jones <thj@freebsd.org>
This commit is contained in:
parent
d726f6a999
commit
828353fa5f
@ -67,6 +67,8 @@
|
||||
__clib_export __thread uword __os_thread_index = 0;
|
||||
__clib_export __thread uword __os_numa_index = 0;
|
||||
|
||||
__clib_export clib_bitmap_t *os_get_cpu_affinity_bitmap (int pid);
|
||||
|
||||
clib_error_t *
|
||||
clib_file_n_bytes (char *file, uword * result)
|
||||
{
|
||||
@ -275,6 +277,8 @@ os_get_online_cpu_core_bitmap ()
|
||||
{
|
||||
#if __linux__
|
||||
return clib_sysfs_read_bitmap ("/sys/devices/system/cpu/online");
|
||||
#elif defined(__FreeBSD__)
|
||||
return os_get_cpu_affinity_bitmap (0);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
@ -309,6 +313,9 @@ os_get_cpu_affinity_bitmap (int pid)
|
||||
cpuset_t mask;
|
||||
uword *r = NULL;
|
||||
|
||||
clib_bitmap_alloc (r, sizeof (CPU_SETSIZE));
|
||||
clib_bitmap_zero (r);
|
||||
|
||||
if (cpuset_getaffinity (CPU_LEVEL_CPUSET, CPU_WHICH_CPUSET, -1,
|
||||
sizeof (mask), &mask) != 0)
|
||||
{
|
||||
@ -330,21 +337,6 @@ os_get_online_cpu_node_bitmap ()
|
||||
{
|
||||
#if __linux__
|
||||
return clib_sysfs_read_bitmap ("/sys/devices/system/node/online");
|
||||
#elif defined(__FreeBSD__)
|
||||
domainset_t domain;
|
||||
uword *r = NULL;
|
||||
int policy;
|
||||
|
||||
if (cpuset_getdomain (CPU_LEVEL_CPUSET, CPU_WHICH_CPUSET, -1,
|
||||
sizeof (domain), &domain, &policy) != 0)
|
||||
{
|
||||
clib_bitmap_free (r);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (int bit = 0; bit < CPU_SETSIZE; bit++)
|
||||
clib_bitmap_set (r, bit, CPU_ISSET (bit, &domain));
|
||||
return r;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user