misc: add function to get CPU affinity mask size
Implement it on Linux, FreeBSD, and Windows for now, and return UV_ENOTSUP on other platforms. Inspired-by: Kiran Pamnany <kiran.pamnany@intel.com> Fixes: https://github.com/libuv/libuv/issues/1389 PR-URL: https://github.com/libuv/libuv/pull/1527 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
This commit is contained in:
parent
f94282c7ab
commit
6521405c07
@ -246,6 +246,13 @@ API
|
||||
|
||||
Frees the `cpu_infos` array previously allocated with :c:func:`uv_cpu_info`.
|
||||
|
||||
.. c:function:: int uv_cpumask_size(void)
|
||||
|
||||
Returns the maximum size of the mask used for process/thread affinities,
|
||||
or ``UV_ENOTSUP`` if affinities are not supported on the current platform.
|
||||
|
||||
.. versionadded:: 2.0.0
|
||||
|
||||
.. c:function:: int uv_interface_addresses(uv_interface_address_t** addresses, int* count)
|
||||
|
||||
Gets address information about the network interfaces on the system. An
|
||||
|
||||
@ -1142,6 +1142,7 @@ UV_EXTERN uv_pid_t uv_os_getppid(void);
|
||||
|
||||
UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count);
|
||||
UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count);
|
||||
UV_EXTERN int uv_cpumask_size(void);
|
||||
|
||||
UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses,
|
||||
int* count);
|
||||
|
||||
@ -40,6 +40,7 @@
|
||||
#include <sys/uio.h> /* writev */
|
||||
#include <sys/resource.h> /* getrusage */
|
||||
#include <pwd.h>
|
||||
#include <sched.h>
|
||||
|
||||
#ifdef __sun
|
||||
# include <netdb.h> /* MAXHOSTNAMELEN on Solaris */
|
||||
@ -63,6 +64,8 @@
|
||||
# include <sys/sysctl.h>
|
||||
# include <sys/filio.h>
|
||||
# include <sys/wait.h>
|
||||
# include <sys/param.h>
|
||||
# include <sys/cpuset.h>
|
||||
# define UV__O_CLOEXEC O_CLOEXEC
|
||||
# if defined(__FreeBSD__)
|
||||
# define uv__accept4 accept4
|
||||
@ -1336,7 +1339,6 @@ int uv_os_gethostname(char* buffer, size_t* size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uv_pid_t uv_os_getpid(void) {
|
||||
return getpid();
|
||||
}
|
||||
@ -1345,3 +1347,11 @@ uv_pid_t uv_os_getpid(void) {
|
||||
uv_pid_t uv_os_getppid(void) {
|
||||
return getppid();
|
||||
}
|
||||
|
||||
int uv_cpumask_size(void) {
|
||||
#if defined(__linux__) || defined(__FreeBSD__)
|
||||
return CPU_SETSIZE;
|
||||
#else
|
||||
return UV_ENOTSUP;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -427,3 +427,7 @@ int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int uv_cpumask_size(void) {
|
||||
return (int)(sizeof(DWORD_PTR) * 8);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user