249 lines
6.4 KiB
Diff
249 lines
6.4 KiB
Diff
From abd9fa539173ebe5bd09b363469a17b5d2f85593 Mon Sep 17 00:00:00 2001
|
|
From: zhoukaiqi <zhoukaiqi@huawei.com>
|
|
Date: Fri, 31 May 2024 11:28:59 +0800
|
|
Subject: [PATCH] example adapts to new interface
|
|
|
|
---
|
|
example/CMakeLists.txt | 2 +-
|
|
example/adapt/adapt.cpp | 52 ++++++++++++++++------------
|
|
example/include/frame/common.h | 62 +++++++++++++++++++++++++---------
|
|
include/interface.h | 6 ++--
|
|
4 files changed, 81 insertions(+), 41 deletions(-)
|
|
|
|
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
|
|
index 6a93f42..75395ce 100644
|
|
--- a/example/CMakeLists.txt
|
|
+++ b/example/CMakeLists.txt
|
|
@@ -1,6 +1,6 @@
|
|
cmake_minimum_required(VERSION 3.15)
|
|
|
|
project(tune-example)
|
|
-
|
|
+add_compile_options(-g -fPIC -Wall -Wextra)
|
|
add_subdirectory(tune)
|
|
add_subdirectory(adapt)
|
|
diff --git a/example/adapt/adapt.cpp b/example/adapt/adapt.cpp
|
|
index 7582efd..c285e06 100644
|
|
--- a/example/adapt/adapt.cpp
|
|
+++ b/example/adapt/adapt.cpp
|
|
@@ -17,73 +17,83 @@
|
|
#include "tune.h"
|
|
#include <cstring>
|
|
uint64_t g_scenario_buf_cnt = 0;
|
|
-char *get_version()
|
|
+
|
|
+const char *get_version()
|
|
{
|
|
return "v1.0";
|
|
}
|
|
|
|
-char *get_description()
|
|
+const char *get_name()
|
|
{
|
|
return "tune_example";
|
|
}
|
|
|
|
-char *get_name()
|
|
+const char *get_description()
|
|
{
|
|
return "tune_example";
|
|
}
|
|
|
|
-char *get_dep()
|
|
+const char *get_dep()
|
|
{
|
|
return "scenario_example";
|
|
}
|
|
|
|
-int get_cycle()
|
|
+int get_priority()
|
|
+{
|
|
+ return 2;
|
|
+}
|
|
+
|
|
+int get_period()
|
|
{
|
|
return 1000;
|
|
}
|
|
|
|
-void enable()
|
|
+bool enable()
|
|
{
|
|
+ return true;
|
|
}
|
|
+
|
|
void disable()
|
|
{
|
|
}
|
|
|
|
-void tune(void *info[], int len)
|
|
+void run(const struct Param *para)
|
|
{
|
|
|
|
- for (int i = 0; i < len; i++) {
|
|
- struct DataHeader *header = (struct DataHeader *)info[i];
|
|
- if (strcmp(header->type, SCENARIO_ACCESS_BUF) == 0) {
|
|
- int dataNum = std::min(header->count - g_scenario_buf_cnt, (uint64_t)header->buf_len);
|
|
+ for (int i = 0; i < para->len; i++) {
|
|
+ struct DataRingBuf *ringbuf = (struct DataRingBuf *)para->ring_bufs[i];
|
|
+ if (strcmp(ringbuf->instance_name, SCENARIO_ACCESS_BUF) == 0) {
|
|
+ int dataNum = std::min(ringbuf->count - g_scenario_buf_cnt, (uint64_t)ringbuf->buf_len);
|
|
if (dataNum != 1) { // demo only support one data
|
|
return;
|
|
}
|
|
struct DataBuf *buf = nullptr;
|
|
- int offset = (header->index + header->buf_len - 0) % header->buf_len;
|
|
- buf = &header->buf[offset];
|
|
+ int offset = (ringbuf->index + ringbuf->buf_len - 0) % ringbuf->buf_len;
|
|
+ buf = &ringbuf->buf[offset];
|
|
Tune &ins = Tune::getInstance();
|
|
ins.read_access_data((struct uncore_scenario *)buf->data, buf->len);
|
|
ins.migration();
|
|
- g_scenario_buf_cnt = header->count;
|
|
+ g_scenario_buf_cnt = ringbuf->count;
|
|
}
|
|
}
|
|
}
|
|
|
|
-
|
|
-struct TuneInterface tune_interface = {
|
|
+struct Interface tune_interface = {
|
|
.get_version = get_version,
|
|
.get_name = get_name,
|
|
.get_description = get_description,
|
|
.get_dep = get_dep,
|
|
- .get_cycle = get_cycle,
|
|
+ .get_priority = get_priority,
|
|
+ .get_type = nullptr,
|
|
+ .get_period = get_period,
|
|
.enable = enable,
|
|
.disable = disable,
|
|
- .tune = tune,
|
|
+ .get_ring_buf = nullptr,
|
|
+ .run = run,
|
|
};
|
|
-extern "C" int get_instance(TuneInterface * *ins)
|
|
+
|
|
+extern "C" int get_instance(struct Interface **interface)
|
|
{
|
|
- *ins = &tune_interface;
|
|
+ *interface = &tune_interface;
|
|
return 1;
|
|
}
|
|
-
|
|
diff --git a/example/include/frame/common.h b/example/include/frame/common.h
|
|
index 63a14c2..d2a0f7c 100644
|
|
--- a/example/include/frame/common.h
|
|
+++ b/example/include/frame/common.h
|
|
@@ -11,33 +11,63 @@
|
|
******************************************************************************/
|
|
#ifndef __OEAWARE_COMMON__
|
|
#define __OEAWARE_COMMON__
|
|
+#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
-#define DATA_HEADER_TYPE_SIZE 64
|
|
-
|
|
-struct TuneInterface {
|
|
- char *(*get_version)();
|
|
- char *(*get_name)();
|
|
- char *(*get_description)();
|
|
- char *(*get_dep)();
|
|
- int (*get_cycle)();
|
|
- void (*enable)();
|
|
- void (*disable)();
|
|
- void (*tune)(void *[], int);
|
|
-};
|
|
+#ifdef __cplusplus
|
|
+extern "C" {
|
|
+#endif
|
|
|
|
struct DataBuf {
|
|
int len;
|
|
void *data;
|
|
};
|
|
|
|
-struct DataHeader {
|
|
- char type[DATA_HEADER_TYPE_SIZE];
|
|
- int index = -1;
|
|
+struct DataRingBuf {
|
|
+ /* instance name */
|
|
+ const char *instance_name;
|
|
+ /* buf write index, initial value is -1 */
|
|
+ int index;
|
|
+ /* instance run times */
|
|
uint64_t count;
|
|
struct DataBuf *buf;
|
|
int buf_len;
|
|
};
|
|
|
|
+struct Param {
|
|
+ const struct DataRingBuf **ring_bufs;
|
|
+ int len;
|
|
+};
|
|
+
|
|
+struct Interface {
|
|
+ const char* (*get_version)();
|
|
+ /* The instance name is a unique identifier in the system. */
|
|
+ const char* (*get_name)();
|
|
+ const char* (*get_description)();
|
|
+ /* Specifies the instance dependencies, which is used as the input information
|
|
+ * for instance execution.
|
|
+ */
|
|
+ const char* (*get_dep)();
|
|
+ /* Instance scheduling priority. In a uniform time period, a instance with a
|
|
+ * lower priority is scheduled first.
|
|
+ */
|
|
+ int (*get_priority)();
|
|
+ int (*get_type)();
|
|
+ /* Instance execution period. */
|
|
+ int (*get_period)();
|
|
+ bool (*enable)();
|
|
+ void (*disable)();
|
|
+ const struct DataRingBuf* (*get_ring_buf)();
|
|
+ void (*run)(const struct Param*);
|
|
+};
|
|
+
|
|
+/* Obtains the instances from the plugin.
|
|
+ * The return value is the number of instances.
|
|
+ */
|
|
+int get_instance(struct Interface **interface);
|
|
+
|
|
+#ifdef __cplusplus
|
|
+}
|
|
+#endif
|
|
|
|
-#endif
|
|
\ No newline at end of file
|
|
+#endif
|
|
diff --git a/include/interface.h b/include/interface.h
|
|
index e5d69dc..0221244 100644
|
|
--- a/include/interface.h
|
|
+++ b/include/interface.h
|
|
@@ -26,11 +26,11 @@ struct DataBuf {
|
|
|
|
struct DataRingBuf {
|
|
/* instance name */
|
|
- const char *instance_name;
|
|
+ const char *instance_name;
|
|
/* buf write index, initial value is -1 */
|
|
int index;
|
|
/* instance run times */
|
|
- uint64_t count;
|
|
+ uint64_t count;
|
|
struct DataBuf *buf;
|
|
int buf_len;
|
|
};
|
|
@@ -49,7 +49,7 @@ struct Interface {
|
|
* for instance execution.
|
|
*/
|
|
const char* (*get_dep)();
|
|
- /* Instance scheduling priority. In a uniform time period, a instance with a
|
|
+ /* Instance scheduling priority. In a uniform time period, a instance with a
|
|
* lower priority is scheduled first.
|
|
*/
|
|
int (*get_priority)();
|
|
--
|
|
2.27.0
|
|
|