src/os/linux/vm/os_linux.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/os/linux/vm/os_linux.cpp Thu Sep 21 13:56:09 2017
--- new/src/os/linux/vm/os_linux.cpp Thu Sep 21 13:56:08 2017
*** 170,181 ****
--- 170,194 ----
}
julong os::Linux::available_memory() {
// values in struct sysinfo are "unsigned long"
struct sysinfo si;
sysinfo(&si);
+ if (OSContainer::is_containerized()) {
+ julong avail_mem, mem_limit, mem_usage;
+ if ((mem_limit = OSContainer::memory_limit_in_bytes()) > 0) {
+ if ((mem_usage = OSContainer::memory_usage_in_bytes()) > 0) {
+ if (mem_limit > mem_usage) {
+ avail_mem = (julong)(mem_limit - mem_usage);
+ log_trace(os,container)("available container memory: %ld", avail_mem);
+ return avail_mem;
+ }
+ }
+ }
+ }
+
+ sysinfo(&si);
return (julong)si.freeram * si.mem_unit;
}
julong os::physical_memory() {
return Linux::physical_memory();
*** 1949,1958 ****
--- 1962,1973 ----
os::Posix::print_rlimit_info(st);
os::Posix::print_load_average(st);
os::Linux::print_full_memory_info(st);
+
+ os::Linux::print_container_info(st);
}
// Try to identify popular distros.
// Most Linux distributions have a /etc/XXX-release file, which contains
// the OS version string. Newer Linux distributions have a /etc/lsb-release
*** 2086,2095 ****
--- 2101,2149 ----
st->print("\n/proc/meminfo:\n");
_print_ascii_file("/proc/meminfo", st);
st->cr();
}
+ void os::Linux::print_container_info(outputStream* st) {
+ st->print("container:");
+ if (OSContainer::is_containerized()) {
+ char *p;
+ jlong j;
+ int i;
+ st->print("Running in a container: true");
+ p = OSContainer::cpu_cpuset_cpus();
+ if (p < 0) st->print("OSContainer::cpu_cpuset_cpus() failed");
+ else {
+ st->print("OSContainer::cpu_cpuset_cpus: %s", p);
+ free(p);
+ }
+
+ i = OSContainer::active_processor_count();
+ if (i < 0) st->print("OSContainer::active_processor_count() failed");
+ else
+ st->print("OSContainer::active_processor_count: %d", i);
+
+ j = OSContainer::memory_limit_in_bytes();
+ if (j < 0L) st->print("OSContainer::memory_limit_in_bytes() failed");
+ else
+ st->print("OSContainer::memory_limit_in_bytes: %ld", j);
+
+ j = OSContainer::OSContainer::memory_usage_in_bytes();
+ if (j < 0L) st->print("OSContainer::memory_usage_in_bytes() failed");
+ else
+ st->print("OSContainer::memory_usage_in_bytes: %ld", j);
+
+ j = OSContainer::OSContainer::memory_max_usage_in_bytes();
+ if (j < 0L) st->print("OSContainer::memory_max_usage_in_bytes() failed");
+ else
+ st->print("OSContainer::memory_max_usage_in_bytes: %ld", j);
+ }
+ else {
+ st->print("Running in a container: false");
+ }
+ }
+
void os::print_memory_info(outputStream* st) {
st->print("Memory:");
st->print(" %dk page", os::vm_page_size()>>10);
*** 4801,4811 ****
--- 4855,4864 ----
}
}
// this is called _after_ the global arguments have been parsed
jint os::init_2(void) {
os::Posix::init_2();
Linux::fast_thread_clock_init();
// Allocate a single page and mark it as readable for safepoint polling
*** 4966,4975 ****
--- 5019,5046 ----
int os::active_processor_count() {
cpu_set_t cpus; // can represent at most 1024 (CPU_SETSIZE) processors
cpu_set_t* cpus_p = &cpus;
int cpus_size = sizeof(cpu_set_t);
+ // User has overridden the number of active processors
+ if (!FLAG_IS_DEFAULT(ActiveProcessorCount)) {
+ log_trace(os)("active_processor_count: "
+ "active processor count set by user : %d",
+ (int)ActiveProcessorCount);
+ return ActiveProcessorCount;
+ }
+
+ if (OSContainer::is_containerized()) {
+ int active_cpus;
+ if ((active_cpus = OSContainer::active_processor_count()) > 0) {
+ log_trace(os,container)("active_processor_count: "
+ "active processor count determined by OSContainer: %d",
+ (int)active_cpus);
+ return active_cpus;
+ }
+ }
+
int configured_cpus = processor_count(); // upper bound on available cpus
int cpu_count = 0;
// old build platforms may not support dynamic cpu sets
#ifdef CPU_ALLOC
src/os/linux/vm/os_linux.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File