Skip to content

Commit 1852710

Browse files
committed
separate-machine-container-functions
1 parent 5252262 commit 1852710

20 files changed

+363
-160
lines changed

src/hotspot/os/aix/os_aix.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,10 +258,18 @@ bool os::free_memory(physical_memory_size_type& value) {
258258
return Aix::available_memory(value);
259259
}
260260

261+
bool os::machine_free_memory(physical_memory_size_type& value) {
262+
return Aix::available_memory(value);
263+
}
264+
261265
bool os::available_memory(physical_memory_size_type& value) {
262266
return Aix::available_memory(value);
263267
}
264268

269+
bool os::machine_available_memory(physical_memory_size_type& value) {
270+
return Aix::available_memory(value);
271+
}
272+
265273
bool os::Aix::available_memory(physical_memory_size_type& value) {
266274
os::Aix::meminfo_t mi;
267275
if (os::Aix::get_meminfo(&mi)) {
@@ -273,6 +281,10 @@ bool os::Aix::available_memory(physical_memory_size_type& value) {
273281
}
274282

275283
bool os::total_swap_space(physical_memory_size_type& value) {
284+
return machine_total_swap_space(value);
285+
}
286+
287+
bool os::machine_total_swap_space(physical_memory_size_type& value) {
276288
perfstat_memory_total_t memory_info;
277289
if (libperfstat::perfstat_memory_total(nullptr, &memory_info, sizeof(perfstat_memory_total_t), 1) == -1) {
278290
return false;
@@ -282,6 +294,10 @@ bool os::total_swap_space(physical_memory_size_type& value) {
282294
}
283295

284296
bool os::free_swap_space(physical_memory_size_type& value) {
297+
return machine_free_swap_space(value);
298+
}
299+
300+
bool os::machine_free_swap_space(physical_memory_size_type& value) {
285301
perfstat_memory_total_t memory_info;
286302
if (libperfstat::perfstat_memory_total(nullptr, &memory_info, sizeof(perfstat_memory_total_t), 1) == -1) {
287303
return false;
@@ -294,6 +310,10 @@ physical_memory_size_type os::physical_memory() {
294310
return Aix::physical_memory();
295311
}
296312

313+
physical_memory_size_type os::machine_physical_memory() {
314+
return Aix::physical_memory();
315+
}
316+
297317
size_t os::rss() { return (size_t)0; }
298318

299319
// Cpu architecture string
@@ -2259,6 +2279,10 @@ int os::active_processor_count() {
22592279
return ActiveProcessorCount;
22602280
}
22612281

2282+
return machine_active_processor_count();
2283+
}
2284+
2285+
int os::machine_active_processor_count() {
22622286
int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
22632287
assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
22642288
return online_cpus;

src/hotspot/os/bsd/os_bsd.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,18 @@ bool os::available_memory(physical_memory_size_type& value) {
137137
return Bsd::available_memory(value);
138138
}
139139

140+
bool os::machine_available_memory(physical_memory_size_type& value) {
141+
return Bsd::available_memory(value);
142+
}
143+
140144
bool os::free_memory(physical_memory_size_type& value) {
141145
return Bsd::available_memory(value);
142146
}
143147

148+
bool os::machine_free_memory(physical_memory_size_type& value) {
149+
return Bsd::available_memory(value);
150+
}
151+
144152
// Available here means free. Note that this number is of no much use. As an estimate
145153
// for future memory pressure it is far too conservative, since MacOS will use a lot
146154
// of unused memory for caches, and return it willingly in case of needs.
@@ -181,6 +189,10 @@ void os::Bsd::print_uptime_info(outputStream* st) {
181189
}
182190

183191
bool os::total_swap_space(physical_memory_size_type& value) {
192+
return machine_total_swap_space(value);
193+
}
194+
195+
bool os::machine_total_swap_space(physical_memory_size_type& value) {
184196
#if defined(__APPLE__)
185197
struct xsw_usage vmusage;
186198
size_t size = sizeof(vmusage);
@@ -195,6 +207,10 @@ bool os::total_swap_space(physical_memory_size_type& value) {
195207
}
196208

197209
bool os::free_swap_space(physical_memory_size_type& value) {
210+
return machine_free_swap_space(value);
211+
}
212+
213+
bool os::machine_free_swap_space(physical_memory_size_type& value) {
198214
#if defined(__APPLE__)
199215
struct xsw_usage vmusage;
200216
size_t size = sizeof(vmusage);
@@ -212,6 +228,10 @@ physical_memory_size_type os::physical_memory() {
212228
return Bsd::physical_memory();
213229
}
214230

231+
physical_memory_size_type os::machine_physical_memory() {
232+
return Bsd::physical_memory();
233+
}
234+
215235
size_t os::rss() {
216236
size_t rss = 0;
217237
#ifdef __APPLE__
@@ -2112,6 +2132,10 @@ int os::active_processor_count() {
21122132
return ActiveProcessorCount;
21132133
}
21142134

2135+
return machine_active_processor_count();
2136+
}
2137+
2138+
int os::machine_active_processor_count() {
21152139
return _processor_count;
21162140
}
21172141

src/hotspot/os/linux/cgroupSubsystem_linux.cpp

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -632,24 +632,20 @@ void CgroupSubsystemFactory::cleanup(CgroupInfo* cg_infos) {
632632
* return:
633633
* number of CPUs
634634
*/
635-
int CgroupSubsystem::active_processor_count() {
636-
int quota_count = 0;
637-
int cpu_count;
638-
int result;
639-
635+
double CgroupSubsystem::active_processor_count() {
640636
// We use a cache with a timeout to avoid performing expensive
641637
// computations in the event this function is called frequently.
642638
// [See 8227006].
643-
CachingCgroupController<CgroupCpuController>* contrl = cpu_controller();
644-
CachedMetric* cpu_limit = contrl->metrics_cache();
639+
CachingCgroupController<CgroupCpuController, double>* contrl = cpu_controller();
640+
CachedMetric<double>* cpu_limit = contrl->metrics_cache();
645641
if (!cpu_limit->should_check_metric()) {
646-
int val = (int)cpu_limit->value();
647-
log_trace(os, container)("CgroupSubsystem::active_processor_count (cached): %d", val);
642+
double val = cpu_limit->value();
643+
log_trace(os, container)("CgroupSubsystem::active_processor_count (cached): %.2f", val);
648644
return val;
649645
}
650646

651-
cpu_count = os::Linux::active_processor_count();
652-
result = CgroupUtil::processor_count(contrl->controller(), cpu_count);
647+
int cpu_count = os::Linux::active_processor_count();
648+
double result = CgroupUtil::processor_count(contrl->controller(), cpu_count);
653649
// Update cached metric to avoid re-reading container settings too often
654650
cpu_limit->set_value(result, OSCONTAINER_CACHE_TIMEOUT);
655651

@@ -666,8 +662,8 @@ int CgroupSubsystem::active_processor_count() {
666662
* OSCONTAINER_ERROR for not supported
667663
*/
668664
jlong CgroupSubsystem::memory_limit_in_bytes(julong upper_bound) {
669-
CachingCgroupController<CgroupMemoryController>* contrl = memory_controller();
670-
CachedMetric* memory_limit = contrl->metrics_cache();
665+
CachingCgroupController<CgroupMemoryController, jlong>* contrl = memory_controller();
666+
CachedMetric<jlong>* memory_limit = contrl->metrics_cache();
671667
if (!memory_limit->should_check_metric()) {
672668
return memory_limit->value();
673669
}

src/hotspot/os/linux/cgroupSubsystem_linux.hpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,10 @@ class CgroupController: public CHeapObj<mtInternal> {
162162
static jlong limit_from_str(char* limit_str);
163163
};
164164

165+
template <typename MetricType>
165166
class CachedMetric : public CHeapObj<mtInternal>{
166167
private:
167-
volatile jlong _metric;
168+
volatile MetricType _metric;
168169
volatile jlong _next_check_counter;
169170
public:
170171
CachedMetric() {
@@ -174,8 +175,8 @@ class CachedMetric : public CHeapObj<mtInternal>{
174175
bool should_check_metric() {
175176
return os::elapsed_counter() > _next_check_counter;
176177
}
177-
jlong value() { return _metric; }
178-
void set_value(jlong value, jlong timeout) {
178+
MetricType value() { return _metric; }
179+
void set_value(MetricType value, jlong timeout) {
179180
_metric = value;
180181
// Metric is unlikely to change, but we want to remain
181182
// responsive to configuration changes. A very short grace time
@@ -186,19 +187,19 @@ class CachedMetric : public CHeapObj<mtInternal>{
186187
}
187188
};
188189

189-
template <class T>
190+
template <class T, typename MetricType>
190191
class CachingCgroupController : public CHeapObj<mtInternal> {
191192
private:
192193
T* _controller;
193-
CachedMetric* _metrics_cache;
194+
CachedMetric<MetricType>* _metrics_cache;
194195

195196
public:
196197
CachingCgroupController(T* cont) {
197198
_controller = cont;
198-
_metrics_cache = new CachedMetric();
199+
_metrics_cache = new CachedMetric<MetricType>();
199200
}
200201

201-
CachedMetric* metrics_cache() { return _metrics_cache; }
202+
CachedMetric<MetricType>* metrics_cache() { return _metrics_cache; }
202203
T* controller() { return _controller; }
203204
};
204205

@@ -252,7 +253,7 @@ class CgroupMemoryController: public CHeapObj<mtInternal> {
252253
class CgroupSubsystem: public CHeapObj<mtInternal> {
253254
public:
254255
jlong memory_limit_in_bytes(julong upper_bound);
255-
int active_processor_count();
256+
double active_processor_count();
256257

257258
virtual jlong pids_max() = 0;
258259
virtual jlong pids_current() = 0;
@@ -261,8 +262,8 @@ class CgroupSubsystem: public CHeapObj<mtInternal> {
261262
virtual char * cpu_cpuset_cpus() = 0;
262263
virtual char * cpu_cpuset_memory_nodes() = 0;
263264
virtual const char * container_type() = 0;
264-
virtual CachingCgroupController<CgroupMemoryController>* memory_controller() = 0;
265-
virtual CachingCgroupController<CgroupCpuController>* cpu_controller() = 0;
265+
virtual CachingCgroupController<CgroupMemoryController, jlong>* memory_controller() = 0;
266+
virtual CachingCgroupController<CgroupCpuController, double>* cpu_controller() = 0;
266267
virtual CgroupCpuacctController* cpuacct_controller() = 0;
267268

268269
int cpu_quota();

src/hotspot/os/linux/cgroupUtil_linux.cpp

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,19 @@
2525
#include "cgroupUtil_linux.hpp"
2626
#include "os_linux.hpp"
2727

28-
int CgroupUtil::processor_count(CgroupCpuController* cpu_ctrl, int host_cpus) {
28+
double CgroupUtil::processor_count(CgroupCpuController* cpu_ctrl, int host_cpus) {
2929
assert(host_cpus > 0, "physical host cpus must be positive");
30-
int limit_count = host_cpus;
3130
int quota = cpu_ctrl->cpu_quota();
3231
int period = cpu_ctrl->cpu_period();
33-
int quota_count = 0;
34-
int result = 0;
32+
double result = static_cast<double>(host_cpus);
3533

36-
if (quota > -1 && period > 0) {
37-
quota_count = ceilf((float)quota / (float)period);
38-
log_trace(os, container)("CPU Quota count based on quota/period: %d", quota_count);
34+
if (quota > 0 && period > 0) { // Use quotas
35+
double cpu_quota = static_cast<double>(quota) / period;
36+
log_trace(os, container)("CPU Quota based on quota/period: %.2f", cpu_quota);
37+
result = MIN2(result, cpu_quota);
3938
}
4039

41-
// Use quotas
42-
if (quota_count != 0) {
43-
limit_count = quota_count;
44-
}
45-
46-
result = MIN2(host_cpus, limit_count);
47-
log_trace(os, container)("OSContainer::active_processor_count: %d", result);
40+
log_trace(os, container)("OSContainer::active_processor_count: %.2f", result);
4841
return result;
4942
}
5043

src/hotspot/os/linux/cgroupUtil_linux.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
class CgroupUtil: AllStatic {
3232

3333
public:
34-
static int processor_count(CgroupCpuController* cpu, int host_cpus);
34+
static double processor_count(CgroupCpuController* cpu, int host_cpus);
3535
// Given a memory controller, adjust its path to a point in the hierarchy
3636
// that represents the closest memory limit.
3737
static void adjust_controller(CgroupMemoryController* m);

src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,8 @@ CgroupV1Subsystem::CgroupV1Subsystem(CgroupV1Controller* cpuset,
266266
_pids(pids) {
267267
CgroupUtil::adjust_controller(memory);
268268
CgroupUtil::adjust_controller(cpu);
269-
_memory = new CachingCgroupController<CgroupMemoryController>(memory);
270-
_cpu = new CachingCgroupController<CgroupCpuController>(cpu);
269+
_memory = new CachingCgroupController<CgroupMemoryController, jlong>(memory);
270+
_cpu = new CachingCgroupController<CgroupCpuController, double>(cpu);
271271
}
272272

273273
bool CgroupV1Subsystem::is_containerized() {

src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,15 @@ class CgroupV1Subsystem: public CgroupSubsystem {
193193
const char * container_type() {
194194
return "cgroupv1";
195195
}
196-
CachingCgroupController<CgroupMemoryController>* memory_controller() { return _memory; }
197-
CachingCgroupController<CgroupCpuController>* cpu_controller() { return _cpu; }
196+
CachingCgroupController<CgroupMemoryController, jlong>* memory_controller() { return _memory; }
197+
CachingCgroupController<CgroupCpuController, double>* cpu_controller() { return _cpu; }
198198
CgroupCpuacctController* cpuacct_controller() { return _cpuacct; }
199199

200200
private:
201201
/* controllers */
202-
CachingCgroupController<CgroupMemoryController>* _memory = nullptr;
202+
CachingCgroupController<CgroupMemoryController, jlong>* _memory = nullptr;
203203
CgroupV1Controller* _cpuset = nullptr;
204-
CachingCgroupController<CgroupCpuController>* _cpu = nullptr;
204+
CachingCgroupController<CgroupCpuController, double>* _cpu = nullptr;
205205
CgroupV1CpuacctController* _cpuacct = nullptr;
206206
CgroupV1Controller* _pids = nullptr;
207207

src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ CgroupV2Subsystem::CgroupV2Subsystem(CgroupV2MemoryController * memory,
120120
_unified(unified) {
121121
CgroupUtil::adjust_controller(memory);
122122
CgroupUtil::adjust_controller(cpu);
123-
_memory = new CachingCgroupController<CgroupMemoryController>(memory);
124-
_cpu = new CachingCgroupController<CgroupCpuController>(cpu);
123+
_memory = new CachingCgroupController<CgroupMemoryController, jlong>(memory);
124+
_cpu = new CachingCgroupController<CgroupCpuController, double>(cpu);
125125
_cpuacct = cpuacct;
126126
}
127127

src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@ class CgroupV2Subsystem: public CgroupSubsystem {
145145
/* One unified controller */
146146
CgroupV2Controller _unified;
147147
/* Caching wrappers for cpu/memory metrics */
148-
CachingCgroupController<CgroupMemoryController>* _memory = nullptr;
149-
CachingCgroupController<CgroupCpuController>* _cpu = nullptr;
148+
CachingCgroupController<CgroupMemoryController, jlong>* _memory = nullptr;
149+
CachingCgroupController<CgroupCpuController, double>* _cpu = nullptr;
150150

151151
CgroupCpuacctController* _cpuacct = nullptr;
152152

@@ -168,8 +168,8 @@ class CgroupV2Subsystem: public CgroupSubsystem {
168168
const char * container_type() override {
169169
return "cgroupv2";
170170
}
171-
CachingCgroupController<CgroupMemoryController>* memory_controller() override { return _memory; }
172-
CachingCgroupController<CgroupCpuController>* cpu_controller() override { return _cpu; }
171+
CachingCgroupController<CgroupMemoryController, jlong>* memory_controller() override { return _memory; }
172+
CachingCgroupController<CgroupCpuController, double>* cpu_controller() override { return _cpu; }
173173
CgroupCpuacctController* cpuacct_controller() override { return _cpuacct; };
174174
};
175175

0 commit comments

Comments
 (0)