Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ITT instrumentation for slab and cuckoo #238

Merged
merged 1 commit into from
Aug 1, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ option(HAVE_RUST "build features written in rust" OFF)
option(RUST_USE_MUSL "build rust deps against musl" OFF)
option(BUILD_AND_INSTALL_CHECK "build our own version of check and link against it" OFF)
option(USE_PMEM "build persistent memory features" OFF)
option(HAVE_ITT_INSTRUMENTATION "instrument code with ITT API" OFF)

option(COVERAGE "code coverage" OFF)

Expand Down Expand Up @@ -160,6 +161,17 @@ if (USE_PMEM)
link_directories(${LIBPMEM_LIBRARY_DIRS})
endif(USE_PMEM)

if (HAVE_ITT_INSTRUMENTATION)
if(PKG_CONFIG_FOUND)
pkg_check_modules(ITTNOTIFY REQUIRED ittnotify>=1.0)
else()
find_package(ITTNOTIFY REQUIRED 1.0)
endif()
include_directories(${ITTNOTIFY_INCLUDE_DIRS})
link_directories(${ITTNOTIFY_LIBRARY_DIRS})
link_libraries(${ITTNOTIFY_LIBRARIES})
endif(HAVE_ITT_INSTRUMENTATION)

find_package(Threads)

if(TARGET_CDB)
Expand Down
65 changes: 65 additions & 0 deletions cmake/FindITTNOTIFY.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# ITTNOTIFY is the instrumentation and tracing technology (ITT) APIs provided by
# the Intel® VTune™Amplifier enable your application to generate and control
# the collection of trace data during its execution.
#
# The following variables are set when ITTNOTIFY is found:
# ITTNOTIFY_FOUND = Set to true, if all components of ITTNOTIFY have been found.
# ITTNOTIFY_INCLUDE_DIRS = Include path for the header files of ITTNOTIFY.
# ITTNOTIFY_LIBRARY_DIRS = Library search path for the ITTNOTIFY libraries.
# ITTNOTIFY_LIBRARIES = Link these to use ITTNOTIFY.
# ITTNOTIFY_LFLAGS = Linker flags (optional).

if (NOT ITTNOTIFY_FOUND)

find_program(VTUNE_EXECUTABLE amplxe-cl)

if(NOT VTUNE_EXECUTABLE)
set(ITTNOTIFY_FOUND false)
return()
endif()

get_filename_component(VTUNE_DIR ${VTUNE_EXECUTABLE} PATH)
set(ITTNOTIFY_ROOT_DIR "${VTUNE_DIR}/..")

##_____________________________________________________________________________
## Check for the header files

find_path (ITTNOTIFY_INCLUDE_DIRS
NAMES ittnotify.h
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local
PATH_SUFFIXES include
)

##_____________________________________________________________________________
## Check for the library

find_library (ITTNOTIFY_LIBRARIES ittnotify
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local /opt/local
PATH_SUFFIXES lib64 lib
)

##_____________________________________________________________________________
## Actions taken when all components have been found

find_package_handle_standard_args (ITTNOTIFY DEFAULT_MSG ITTNOTIFY_LIBRARIES ITTNOTIFY_INCLUDE_DIRS)

if (ITTNOTIFY_FOUND)
if (NOT ITTNOTIFY_FIND_QUIETLY)
message (STATUS "Found components for ITTNOTIFY")
message (STATUS "ITTNOTIFY_ROOT_DIR = ${ITTNOTIFY_ROOT_DIR}")
message (STATUS "ITTNOTIFY_INCLUDE_DIRS = ${ITTNOTIFY_INCLUDE_DIRS}")
message (STATUS "ITTNOTIFY_LIBRARIES = ${ITTNOTIFY_LIBRARIES}")
endif (NOT ITTNOTIFY_FIND_QUIETLY)
else (ITTNOTIFY_FOUND)
if (ITTNOTIFY_FIND_REQUIRED)
message (FATAL_ERROR "Could not find ITTNOTIFY!")
endif (ITTNOTIFY_FIND_REQUIRED)
endif (ITTNOTIFY_FOUND)

if(UNIX)
list(APPEND ITTNOTIFY_LIBRARIES dl)
endif()

endif (NOT ITTNOTIFY_FOUND)
2 changes: 2 additions & 0 deletions cmake/config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

#cmakedefine HAVE_STATS

#cmakedefine HAVE_ITT_INSTRUMENTATION

#cmakedefine TARGET_SLIMCACHE

#cmakedefine TARGET_TWEMCACHE
Expand Down
12 changes: 12 additions & 0 deletions deps/ccommon/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ option(HAVE_STATS "stats enabled by default" ON)
option(HAVE_DEBUG_MM "debugging oriented memory management disabled by default" OFF)
option(COVERAGE "code coverage" OFF)
option(HAVE_RUST "rust bindings not built by default" OFF)
option(HAVE_ITT_INSTRUMENTATION "instrument code with ITT API" OFF)

if(HAVE_RUST)
option(RUST_VERBOSE_BUILD "pass -vv to cargo compilation" OFF)
Expand Down Expand Up @@ -164,6 +165,17 @@ if(NOT CHECK_FOUND)
find_package(Check QUIET 0.10)
endif()

if (HAVE_ITT_INSTRUMENTATION)
if(PKG_CONFIG_FOUND)
pkg_check_modules(ITTNOTIFY REQUIRED ittnotify>=1.0)
else()
find_package(ITTNOTIFY REQUIRED 1.0)
endif()
include_directories(${ITTNOTIFY_INCLUDE_DIRS})
link_directories(${ITTNOTIFY_LIBRARY_DIRS})
link_libraries(${ITTNOTIFY_LIBRARIES})
endif(HAVE_ITT_INSTRUMENTATION)

find_package(Threads)


Expand Down
65 changes: 65 additions & 0 deletions deps/ccommon/cmake/FindITTNOTIFY.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# ITTNOTIFY is the instrumentation and tracing technology (ITT) APIs provided by
# the Intel® VTune™Amplifier enable your application to generate and control
# the collection of trace data during its execution.
#
# The following variables are set when ITTNOTIFY is found:
# ITTNOTIFY_FOUND = Set to true, if all components of ITTNOTIFY have been found.
# ITTNOTIFY_INCLUDE_DIRS = Include path for the header files of ITTNOTIFY.
# ITTNOTIFY_LIBRARY_DIRS = Library search path for the ITTNOTIFY libraries.
# ITTNOTIFY_LIBRARIES = Link these to use ITTNOTIFY.
# ITTNOTIFY_LFLAGS = Linker flags (optional).

if (NOT ITTNOTIFY_FOUND)

find_program(VTUNE_EXECUTABLE amplxe-cl)

if(NOT VTUNE_EXECUTABLE)
set(ITTNOTIFY_FOUND false)
return()
endif()

get_filename_component(VTUNE_DIR ${VTUNE_EXECUTABLE} PATH)
set(ITTNOTIFY_ROOT_DIR "${VTUNE_DIR}/..")

##_____________________________________________________________________________
## Check for the header files

find_path (ITTNOTIFY_INCLUDE_DIRS
NAMES ittnotify.h
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local
PATH_SUFFIXES include
)

##_____________________________________________________________________________
## Check for the library

find_library (ITTNOTIFY_LIBRARIES ittnotify
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local /opt/local
PATH_SUFFIXES lib64 lib
)

##_____________________________________________________________________________
## Actions taken when all components have been found

find_package_handle_standard_args (ITTNOTIFY DEFAULT_MSG ITTNOTIFY_LIBRARIES ITTNOTIFY_INCLUDE_DIRS)

if (ITTNOTIFY_FOUND)
if (NOT ITTNOTIFY_FIND_QUIETLY)
message (STATUS "Found components for ITTNOTIFY")
message (STATUS "ITTNOTIFY_ROOT_DIR = ${ITTNOTIFY_ROOT_DIR}")
message (STATUS "ITTNOTIFY_INCLUDE_DIRS = ${ITTNOTIFY_INCLUDE_DIRS}")
message (STATUS "ITTNOTIFY_LIBRARIES = ${ITTNOTIFY_LIBRARIES}")
endif (NOT ITTNOTIFY_FIND_QUIETLY)
else (ITTNOTIFY_FOUND)
if (ITTNOTIFY_FIND_REQUIRED)
message (FATAL_ERROR "Could not find ITTNOTIFY!")
endif (ITTNOTIFY_FIND_REQUIRED)
endif (ITTNOTIFY_FOUND)

if(UNIX)
list(APPEND ITTNOTIFY_LIBRARIES dl)
endif()

endif (NOT ITTNOTIFY_FOUND)
2 changes: 2 additions & 0 deletions deps/ccommon/config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@
#cmakedefine HAVE_STATS

#cmakedefine HAVE_DEBUG_MM

#cmakedefine HAVE_ITT_INSTRUMENTATION
4 changes: 4 additions & 0 deletions deps/ccommon/include/cc_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ extern "C" {
#define CC_DEBUG_MM 1
#endif

#ifdef HAVE_ITT_INSTRUMENTATION
#define CC_ITT 1
#endif

#define CC_OK 0
#define CC_ERROR -1

Expand Down
69 changes: 69 additions & 0 deletions deps/ccommon/include/cc_itt.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#pragma once

#include <cc_define.h>

#ifdef CC_ITT
#include "ittnotify.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif
#ifdef CC_ITT

#define ITT_DOMAIN_NAME "cc_itt"

#define cc_declare_itt_function(_keyword, _name) \
_keyword __itt_heap_function _name

#define cc_create_itt_malloc(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_create_itt_free(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_create_itt_realloc(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_itt_alloc(_itt_heap_f, _p, _s) do { \
__itt_heap_allocate_begin(_itt_heap_f, (size_t)(_s), 0); \
__itt_heap_allocate_end(_itt_heap_f, (void *)&(_p), (size_t)(_s), 0); \
} while (0)

#define cc_itt_zalloc(_itt_heap_f, _p, _s) do { \
__itt_heap_allocate_begin(_itt_heap_f, (size_t)(_s), 1); \
__itt_heap_allocate_end(_itt_heap_f, (void *)&(_p), (size_t)(_s), 1); \
} while (0)

#define cc_itt_free(_itt_heap_f, _p) do { \
__itt_heap_free_begin(_itt_heap_f, _p); \
__itt_heap_free_end(_itt_heap_f, _p); \
} while (0)

#define cc_itt_realloc(_itt_heap_f, _p, _np, _s) do { \
__itt_heap_reallocate_begin(_itt_heap_f, _p, (size_t)(_s), 0); \
__itt_heap_reallocate_end(_itt_heap_f, _p, (void *)&(_np), (size_t)(_s), 0); \
} while (0)

#define cc_itt_heap_internal_access() \
__itt_heap_internal_access_begin()

#define cc_itt_heap_internal_access_end() \
__itt_heap_internal_access_end()

#else
#define cc_declare_itt_function(_keyword, _name)
#define cc_create_itt_malloc(_name)
#define cc_create_itt_free(_name)
#define cc_create_itt_realloc(_name)
#define cc_itt_alloc(_itt_heap_f, _p, _s)
#define cc_itt_zalloc(_itt_heap_f, _p, _s)
#define cc_itt_free(_itt_heap_f, _p)
#define cc_itt_realloc(_itt_heap_f, _p, _np, _s)
#define cc_itt_heap_internal_access_begin()
#define cc_itt_heap_internal_access_end()
#endif /* CC_ITT */

#ifdef __cplusplus
}
#endif
9 changes: 9 additions & 0 deletions src/storage/cuckoo/cuckoo.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include <cc_define.h>
#include <hash/cc_murmur3.h>
#include <cc_mm.h>
#include <cc_itt.h>

#include <datapool/datapool.h>

Expand Down Expand Up @@ -62,6 +63,9 @@ static size_t hash_size; /* item_size * max_nitem, computed at setup */
DECR_N(cuckoo_metrics, item_data_curr, item_datalen(it)); \
} while(0)

cc_declare_itt_function(static, cuckoo_malloc);
cc_declare_itt_function(static, cuckoo_free);

static inline uint32_t vlen(struct val *val)
{
if (val->type == VAL_TYPE_INT) {
Expand Down Expand Up @@ -291,6 +295,9 @@ cuckoo_setup(cuckoo_options_st *options, cuckoo_metrics_st *metrics)
}
ds = datapool_addr(pool);

cc_create_itt_malloc(cuckoo_malloc);
cc_create_itt_free(cuckoo_free);

cuckoo_init = true;
}

Expand Down Expand Up @@ -395,6 +402,7 @@ cuckoo_insert(struct bstring *key, struct val *val, proc_time_i expire)
item_set(it, key, val, expire);
INCR(cuckoo_metrics, item_insert);
ITEM_METRICS_INCR(it);
cc_itt_alloc(cuckoo_malloc, it, item_size);

return it;
}
Expand Down Expand Up @@ -438,6 +446,7 @@ cuckoo_delete(struct bstring *key)
ITEM_METRICS_DECR(it);
item_delete(it);
log_verb("deleting item at location %p", it);
cc_itt_free(cuckoo_free, it);

return true;
} else {
Expand Down
3 changes: 3 additions & 0 deletions src/storage/slab/item.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ _item_dealloc(struct item **it_p)
PERSLAB_DECR(id, item_curr);

slab_put_item(*it_p, id);
cc_itt_free(slab_free, *it_p);
*it_p = NULL;
}

Expand Down Expand Up @@ -147,6 +148,8 @@ item_insert(struct item *it, const struct bstring *key)
_item_link(it, false);
log_verb("insert it %p of id %"PRIu8" for key %.*s", it, it->id, key->len,
key->data);

cc_itt_alloc(slab_malloc, it, item_size(it));
}

/*
Expand Down
6 changes: 6 additions & 0 deletions src/storage/slab/slab.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ delta_time_i max_ttl = ITEM_MAX_TTL;
static bool slab_init = false;
slab_metrics_st *slab_metrics = NULL;

cc_declare_itt_function(,slab_malloc);
cc_declare_itt_function(,slab_free);

void
slab_print(void)
{
Expand Down Expand Up @@ -595,6 +598,9 @@ slab_setup(slab_options_st *options, slab_metrics_st *metrics)
goto error;
}

cc_create_itt_malloc(slab_malloc);
cc_create_itt_free(slab_free);

slab_init = true;

return;
Expand Down
3 changes: 3 additions & 0 deletions src/storage/slab/slab.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "slabclass.h"

#include <cc_define.h>
#include <cc_itt.h>
#include <cc_metric.h>
#include <cc_option.h>
#include <cc_util.h>
Expand Down Expand Up @@ -146,6 +147,8 @@ TAILQ_HEAD(slab_tqh, slab);
extern struct hash_table *hash_table;
extern size_t slab_size;
extern slab_metrics_st *slab_metrics;
cc_declare_itt_function(extern, slab_malloc);
cc_declare_itt_function(extern, slab_free);

/*
* Return the usable space for item sized chunks that would be carved out
Expand Down