Skip to content

Commit

Permalink
profiler: move perftools glue into perfglue/
Browse files Browse the repository at this point in the history
Signed-off-by: Colin McCabe <[email protected]>
  • Loading branch information
cmccabe committed Mar 1, 2011
1 parent 18e9b66 commit 7a429d9
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 46 deletions.
7 changes: 7 additions & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,12 @@ libcommon_files = \
common/version.cc \
common/hex.cc

if WITH_PROFILER
libcommon_files += perfglue/cpu_profiler.cc
else
libcommon_files += perfglue/disabled_stubs.cc
endif

libcrush_a_SOURCES = \
crush/builder.c \
crush/mapper.c \
Expand Down Expand Up @@ -965,6 +971,7 @@ noinst_HEADERS = \
osdc/Journaler.h\
osdc/ObjectCacher.h\
osdc/Objecter.h\
perfglue/cpu_profiler.h\
rgw/rgw_access.h\
rgw/rgw_acl.h\
rgw/rgw_fs.h\
Expand Down
1 change: 1 addition & 0 deletions src/common/LogEntry.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

#include "include/types.h"
#include "include/encoding.h"
#include "msg/msg_types.h" // for entity_inst_t

typedef enum {
CLOG_DEBUG = 0,
Expand Down
1 change: 1 addition & 0 deletions src/include/ceph_fs.cc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* ceph_fs.cc - Some Ceph functions that are shared between kernel space and
* user space.
*
*/

/*
Expand Down
49 changes: 3 additions & 46 deletions src/mds/MDS.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,7 @@

#include "common/config.h"

#ifdef HAVE_PROFILER
# include <google/profiler.h>
#endif
#include "perfglue/cpu_profiler.h"


#define DOUT_SUBSYS mds
Expand Down Expand Up @@ -779,50 +777,9 @@ void MDS::handle_command(MMonCommand *m)
} else dout(0) << "bad migrate_dir target syntax" << dendl;
} else dout(0) << "bad migrate_dir syntax" << dendl;
}

else if (m->cmd[0] == "cpu_profiler_start" && m->cmd.size() == 2) {
#ifdef HAVE_PROFILER
int r = ProfilerStart(m->cmd[1].c_str());
clog.info() << "cpu_profiler start, logging to " << m->cmd[1] << ", r=" << r << "\n";
#else
clog.info() << "cpu_profiler support not linked in\n";
#endif
}
else if (m->cmd[0] == "cpu_profiler_status") {
#ifdef HAVE_PROFILER
if (ProfilingIsEnabledForAllThreads())
clog.info() << "cpu_profiler is enabled\n";
else
clog.info() << "cpu_profiler is not enabled\n";
ProfilerState st;
ProfilerGetCurrentState(&st);
clog.info() << "cpu_profiler " << (st.enabled ? "enabled":"not enabled")
<< " start_time " << st.start_time
<< " profile_name " << st.profile_name
<< " samples " << st.samples_gathered
<< "\n";
#else
clog.info() << "cpu_profiler support not linked in\n";
#endif
}
else if (m->cmd[0] == "cpu_profiler_flush") {
#ifdef HAVE_PROFILER
clog.info() << "cpu_profiler flush\n";
ProfilerFlush();
#else
clog.info() << "cpu_profiler support not linked in\n";
#endif
}
else if (m->cmd[0] == "cpu_profiler_stop") {
#ifdef HAVE_PROFILER
clog.info() << "cpu_profiler flush and stop\n";
ProfilerFlush();
ProfilerStop();
#else
clog.info() << "cpu_profiler support not linked in\n";
#endif
else if (m->cmd[0] == "cpu_profiler") {
cpu_profiler_handle_command(m->cmd, clog);
}

else if (m->cmd.size() == 1 && m->cmd[0] == "heap_profiler_options") {
char val[sizeof(int)*8+1];
snprintf(val, sizeof(val), "%i", g_conf.profiler_allocation_interval);
Expand Down
60 changes: 60 additions & 0 deletions src/perfglue/cpu_profiler.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2011 New Dream Network
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/

#include "common/LogClient.h"
#include "perfglue/cpu_profiler.h"

#include <google/profiler.h>

void cpu_profiler_handle_command(const std::vector<std::string> &cmd,
LogClient &clog)
{
if (cmd[1] == "start") {
if (cmd.size() < 3) {
clog.info() << "cpu_profiler: you must give an argument to start: a "
<< "file name to log to.\n";
return;
}
const char *file = cmd[2].c_str();
int r = ProfilerStart(file);
clog.info() << "cpu_profiler: starting logging to " << file
<< ", r=" << r << "\n";
}
else if (cmd[1] == "status") {
if (ProfilingIsEnabledForAllThreads())
clog.info() << "cpu_profiler is enabled\n";
else
clog.info() << "cpu_profiler is not enabled\n";
ProfilerState st;
ProfilerGetCurrentState(&st);
clog.info() << "cpu_profiler " << (st.enabled ? "enabled":"not enabled")
<< " start_time " << st.start_time
<< " profile_name " << st.profile_name
<< " samples " << st.samples_gathered
<< "\n";
}
else if (cmd[1] == "flush") {
clog.info() << "cpu_profiler: flushing\n";
ProfilerFlush();
}
else if (cmd[1] == "stop") {
clog.info() << "cpu_profiler: flushing and stopping\n";
ProfilerFlush();
ProfilerStop();
}
else {
clog.info() << "can't understand cpu_profiler command. Expected one of: "
<< "start,status,flush,stop.\n";
}
}
27 changes: 27 additions & 0 deletions src/perfglue/cpu_profiler.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2011 New Dream Network
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/
#ifndef CEPH_PERFGLUE_CPU_PROFILER

/*
* Ceph glue for the Google Perftools CPU profiler
*/
#include <string>
#include <vector>

class LogClient;

void cpu_profiler_handle_command(const std::vector<std::string> &cmd,
LogClient &clog);

#endif
25 changes: 25 additions & 0 deletions src/perfglue/disabled_stubs.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2011 New Dream Network
*
* This is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software
* Foundation. See file COPYING.
*
*/

#include "common/LogClient.h"
#include "perfglue/cpu_profiler.h"

#include <vector>
#include <string>

void cpu_profiler_handle_command(const std::vector<std::string> &cmd,
LogClient &clog)
{
clog.info() << "cpu_profiler support not linked in\n";
}

0 comments on commit 7a429d9

Please sign in to comment.