< 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 >