]> git.ipfire.org Git - thirdparty/squid.git/blame - src/CpuAffinityMap.cc
Various audit updates
[thirdparty/squid.git] / src / CpuAffinityMap.cc
CommitLineData
96c2bb61 1/*
96c2bb61
AR
2 * DEBUG: section 54 Interprocess Communication
3 *
4 */
5
f7f3304a 6#include "squid.h"
96c2bb61
AR
7#include "base/TextException.h"
8#include "CpuAffinityMap.h"
9#include "CpuAffinitySet.h"
10#include "Debug.h"
11
96c2bb61 12bool
c8ea3cc0 13CpuAffinityMap::add(const std::vector<int> &aProcesses, const std::vector<int> &aCores)
96c2bb61
AR
14{
15 if (aProcesses.size() != aCores.size())
16 return false;
17
18 for (size_t i = 0; i < aProcesses.size(); ++i) {
19 const int process = aProcesses[i];
20 const int core = aCores[i];
21 if (process <= 0 || core <= 0)
22 return false;
23 theProcesses.push_back(process);
24 theCores.push_back(core);
25 }
26
27 return true;
28}
29
30CpuAffinitySet *
31CpuAffinityMap::calculateSet(const int targetProcess) const
32{
33 Must(theProcesses.size() == theCores.size());
34 int core = 0;
35 for (size_t i = 0; i < theProcesses.size(); ++i) {
36 const int process = theProcesses[i];
212af65c 37 if (process == targetProcess) {
96c2bb61
AR
38 if (core > 0) {
39 debugs(54, DBG_CRITICAL, "WARNING: conflicting "
40 "'cpu_affinity_map' for process number " << process <<
41 ", using the last core seen: " << theCores[i]);
42 }
43 core = theCores[i];
44 }
45 }
46 CpuAffinitySet *cpuAffinitySet = NULL;
47 if (core > 0) {
48 cpuAffinitySet = new CpuAffinitySet;
49 cpu_set_t cpuSet;
50 CPU_ZERO(&cpuSet);
51 CPU_SET(core - 1, &cpuSet);
52 cpuAffinitySet->set(cpuSet);
53 }
54 return cpuAffinitySet;
55}