From f392c8f9aa04a3096ad715847eb5d561edd05994 Mon Sep 17 00:00:00 2001 From: zengqile <2674805612@qq.com> Date: Fri, 16 Jan 2026 18:18:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9dcokercompose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 3 +- monitor | Bin 0 -> 42176 bytes rknn_perf_monitor.cpp | 163 ++++++++++++++++++++++++++++++++++++++ src/rknn_test/DmaBuffer.h | 53 +++++++++++++ 4 files changed, 218 insertions(+), 1 deletion(-) create mode 100755 monitor create mode 100644 rknn_perf_monitor.cpp create mode 100644 src/rknn_test/DmaBuffer.h diff --git a/docker-compose.yml b/docker-compose.yml index 0a1846e..5b5a806 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,8 @@ services: # --- VPU/NPU/RGA/GPU 硬件访问 --- - /dev/mpp_service:/dev/mpp_service - /dev/rga:/dev/rga - - /dev/dri:/dev/dri + - /dev/dri:/dev/dri + - /dev/dma_heap/system:/dev/dma_heap/system - source: /sys/bus/iio/devices/iio:device0 target: /sys/bus/iio/devices/iio:device0 diff --git a/monitor b/monitor new file mode 100755 index 0000000000000000000000000000000000000000..8a6a65c4442c9f2f82824e576224bde1107fb6d4 GIT binary patch literal 42176 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 vgFn`v+l8M8*}CJ_zJe5(aLt>kDF4g#a+ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ========================================== +// CPU 监控类 (保持不变) +// ========================================== +class CpuMonitor { +public: + CpuMonitor() { get_usage(); } + + float get_usage() { + std::ifstream file("/proc/stat"); + std::string line; + if (!std::getline(file, line)) return 0.0f; + + std::istringstream ss(line.substr(3)); + unsigned long long user, nice, system, idle, iowait, irq, softirq, steal; + ss >> user >> nice >> system >> idle >> iowait >> irq >> softirq >> steal; + + unsigned long long current_idle = idle + iowait; + unsigned long long current_non_idle = user + nice + system + irq + softirq + steal; + unsigned long long current_total = current_idle + current_non_idle; + + unsigned long long total_diff = current_total - prev_total; + unsigned long long idle_diff = current_idle - prev_idle; + + prev_idle = current_idle; + prev_total = current_total; + + if (total_diff == 0) return 0.0f; + return (float)(total_diff - idle_diff) * 100.0f / total_diff; + } + +private: + unsigned long long prev_idle = 0; + unsigned long long prev_total = 0; +}; + +// ========================================== +// NPU 读取函数 (修改为读取所有核心) +// ========================================== +std::string get_npu_usage_str() { + std::ifstream file("/sys/kernel/debug/rknpu/load"); + if (!file.is_open()) return "N/A (No Perm)"; + + std::string line; + if (std::getline(file, line)) { + // RK3588 通常格式: "NPU load: Core0: 0%, Core1: 0%, Core2: 0%," + // 我们去掉前面的 "NPU load:" 前缀,只保留 Core 信息 + size_t pos = line.find("NPU load:"); + if (pos != std::string::npos) { + line = line.substr(pos + 9); + } + + // 简单的字符串清理:去掉多余空格,去掉结尾逗号 + std::string clean_line; + bool last_space = false; + for (char c : line) { + if (c == ',') continue; // 去掉逗号 + if (isspace(c)) { + if (!last_space) { + clean_line += ' '; + last_space = true; + } + } else { + clean_line += c; + last_space = false; + } + } + return clean_line; + } + return "Idle"; +} + +// ========================================== +// RGA 读取函数 (根据你找到的路径修改) +// ========================================== +std::string get_rga_usage_str() { + std::ifstream file("/sys/kernel/debug/rkrga/load"); + if (!file.is_open()) return "N/A"; + + std::string line; + std::stringstream ss; + bool found_any = false; + int core_idx = 0; + + while (std::getline(file, line)) { + // 忽略第一行 "num of scheduler" + if (line.find("scheduler") != std::string::npos && line.find("=") != std::string::npos && line.find("%") == std::string::npos) { + continue; + } + + // 寻找包含 "%" 的行,通常负载都在这些行里 + if (line.find("%") != std::string::npos) { + // 尝试提取这一行里的最后一个数字 + // 假设格式类似: "scheduler[0]: full_load = 0.0%, load = 12.5%" + // 或者简单点: "load = 12%" + + // 简单粗暴法:找到 "%" 前面的数字 + size_t percent_pos = line.rfind('%'); // 找最后一个 % + if (percent_pos != std::string::npos && percent_pos > 0) { + // 向前回溯找到数字起始位置 + size_t num_end = percent_pos; + size_t num_start = num_end; + while (num_start > 0 && (isdigit(line[num_start-1]) || line[num_start-1] == '.')) { + num_start--; + } + + if (num_start < num_end) { + std::string num_str = line.substr(num_start, num_end - num_start); + try { + float load = std::stof(num_str); + ss << "C" << core_idx++ << ":" << std::fixed << std::setprecision(0) << load << "% "; + found_any = true; + } catch (...) {} + } + } + } + } + + if (!found_any) return "Idle (fmt err)"; + return ss.str(); +} +// ========================================== +// 主函数 +// ========================================== +int main() { + CpuMonitor cpu_mon; + + std::cout << "=== RK3588 System Monitor ===" << std::endl; + // 打印更宽的表头 + std::cout << "----------------------------------------------------------------------------------" << std::endl; + std::cout << "| CPU | NPU (3 Cores) | RGA (Cores) |" << std::endl; + std::cout << "----------------------------------------------------------------------------------" << std::endl; + + while (true) { + float cpu = cpu_mon.get_usage(); + std::string npu = get_npu_usage_str(); + std::string rga = get_rga_usage_str(); + + // 格式化输出 + // CPU: 占用 6 格 + // NPU: 占用 38 格 (预留给 Core0: xx% Core1: xx% Core2: xx%) + // RGA: 占用 28 格 + std::cout << "\r| " + << std::fixed << std::setprecision(1) << std::setw(5) << cpu << "% | " + << std::left << std::setw(38) << npu << " | " + << std::setw(28) << rga << " |" + << std::flush; + + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + } + + return 0; +} \ No newline at end of file diff --git a/src/rknn_test/DmaBuffer.h b/src/rknn_test/DmaBuffer.h new file mode 100644 index 0000000..ed682b7 --- /dev/null +++ b/src/rknn_test/DmaBuffer.h @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include + +#include +#include + +class DmaBuffer { +public: + int fd; + void* vaddr; // 虚拟地址(仅供调试或CPU必须介入时使用,如画字) + size_t size; + + DmaBuffer(size_t size, const std::string& heap_name = "/dev/dma_heap/system") { + this->size = size; + this->vaddr = MAP_FAILED; + this->fd = -1; + + int heap_fd = open(heap_name.c_str(), O_RDONLY | O_CLOEXEC); + if (heap_fd < 0) { + perror("Failed to open dma heap"); + return; + } + + struct dma_heap_allocation_data data = {0}; + data.len = size; + data.fd_flags = O_RDWR | O_CLOEXEC; + + if (ioctl(heap_fd, DMA_HEAP_IOCTL_ALLOC, &data) < 0) { + perror("dma heap alloc failed"); + close(heap_fd); + return; + } + + this->fd = data.fd; + close(heap_fd); + + // 如果需要CPU访问(例如写OSD文字),则映射,否则可以不映射 + this->vaddr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, this->fd, 0); + if (this->vaddr == MAP_FAILED) { + perror("mmap failed"); + } + } + + ~DmaBuffer() { + if (vaddr != MAP_FAILED) + munmap(vaddr, size); + if (fd >= 0) + close(fd); + } +}; \ No newline at end of file