基于ESP-IDF4.1

 1 #include <stdio.h>
2 #include <string.h>
3 #include <unistd.h>
4 #include "esp_timer.h"
5 #include "esp_log.h"
6 #include "esp_sleep.h"
7 #include "sdkconfig.h"
8
9 #include "perfmon.h"
10
11 static const char* TAG = "example";
12
13 static void exec_test_function(void *params)
14 {
15 for (int i = 0 ; i < 100 ; i++) {
16 __asm__ __volatile__(" nop");
17 }
18 }
19
20 //具有专用性能计数器的表
21 static uint32_t pm_check_table[] = {
22 XTPERF_CNT_CYCLES, XTPERF_MASK_CYCLES, // 周期合计
23 XTPERF_CNT_INSN, XTPERF_MASK_INSN_ALL, // 指令合计
24 XTPERF_CNT_D_LOAD_U1, XTPERF_MASK_D_LOAD_LOCAL_MEM, // 内存读取
25 XTPERF_CNT_D_STORE_U1, XTPERF_MASK_D_STORE_LOCAL_MEM, // 内存写入
26 XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_ALL &(~XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP), // 等待其他原因
27 XTPERF_CNT_BUBBLES, XTPERF_MASK_BUBBLES_R_HOLD_REG_DEP, // 等待寄存器依赖
28 XTPERF_CNT_OVERFLOW, XTPERF_MASK_OVERFLOW, // 最后一个测试周期
29 };
30
31 #define TOTAL_CALL_AMOUNT 200
32 #define PERFMON_TRACELEVEL -1 // -1 - 忽略跟踪级别
33
34 void app_main(void)
35 {
36 ESP_LOGI(TAG, "Start");
37 ESP_LOGI(TAG, "Start test with printing all available statistic");
38 xtensa_perfmon_config_t pm_config = {};
39 pm_config.counters_size = sizeof(xtensa_perfmon_select_mask_all) / sizeof(uint32_t) / 2;
40 pm_config.select_mask = xtensa_perfmon_select_mask_all;
41 pm_config.repeat_count = TOTAL_CALL_AMOUNT;
42 pm_config.max_deviation = 1;
43 pm_config.call_function = exec_test_function;
44 pm_config.callback = xtensa_perfmon_view_cb;
45 pm_config.callback_params = stdout;
46 pm_config.tracelevel = PERFMON_TRACELEVEL;
47 xtensa_perfmon_exec(&pm_config);
48
49 ESP_LOGI(TAG, "Start test with user defined statistic");
50 pm_config.counters_size = sizeof(pm_check_table) / sizeof(uint32_t) / 2;
51 pm_config.select_mask = pm_check_table;
52 pm_config.repeat_count = TOTAL_CALL_AMOUNT;
53 pm_config.max_deviation = 1;
54 pm_config.call_function = exec_test_function;
55 pm_config.callback = xtensa_perfmon_view_cb;
56 pm_config.callback_params = stdout;
57 pm_config.tracelevel = PERFMON_TRACELEVEL;
58
59 xtensa_perfmon_exec(&pm_config);
60
61 ESP_LOGI(TAG, "The End");
62 }

原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/system/perfmon

ESP32-性能监控笔记的更多相关文章

  1. 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记

    公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.se ...

  2. jmeter使用笔记——脚本录制,JMeter使用plugins插件进行服务器性能监控

    脚本录制: 1.badboy录制 2.代理服务器录制 ①工作台添加HTTP代理服务器 ②设置目标控制器,分组,排除模式,包含模式(使用正则表达式筛选) ③设置浏览器,手动设置代理服务器,localho ...

  3. 对SQLSERVER进行性能监控

    对SQLSERVER进行性能监控 在上一篇文章<SQLSERVER性能监控级别步骤>里说到性能监控的步骤中有一步涉及到建立性能基线,但是没有说到有哪些计数器 可以用来进行监控的,这篇文章结 ...

  4. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  5. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  6. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  7. <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  9. jvm系列(五):tomcat性能调优和性能监控(visualvm)

    tomcat服务器优化 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃.因此一般建议堆的最 ...

  10. spring拦截器 实现应用之性能监控

    package cn.ximi.erp.web.common.interceptors; import cn.ximi.core.common.utils.string.StringUtil; imp ...

随机推荐

  1. Python数模笔记-Scipy库(1)线性规划问题

    1.最优化问题建模 最优化问题的三要素是决策变量.目标函数和约束条件. (1)分析影响结果的因素是什么,确定决策变量 (2)决策变量与优化目标的关系是什么,确定目标函数 (3)决策变量所受的限制条件是 ...

  2. 安装jdk env

    For centos yum list java-1.8.0-openjdk* yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk- ...

  3. Python爬虫-Scrapy框架的工作原理

    Scrapy框架工作原理 Scrapy框架架构图 Scrapy框架主要由六大组件组成,分别为: ​ 调度器(Scheduler),下载器(Downler),爬虫(Spiders),中间件(Middwa ...

  4. HTML中option的单页调用

    我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只有在select里的 onchange方法里触发. ...

  5. 重新整理 .net core 实践篇————配置系统——军令(命令行)[六]

    前言 前文已经基本写了一下配置文件系统的一些基本原理.本文介绍一下命令行导入配置系统. 正文 要使用的话,引入Microsoft.extensions.Configuration.commandLin ...

  6. [Django高级之Auth模块]

    [Django高级之Auth模块] auth模块 ←详情点击查看 1.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统 ...

  7. Jenkins 入门介绍

    一.概念 近几年,DevOps理念一致处于一个比较热门的状态.我每个月在工作群或者技术交流群都会看到这个名词出现.前年,当我第一次看到这个"DevOps",我压根不知道这是一个什么 ...

  8. python+selenium基础篇,键盘操作

    1.任务要求:打开百度,在百度搜索里面输入python,通过键盘复制python到搜狗搜索,粘贴到搜狗搜索框中 实现代码如下: from selenium import webdriver from ...

  9. MapReduce —— MapTask阶段源码分析(Output环节)

    Dream car 镇楼 ~ ! 接上一节Input环节,接下来分析 output环节.代码在runNewMapper()方法中: private <INKEY,INVALUE,OUTKEY,O ...

  10. python 日期与字符串之间的转换

    1.str转换为datetime >>> from datetime import datetime >>> cday = datetime.strptime('2 ...