Many open source projects have moved to using SPDX identifiers to specify license information, reducing the amount of boilerplate code in every source file. This patch replaces the bulk of SPDK .c, .cpp and Makefiles with the BSD-3-Clause identifier. Almost all of these files share the exact same license text, and this patch only modifies the files that contain the most common license text. There can be slight variations because the third clause contains company names - most say "Intel Corporation", but there are instances for Nvidia, Samsung, Eideticom and even "the copyright holder". Used a bash script to automate replacement of the license text with SPDX identifier which is checked into scripts/spdx.sh. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Iaa88ab5e92ea471691dc298cfe41ebfb5d169780 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12904 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Dong Yi <dongx.yi@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: <qun.wan@intel.com>
129 lines
3.5 KiB
C
129 lines
3.5 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright (c) Intel Corporation. All rights reserved.
|
|
*/
|
|
|
|
/**
|
|
* \file
|
|
* Trace parser library
|
|
*/
|
|
|
|
#ifndef SPDK_TRACE_PARSER_H
|
|
#define SPDK_TRACE_PARSER_H
|
|
|
|
#include "spdk/stdinc.h"
|
|
#include "spdk/trace.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** Trace parser object used as a context for the parsing functions */
|
|
struct spdk_trace_parser;
|
|
|
|
enum spdk_trace_parser_mode {
|
|
/** Regular file */
|
|
SPDK_TRACE_PARSER_MODE_FILE,
|
|
/** Shared memory */
|
|
SPDK_TRACE_PARSER_MODE_SHM,
|
|
};
|
|
|
|
/** Describes trace file and options to use when parsing it */
|
|
struct spdk_trace_parser_opts {
|
|
/** Either file name or shared memory name depending on mode */
|
|
const char *filename;
|
|
/** Trace file type, either regular file or shared memory */
|
|
int mode;
|
|
/** Logical core number to parse the traces from (or SPDK_TRACE_MAX_LCORE) for all cores */
|
|
uint16_t lcore;
|
|
};
|
|
|
|
/**
|
|
* Initialize the parser using a specified trace file. This results in parsing the traces, merging
|
|
* entries from multiple cores together and sorting them by their tsc, so it can take a significant
|
|
* amount of time to complete.
|
|
*
|
|
* \param opts Describes the trace file to parse.
|
|
*
|
|
* \return Parser object or NULL in case of any failures.
|
|
*/
|
|
struct spdk_trace_parser *spdk_trace_parser_init(const struct spdk_trace_parser_opts *opts);
|
|
|
|
/**
|
|
* Free any resources tied to a parser object.
|
|
*
|
|
* \param parser Parser to clean up.
|
|
*/
|
|
void spdk_trace_parser_cleanup(struct spdk_trace_parser *parser);
|
|
|
|
/**
|
|
* Return trace flags describing the traces.
|
|
*
|
|
* \param parser Parser object to be used.
|
|
*
|
|
* \return Pointer to the trace flags.
|
|
*/
|
|
const struct spdk_trace_flags *spdk_trace_parser_get_flags(const struct spdk_trace_parser *parser);
|
|
|
|
/**
|
|
* Return the highest tsc out of first entries across all specified cores. This value can be used
|
|
* to select entries from the subset of time we have the data from all reactors.
|
|
*
|
|
* \param parser Parser object to be used.
|
|
*
|
|
* \return Offset in tsc.
|
|
*/
|
|
uint64_t spdk_trace_parser_get_tsc_offset(const struct spdk_trace_parser *parser);
|
|
|
|
/** Describes a parsed trace entry */
|
|
struct spdk_trace_parser_entry {
|
|
/** Pointer to trace entry */
|
|
struct spdk_trace_entry *entry;
|
|
/**
|
|
* Index of an object this entry is a part of. It's only available for tracepoints with
|
|
* object_type != OBJECT_NONE. If unavailable, it'll be assigned to UINT64_MAX.
|
|
*/
|
|
uint64_t object_index;
|
|
/** The tsc of when the object tied to this entry was created */
|
|
uint64_t object_start;
|
|
/** Logical core number */
|
|
uint16_t lcore;
|
|
/** Related object index */
|
|
uint64_t related_index;
|
|
/** Related object type */
|
|
uint8_t related_type;
|
|
/** Tracepoint arguments */
|
|
union {
|
|
uint64_t integer;
|
|
void *pointer;
|
|
char string[UINT8_MAX + 1];
|
|
} args[SPDK_TRACE_MAX_ARGS_COUNT];
|
|
};
|
|
|
|
/**
|
|
* Return next parsed trace entry. Once no more traces are available, this will return false and
|
|
* entry won't be touched.
|
|
*
|
|
* \param parser Parser object to be used.
|
|
* \param entry Tracepoint entry.
|
|
*
|
|
* \return True if a trace entry was available, false otherwise.
|
|
*/
|
|
bool spdk_trace_parser_next_entry(struct spdk_trace_parser *parser,
|
|
struct spdk_trace_parser_entry *entry);
|
|
|
|
/**
|
|
* Return the number of entries recorded on a given core.
|
|
*
|
|
* \param parser Parser object to be used.
|
|
* \param lcore Logical core number.
|
|
*
|
|
* \return Number of entries.
|
|
*/
|
|
uint64_t spdk_trace_parser_get_entry_count(const struct spdk_trace_parser *parser, uint16_t lcore);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SPDK_TRACE_PARSER_H */
|