numam-dpdk/lib/librte_eal/include/rte_trace.h
Jerin Jacob 27db82c709 trace: introduce new subsystem
Define the public API for trace support.
This patch also adds support for the build infrastructure and
update the MAINTAINERS file for the trace subsystem.

The 8 bytes tracepoint object is a global variable, and can be used in
fast path. Created a new __rte_trace_point section to store the
tracepoint objects as,
- It is a mostly read-only data and not to mix with other "write"
  global variables.
- Chances that the same subsystem fast path variables come in the same
  fast path cache line. i.e, it will enable a more predictable
  performance number from build to build.

Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Acked-by: David Marchand <david.marchand@redhat.com>
2020-04-23 15:39:06 +02:00

142 lines
2.9 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(C) 2020 Marvell International Ltd.
*/
#ifndef _RTE_TRACE_H_
#define _RTE_TRACE_H_
/**
* @file
*
* RTE Trace API
*
* This file provides the trace API to RTE applications.
*
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#include <stdio.h>
#include <rte_common.h>
#include <rte_compat.h>
/**
* Test if trace is enabled.
*
* @return
* true if trace is enabled, false otherwise.
*/
__rte_experimental
bool rte_trace_is_enabled(void);
/**
* Enumerate trace mode operation.
*/
enum rte_trace_mode {
/**
* In this mode, when no space is left in the trace buffer, the
* subsequent events overwrite the old events.
*/
RTE_TRACE_MODE_OVERWRITE,
/**
* In this mode, when no space is left in the trace buffer, the
* subsequent events shall not be recorded.
*/
RTE_TRACE_MODE_DISCARD,
};
/**
* Set the trace mode.
*
* @param mode
* Trace mode.
*/
__rte_experimental
void rte_trace_mode_set(enum rte_trace_mode mode);
/**
* Get the trace mode.
*
* @return
* The current trace mode.
*/
__rte_experimental
enum rte_trace_mode rte_trace_mode_get(void);
/**
* Enable/Disable a set of tracepoints based on globbing pattern.
*
* @param pattern
* The globbing pattern identifying the tracepoint.
* @param enable
* true to enable tracepoint, false to disable the tracepoint, upon match.
* @return
* - 0: Success and no pattern match.
* - 1: Success and found pattern match.
* - (-ERANGE): Tracepoint object is not registered.
*/
__rte_experimental
int rte_trace_pattern(const char *pattern, bool enable);
/**
* Enable/Disable a set of tracepoints based on regular expression.
*
* @param regex
* A regular expression identifying the tracepoint.
* @param enable
* true to enable tracepoint, false to disable the tracepoint, upon match.
* @return
* - 0: Success and no pattern match.
* - 1: Success and found pattern match.
* - (-ERANGE): Tracepoint object is not registered.
* - (-EINVAL): Invalid regular expression rule.
*/
__rte_experimental
int rte_trace_regexp(const char *regex, bool enable);
/**
* Save the trace buffer to the trace directory.
*
* By default, trace directory will be created at $HOME directory and this can
* be overridden by --trace-dir EAL parameter.
*
* @return
* - 0: Success.
* - <0 : Failure.
*/
__rte_experimental
int rte_trace_save(void);
/**
* Dump the trace metadata to a file.
*
* @param f
* A pointer to a file for output
* @return
* - 0: Success.
* - <0 : Failure.
*/
__rte_experimental
int rte_trace_metadata_dump(FILE *f);
/**
* Dump the trace subsystem status to a file.
*
* @param f
* A pointer to a file for output
*/
__rte_experimental
void rte_trace_dump(FILE *f);
#ifdef __cplusplus
}
#endif
#endif /* _RTE_TRACE_H_ */