suricata
util-affinity.h
Go to the documentation of this file.
1
/* Copyright (C) 2010 Open Information Security Foundation
2
*
3
* You can copy, redistribute or modify this Program under the terms of
4
* the GNU General Public License version 2 as published by the Free
5
* Software Foundation.
6
*
7
* This program is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
* GNU General Public License for more details.
11
*
12
* You should have received a copy of the GNU General Public License
13
* version 2 along with this program; if not, write to the Free Software
14
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
* 02110-1301, USA.
16
*/
17
18
/**
19
* \file
20
*
21
* \author Eric Leblond <eric@regit.org>
22
*/
23
24
#ifndef __UTIL_AFFINITY_H__
25
#define __UTIL_AFFINITY_H__
26
#include "
suricata-common.h
"
27
#include "
conf.h
"
28
29
#if defined OS_FREEBSD
30
#include <sched.h>
31
#include <sys/param.h>
32
#include <sys/resource.h>
33
#include <sys/cpuset.h>
34
#include <sys/thr.h>
35
#define cpu_set_t cpuset_t
36
#elif defined __OpenBSD__
37
#include <sched.h>
38
#include <sys/param.h>
39
#include <sys/resource.h>
40
#elif defined OS_DARWIN
41
#include <mach/mach.h>
42
#include <mach/mach_init.h>
43
#include <mach/thread_policy.h>
44
#define cpu_set_t thread_affinity_policy_data_t
45
#define CPU_SET(cpu_id, new_mask) (*(new_mask)).affinity_tag = (cpu_id + 1)
46
#define CPU_ISSET(cpu_id, new_mask) ((*(new_mask)).affinity_tag == (cpu_id + 1))
47
#define CPU_ZERO(new_mask) (*(new_mask)).affinity_tag = THREAD_AFFINITY_TAG_NULL
48
#endif
49
50
enum
{
51
RECEIVE_CPU_SET
,
52
WORKER_CPU_SET
,
53
VERDICT_CPU_SET
,
54
MANAGEMENT_CPU_SET
,
55
MAX_CPU_SET
56
};
57
58
enum
{
59
BALANCED_AFFINITY
,
60
EXCLUSIVE_AFFINITY
,
61
MAX_AFFINITY
62
};
63
64
typedef
struct
ThreadsAffinityType_
{
65
const
char
*
name
;
66
uint8_t
mode_flag
;
67
int
prio
;
68
uint32_t
nb_threads
;
69
SCMutex
taf_mutex
;
70
uint16_t
lcpu
;
/* use by exclusive mode */
71
72
#if !defined __CYGWIN__ && !defined OS_WIN32 && !defined __OpenBSD__ && !defined sun
73
cpu_set_t
cpu_set
;
74
cpu_set_t
lowprio_cpu
;
75
cpu_set_t
medprio_cpu
;
76
cpu_set_t
hiprio_cpu
;
77
#endif
78
}
ThreadsAffinityType
;
79
80
/** store thread affinity mode for all type of threads */
81
#ifndef _THREAD_AFFINITY
82
extern
ThreadsAffinityType
thread_affinity
[
MAX_CPU_SET
];
83
#endif
84
85
void
AffinitySetupLoadFromConfig
(
void
);
86
ThreadsAffinityType
*
GetAffinityTypeFromName
(
const
char
*name);
87
88
uint16_t
AffinityGetNextCPU
(
ThreadsAffinityType
*taf);
89
90
void
BuildCpusetWithCallback
(
const
char
*name,
ConfNode
*node,
91
void
(*Callback)(
int
i,
void
* data),
92
void
*data);
93
94
#endif
/* __UTIL_AFFINITY_H__ */
ThreadsAffinityType_::medprio_cpu
cpu_set_t medprio_cpu
Definition:
util-affinity.h:75
ThreadsAffinityType_::nb_threads
uint32_t nb_threads
Definition:
util-affinity.h:68
ThreadsAffinityType_::lcpu
uint16_t lcpu
Definition:
util-affinity.h:70
BALANCED_AFFINITY
@ BALANCED_AFFINITY
Definition:
util-affinity.h:59
AffinityGetNextCPU
uint16_t AffinityGetNextCPU(ThreadsAffinityType *taf)
Return next cpu to use for a given thread family.
Definition:
util-affinity.c:297
ThreadsAffinityType_::lowprio_cpu
cpu_set_t lowprio_cpu
Definition:
util-affinity.h:74
EXCLUSIVE_AFFINITY
@ EXCLUSIVE_AFFINITY
Definition:
util-affinity.h:60
ThreadsAffinityType
struct ThreadsAffinityType_ ThreadsAffinityType
MAX_CPU_SET
@ MAX_CPU_SET
Definition:
util-affinity.h:55
WORKER_CPU_SET
@ WORKER_CPU_SET
Definition:
util-affinity.h:52
MANAGEMENT_CPU_SET
@ MANAGEMENT_CPU_SET
Definition:
util-affinity.h:54
ThreadsAffinityType_::hiprio_cpu
cpu_set_t hiprio_cpu
Definition:
util-affinity.h:76
thread_affinity
ThreadsAffinityType thread_affinity[MAX_CPU_SET]
Definition:
util-affinity.c:35
GetAffinityTypeFromName
ThreadsAffinityType * GetAffinityTypeFromName(const char *name)
find affinity by its name
Definition:
util-affinity.c:69
conf.h
ThreadsAffinityType_::cpu_set
cpu_set_t cpu_set
Definition:
util-affinity.h:73
ThreadsAffinityType_::mode_flag
uint8_t mode_flag
Definition:
util-affinity.h:66
RECEIVE_CPU_SET
@ RECEIVE_CPU_SET
Definition:
util-affinity.h:51
ThreadsAffinityType_::name
const char * name
Definition:
util-affinity.h:65
suricata-common.h
ThreadsAffinityType_
Definition:
util-affinity.h:64
BuildCpusetWithCallback
void BuildCpusetWithCallback(const char *name, ConfNode *node, void(*Callback)(int i, void *data), void *data)
Definition:
util-affinity.c:99
ConfNode_
Definition:
conf.h:32
VERDICT_CPU_SET
@ VERDICT_CPU_SET
Definition:
util-affinity.h:53
AffinitySetupLoadFromConfig
void AffinitySetupLoadFromConfig(void)
Extract cpu affinity configuration from current config file.
Definition:
util-affinity.c:180
ThreadsAffinityType_::taf_mutex
SCMutex taf_mutex
Definition:
util-affinity.h:69
ThreadsAffinityType_::prio
int prio
Definition:
util-affinity.h:67
SCMutex
#define SCMutex
Definition:
threads-debug.h:114
MAX_AFFINITY
@ MAX_AFFINITY
Definition:
util-affinity.h:61
src
util-affinity.h
Generated on Thu May 19 2022 23:30:39 for suricata by
1.8.18