< prev index next >
src/hotspot/os/linux/os_linux.cpp
Print this page
*** 61,71 ****
#include "runtime/stubRoutines.hpp"
#include "runtime/thread.inline.hpp"
#include "runtime/threadCritical.hpp"
#include "runtime/threadSMR.hpp"
#include "runtime/timer.hpp"
- #include "runtime/vm_version.hpp"
#include "semaphore_posix.hpp"
#include "services/attachListener.hpp"
#include "services/memTracker.hpp"
#include "services/runtimeService.hpp"
#include "utilities/align.hpp"
--- 61,70 ----
*** 1938,1947 ****
--- 1937,1975 ----
::close(fd);
return true;
}
+ #if defined(S390) || defined(PPC64)
+ // keywords_to_match - NULL terminated array of keywords
+ static bool print_matching_lines_from_file(const char* filename, outputStream* st, const char* keywords_to_match[]) {
+ char* line = NULL;
+ size_t length = 0;
+ FILE* fp = fopen(filename, "r");
+ if (fp == NULL) {
+ return false;
+ }
+
+ st->print_cr("Virtualization information:");
+ while (getline(&line, &length, fp) != -1) {
+ int i = 0;
+ while (keywords_to_match[i] != NULL) {
+ if (strncmp(line, keywords_to_match[i], strlen(keywords_to_match[i])) == 0) {
+ st->print("%s", line);
+ break;
+ }
+ i++;
+ }
+ }
+
+ free(line);
+ fclose(fp);
+
+ return true;
+ }
+ #endif
+
void os::print_dll_info(outputStream *st) {
st->print_cr("Dynamic libraries:");
char fname[32];
pid_t pid = os::Linux::gettid();
*** 2022,2032 ****
os::Linux::print_ld_preload_file(st);
os::Linux::print_container_info(st);
! VM_Version::print_platform_virtualization_info(st);
os::Linux::print_steal_info(st);
}
// Try to identify popular distros.
--- 2050,2060 ----
os::Linux::print_ld_preload_file(st);
os::Linux::print_container_info(st);
! os::Linux::print_virtualization_info(st);
os::Linux::print_steal_info(st);
}
// Try to identify popular distros.
*** 2279,2288 ****
--- 2307,2350 ----
st->print("%s\n", j == OSCONTAINER_ERROR ? "not supported" : "unlimited");
}
st->cr();
}
+ void os::Linux::print_virtualization_info(outputStream* st) {
+ #if defined(S390)
+ // /proc/sysinfo contains interesting information about
+ // - LPAR
+ // - whole "Box" (CPUs )
+ // - z/VM / KVM (VM<nn>); this is not available in an LPAR-only setup
+ const char* kw[] = { "LPAR", "CPUs", "VM", NULL };
+ const char* info_file = "/proc/sysinfo";
+
+ if (!print_matching_lines_from_file(info_file, st, kw)) {
+ st->print_cr(" <%s Not Available>", info_file);
+ }
+ #elif defined(PPC64)
+ const char* info_file = "/proc/ppc64/lparcfg";
+ const char* kw[] = { "system_type=", // qemu indicates PowerKVM
+ "partition_entitled_capacity=", // entitled processor capacity percentage
+ "partition_max_entitled_capacity=",
+ "capacity_weight=", // partition CPU weight
+ "partition_active_processors=",
+ "partition_potential_processors=",
+ "entitled_proc_capacity_available=",
+ "capped=", // 0 - uncapped, 1 - vcpus capped at entitled processor capacity percentage
+ "shared_processor_mode=", // (non)dedicated partition
+ "system_potential_processors=",
+ "pool=", // CPU-pool number
+ "pool_capacity=",
+ "NumLpars=", // on non-KVM machines, NumLpars is not found for full partition mode machines
+ NULL };
+ if (!print_matching_lines_from_file(info_file, st, kw)) {
+ st->print_cr(" <%s Not Available>", info_file);
+ }
+ #endif
+ }
+
void os::Linux::print_steal_info(outputStream* st) {
if (has_initial_tick_info) {
CPUPerfTicks pticks;
bool res = os::Linux::get_tick_information(&pticks, -1);
< prev index next >