Dynamic Load Balance 3.6.1+32-59d1
shmem_cpuinfo.h
Go to the documentation of this file.
1/*********************************************************************************/
2/* Copyright 2009-2021 Barcelona Supercomputing Center */
3/* */
4/* This file is part of the DLB library. */
5/* */
6/* DLB is free software: you can redistribute it and/or modify */
7/* it under the terms of the GNU Lesser General Public License as published by */
8/* the Free Software Foundation, either version 3 of the License, or */
9/* (at your option) any later version. */
10/* */
11/* DLB is distributed in the hope that it will be useful, */
12/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14/* GNU Lesser General Public License for more details. */
15/* */
16/* You should have received a copy of the GNU Lesser General Public License */
17/* along with DLB. If not, see <https://www.gnu.org/licenses/>. */
18/*********************************************************************************/
19
20#ifndef SHMEM_CPUINFO_H
21#define SHMEM_CPUINFO_H
22
23#include "apis/dlb_types.h"
24#include "support/types.h"
25
26#include <sys/types.h>
27#include <sched.h>
28
29/* Packed enum to try to make cpuinfo_task_t size 8 bytes */
30typedef enum __attribute__((__packed__)) {
31 ENABLE_CPU,
32 DISABLE_CPU
34
35typedef struct cpuinfo_task_t {
36 pid_t pid;
40
43
44/* Init */
45int shmem_cpuinfo__init(pid_t pid, pid_t preinit_pid, const cpu_set_t *process_mask,
46 const char *shmem_key, int shmem_color);
47int shmem_cpuinfo_ext__init(const char *shmem_key, int shmem_color);
48int shmem_cpuinfo_ext__preinit(pid_t pid, const cpu_set_t *mask, dlb_drom_flags_t flags);
49
50/* Finalize */
51int shmem_cpuinfo__finalize(pid_t pid, const char *shmem_key, int shmem_color);
54
55/* Lend */
56int shmem_cpuinfo__lend_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks);
57int shmem_cpuinfo__lend_cpu_mask(pid_t pid, const cpu_set_t *restrict mask,
58 array_cpuinfo_task_t *restrict tasks);
59
60/* Reclaim */
61int shmem_cpuinfo__reclaim_all(pid_t pid, array_cpuinfo_task_t *restrict tasks);
62int shmem_cpuinfo__reclaim_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks);
63int shmem_cpuinfo__reclaim_cpus(pid_t pid, int ncpus, array_cpuinfo_task_t *restrict tasks);
64int shmem_cpuinfo__reclaim_cpu_mask(pid_t pid, const cpu_set_t *restrict mask,
65 array_cpuinfo_task_t *restrict tasks);
66
67/* Acquire */
68int shmem_cpuinfo__acquire_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks);
70 pid_t pid,
71 const array_cpuid_t *restrict array_cpuid,
72 array_cpuinfo_task_t *restrict tasks);
74 pid_t pid, int *restrict requested_ncpus,
75 const array_cpuid_t *restrict cpus_priority_array,
76 lewi_affinity_t lewi_affinity, int max_parallelism,
77 int64_t *restrict last_borrow, array_cpuinfo_task_t *restrict tasks);
78
79/* Borrow */
80int shmem_cpuinfo__borrow_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks);
82 pid_t pid,
83 const array_cpuid_t *restrict array_cpuid,
84 array_cpuinfo_task_t *restrict tasks);
86 pid_t pid, int *restrict requested_ncpus,
87 const array_cpuid_t *restrict cpus_priority_array, lewi_affinity_t lewi_affinity,
88 int max_parallelism, int64_t *restrict last_borrow,
89 array_cpuinfo_task_t *restrict tasks);
90
91/* Return */
92int shmem_cpuinfo__return_all(pid_t pid, array_cpuinfo_task_t *restrict tasks);
93int shmem_cpuinfo__return_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks);
94int shmem_cpuinfo__return_cpu_mask(pid_t pid, const cpu_set_t *mask,
95 array_cpuinfo_task_t *restrict tasks);
96void shmem_cpuinfo__return_async_cpu(pid_t pid, cpuid_t cpuid);
97void shmem_cpuinfo__return_async_cpu_mask(pid_t pid, const cpu_set_t *mask);
98
99/* Others */
100int shmem_cpuinfo__deregister(pid_t pid, array_cpuinfo_task_t *restrict tasks);
101int shmem_cpuinfo__reset(pid_t pid, array_cpuinfo_task_t *restrict tasks);
102int shmem_cpuinfo__update_max_parallelism(pid_t pid, unsigned int max,
103 array_cpuinfo_task_t *restrict tasks);
104void shmem_cpuinfo__update_ownership(pid_t pid, const cpu_set_t *restrict process_mask,
105 array_cpuinfo_task_t *restrict tasks);
106int shmem_cpuinfo__get_thread_binding(pid_t pid, int thread_num);
107int shmem_cpuinfo__get_nth_non_owned_cpu(pid_t pid, int nth_cpu);
109int shmem_cpuinfo__check_cpu_availability(pid_t pid, int cpu);
110int shmem_cpuinfo__is_cpu_enabled(int cpuid);
111bool shmem_cpuinfo__exists(void);
113void shmem_cpuinfo__remove_requests(pid_t pid);
114int shmem_cpuinfo__version(void);
115size_t shmem_cpuinfo__size(void);
116
117void shmem_cpuinfo__print_info(const char *shmem_key, int shmem_color, int columns,
118 dlb_printshmem_flags_t print_flags);
119
122const cpu_set_t* shmem_cpuinfo_testing__get_free_cpu_set(void);
124#endif /* SHMEM_CPUINFO_H */
dlb_drom_flags_t
Definition: dlb_types.h:34
dlb_printshmem_flags_t
Definition: dlb_types.h:45
int shmem_cpuinfo__reclaim_cpus(pid_t pid, int ncpus, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:939
struct array_cpuinfo_task_t array_cpuinfo_task_t
Definition: shmem_cpuinfo.h:42
int shmem_cpuinfo__get_number_of_non_owned_cpus(pid_t pid)
Definition: shmem_cpuinfo.c:2143
void shmem_cpuinfo__print_info(const char *shmem_key, int shmem_color, int columns, dlb_printshmem_flags_t print_flags)
Definition: shmem_cpuinfo.c:2231
int shmem_cpuinfo_testing__get_num_proc_requests(void)
Definition: shmem_cpuinfo.c:2420
int shmem_cpuinfo__check_cpu_availability(pid_t pid, int cpu)
Definition: shmem_cpuinfo.c:2156
const cpu_set_t * shmem_cpuinfo_testing__get_occupied_core_set(void)
Definition: shmem_cpuinfo.c:2434
int shmem_cpuinfo__acquire_from_cpu_subset(pid_t pid, const array_cpuid_t *restrict array_cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1213
int shmem_cpuinfo_ext__finalize(void)
Definition: shmem_cpuinfo.c:581
cpuinfo_action_t
Definition: shmem_cpuinfo.h:33
int shmem_cpuinfo__reclaim_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:879
int shmem_cpuinfo_ext__preinit(pid_t pid, const cpu_set_t *mask, dlb_drom_flags_t flags)
Definition: shmem_cpuinfo.c:498
void shmem_cpuinfo__remove_requests(pid_t pid)
Definition: shmem_cpuinfo.c:2203
int shmem_cpuinfo__acquire_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1193
int shmem_cpuinfo__init(pid_t pid, pid_t preinit_pid, const cpu_set_t *process_mask, const char *shmem_key, int shmem_color)
Definition: shmem_cpuinfo.c:444
void shmem_cpuinfo__update_ownership(pid_t pid, const cpu_set_t *restrict process_mask, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1992
void shmem_cpuinfo__return_async_cpu_mask(pid_t pid, const cpu_set_t *mask)
Definition: shmem_cpuinfo.c:1825
int shmem_cpuinfo__return_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1752
void shmem_cpuinfo__enable_request_queues(void)
Definition: shmem_cpuinfo.c:2196
void shmem_cpuinfo__return_async_cpu(pid_t pid, cpuid_t cpuid)
Definition: shmem_cpuinfo.c:1813
int shmem_cpuinfo__version(void)
Definition: shmem_cpuinfo.c:2223
int shmem_cpuinfo__acquire_ncpus_from_cpu_subset(pid_t pid, int *restrict requested_ncpus, const array_cpuid_t *restrict cpus_priority_array, lewi_affinity_t lewi_affinity, int max_parallelism, int64_t *restrict last_borrow, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1231
int shmem_cpuinfo__reclaim_all(pid_t pid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:843
int shmem_cpuinfo_ext__postfinalize(pid_t pid)
Definition: shmem_cpuinfo.c:590
int shmem_cpuinfo__lend_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:682
int shmem_cpuinfo__finalize(pid_t pid, const char *shmem_key, int shmem_color)
Definition: shmem_cpuinfo.c:550
int shmem_cpuinfo__get_thread_binding(pid_t pid, int thread_num)
Definition: shmem_cpuinfo.c:2077
int shmem_cpuinfo__deregister(pid_t pid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1846
const cpu_set_t * shmem_cpuinfo_testing__get_free_cpu_set(void)
Definition: shmem_cpuinfo.c:2430
int shmem_cpuinfo_testing__get_num_cpu_requests(int cpuid)
Definition: shmem_cpuinfo.c:2425
int shmem_cpuinfo__lend_cpu_mask(pid_t pid, const cpu_set_t *restrict mask, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:721
bool shmem_cpuinfo__exists(void)
Definition: shmem_cpuinfo.c:2192
int shmem_cpuinfo__reclaim_cpu_mask(pid_t pid, const cpu_set_t *restrict mask, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:991
int shmem_cpuinfo__reset(pid_t pid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1898
int shmem_cpuinfo__borrow_cpu(pid_t pid, int cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1579
int shmem_cpuinfo__get_nth_non_owned_cpu(pid_t pid, int nth_cpu)
Definition: shmem_cpuinfo.c:2114
int shmem_cpuinfo__is_cpu_enabled(int cpuid)
Definition: shmem_cpuinfo.c:2187
int shmem_cpuinfo__return_all(pid_t pid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1724
struct array_cpuid_t array_cpuid_t
Definition: shmem_cpuinfo.h:41
int shmem_cpuinfo__borrow_ncpus_from_cpu_subset(pid_t pid, int *restrict requested_ncpus, const array_cpuid_t *restrict cpus_priority_array, lewi_affinity_t lewi_affinity, int max_parallelism, int64_t *restrict last_borrow, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1612
int shmem_cpuinfo__return_cpu_mask(pid_t pid, const cpu_set_t *mask, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1769
int shmem_cpuinfo__update_max_parallelism(pid_t pid, unsigned int max, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1938
size_t shmem_cpuinfo__size(void)
Definition: shmem_cpuinfo.c:2227
int shmem_cpuinfo_ext__init(const char *shmem_key, int shmem_color)
Definition: shmem_cpuinfo.c:493
int shmem_cpuinfo__borrow_from_cpu_subset(pid_t pid, const array_cpuid_t *restrict array_cpuid, array_cpuinfo_task_t *restrict tasks)
Definition: shmem_cpuinfo.c:1598
enum __attribute__((__packed__))
Definition: shmem_cpuinfo.h:30
Definition: shmem_cpuinfo.h:35
cpuinfo_action_t action
Definition: shmem_cpuinfo.h:38
cpuid_t cpuid
Definition: shmem_cpuinfo.h:37
pid_t pid
Definition: shmem_cpuinfo.h:36
lewi_affinity_t
Definition: types.h:91
uint8_t cpuid_t
Definition: types.h:32