Skip to content

Commit

Permalink
Volker feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
tstuefe committed Jun 25, 2021
1 parent 9a9f0ec commit 29807b2
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 13 deletions.
8 changes: 4 additions & 4 deletions src/hotspot/os/linux/os_linux.cpp
Expand Up @@ -2139,7 +2139,7 @@ void os::Linux::print_system_memory_info(outputStream* st) {

bool os::Linux::query_process_memory_info(os::Linux::meminfo_t* info) {
FILE* f = ::fopen("/proc/self/status", "r");
const int num_values = 8;
const int num_values = sizeof(os::Linux::meminfo_t) / sizeof(size_t);
int num_found = 0;
char buf[256];
info->vmsize = info->vmpeak = info->vmrss = info->vmhwm = info->vmswap =
Expand All @@ -2151,9 +2151,9 @@ bool os::Linux::query_process_memory_info(os::Linux::meminfo_t* info) {
(info->vmswap == -1 && sscanf(buf, "VmSwap: " SSIZE_FORMAT " kB", &info->vmswap) == 1) ||
(info->vmhwm == -1 && sscanf(buf, "VmHWM: " SSIZE_FORMAT " kB", &info->vmhwm) == 1) ||
(info->vmrss == -1 && sscanf(buf, "VmRSS: " SSIZE_FORMAT " kB", &info->vmrss) == 1) ||
(info->rssanon == -1 && sscanf(buf, "RssAnon: " SSIZE_FORMAT " kB", &info->rssanon) == 1) ||
(info->rssfile == -1 && sscanf(buf, "RssFile: " SSIZE_FORMAT " kB", &info->rssfile) == 1) ||
(info->rssshmem == -1 && sscanf(buf, "RssShmem: " SSIZE_FORMAT " kB", &info->rssshmem) == 1)
(info->rssanon == -1 && sscanf(buf, "RssAnon: " SSIZE_FORMAT " kB", &info->rssanon) == 1) || // Needs Linux 4.5
(info->rssfile == -1 && sscanf(buf, "RssFile: " SSIZE_FORMAT " kB", &info->rssfile) == 1) || // Needs Linux 4.5
(info->rssshmem == -1 && sscanf(buf, "RssShmem: " SSIZE_FORMAT " kB", &info->rssshmem) == 1) // Needs Linux 4.5
)
{
num_found ++;
Expand Down
13 changes: 9 additions & 4 deletions src/hotspot/os/linux/trimCHeapDCmd.cpp
Expand Up @@ -36,9 +36,9 @@ void TrimCLibcHeapDCmd::execute(DCmdSource source, TRAPS) {
#ifdef __GLIBC__
stringStream ss_report(1024); // Note: before calling trim

// Query memory before...
os::Linux::meminfo_t info1;
os::Linux::meminfo_t info2;
// Query memory before...
bool have_info1 = os::Linux::query_process_memory_info(&info1);

_output->print_cr("Attempting trim...");
Expand All @@ -49,25 +49,30 @@ void TrimCLibcHeapDCmd::execute(DCmdSource source, TRAPS) {
bool have_info2 = os::Linux::query_process_memory_info(&info2);

// Print report both to output stream as well to UL
bool wrote_something = false;
if (have_info1 && have_info2) {
if (info1.vmsize != -1 && info2.vmsize != -1) {
ss_report.print_cr("Virtual size before: " SSIZE_FORMAT "k, after: " SSIZE_FORMAT "k, (" SSIZE_FORMAT "k)",
info1.vmsize, info2.vmsize, (info2.vmsize - info1.vmsize));
wrote_something = true;
}
if (info1.vmrss != -1 && info2.vmrss != -1) {
ss_report.print_cr("RSS before: " SSIZE_FORMAT "k, after: " SSIZE_FORMAT "k, (" SSIZE_FORMAT "k)",
info1.vmrss, info2.vmrss, (info2.vmrss - info1.vmrss));
wrote_something = true;
}
if (info1.vmswap != -1 && info2.vmswap != -1) {
ss_report.print_cr("Swap before: " SSIZE_FORMAT "k, after: " SSIZE_FORMAT "k, (" SSIZE_FORMAT "k)",
info1.vmswap, info2.vmswap, (info2.vmswap - info1.vmswap));
wrote_something = true;
}
} else {
}
if (!wrote_something) {
ss_report.print_raw("No details available.");
}

_output->print_raw(ss_report.base());
log_info(os)("malloc_trim: ");
log_info(os)("%s", ss_report.base());
log_info(os)("malloc_trim:\n%s", ss_report.base());
#else
_output->print_cr("Not available.");
#endif
Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/os/linux/trimCHeapDCmd.hpp
Expand Up @@ -34,10 +34,10 @@ class TrimCLibcHeapDCmd : public DCmd {
public:
TrimCLibcHeapDCmd(outputStream* output, bool heap) : DCmd(output, heap) {}
static const char* name() {
return "VM.trim_libc_heap";
return "System.glibc_trim_heap";
}
static const char* description() {
return "Attempts to free up memory by trimming the glibc heap.";
return "Attempts to free up memory by trimming the glibc C-heap.";
}
static const char* impact() {
return "Low";
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/services/diagnosticCommand.cpp
Expand Up @@ -96,7 +96,6 @@ void DCmdRegistrant::register_dcmds(){
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<RunFinalizationDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapInfoDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<FinalizerInfoDCmd>(full_export, true, false));
LINUX_ONLY(DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<TrimCLibcHeapDCmd>(full_export, true, false));)
#if INCLUDE_SERVICES
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<HeapDumpDCmd>(DCmd_Source_Internal | DCmd_Source_AttachAPI, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<ClassHistogramDCmd>(full_export, true, false));
Expand All @@ -121,6 +120,7 @@ void DCmdRegistrant::register_dcmds(){
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeCacheDCmd>(full_export, true, false));
#ifdef LINUX
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<PerfMapDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<TrimCLibcHeapDCmd>(full_export, true, false));
#endif // LINUX
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<TouchedMethodsDCmd>(full_export, true, false));
DCmdFactory::register_DCmdFactory(new DCmdFactoryImpl<CodeHeapAnalyticsDCmd>(full_export, true, false));
Expand Down
Expand Up @@ -40,9 +40,12 @@
*/
public class TrimLibcHeapTest {
public void run(CommandExecutor executor) {
OutputAnalyzer output = executor.execute("VM.trim_libc_heap");
OutputAnalyzer output = executor.execute("System.glibc_trim_heap");
output.reportDiagnosticSummary();
output.shouldMatch("(Done|Not available)");
output.shouldMatch("(Done|Not available)"); // Not available could happen on Linux + non-glibc (eg. muslc)
if (output.firstMatch("Done") != null) {
output.shouldMatch("(Virtual size before|RSS before|Swap before|No details available)");
}
}

@Test
Expand Down

0 comments on commit 29807b2

Please sign in to comment.