# Performance Node
该应用基于Web网页打造,无论是什么品牌的电脑和手机,只需要在浏览器访问即可.
<img src=".\doc\desktop_demo.jpg" alt="desktop_demo" style="zoom:70%;" />
<img src=".\doc\mult_device.jpg" alt="mult_device" style="zoom:70%;" />
## 1. 使用方法
### 1.1 安装requirements,主要是Flask和pstiul
```bash
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
### 1.2 运行app.py
```bash
python3 app.py
```
### 1.3 在同一局域网访问X3的7999端口即可
```bash
192.168.xxx.xxx:7999
```
## 2. 参数说明
```bash
$ python3 app.py --help
usage: app.py [-h] [--device DEVICE] [--port PORT] [--debug DEBUG] [--log LOG]
optional arguments:
-h, --help show this help message and exit
--device DEVICE 0: RDK X3 (Module), 1: RDK Ultra, 2: RDK X5
--port PORT enter the port you like.
--debug DEBUG Flask Debug Mode, 0:false, 1:true.
--log LOG Flask log, 0:false, 1:true.
```
例如,你要手动指定板卡为RDK Ultra, 使用6666号端口, 并且打开debug模式, 打开Flask的log显示, 可以这样使用:
```bash
python3 app.py --device 1 --port 6666 --debug 1 --log 1
```
### 默认参数
`--device` 参数默认值为-1, 表示自动判断设备, 程序会根据当前设备使用的设备树文件来自动判断.
`--port` 参数默认值为7999, 比TROS的8000少1, 向伟大的TROS致敬!
`--debug` 参数默认值为0, 即为false, 默认关闭Flask的Debug模式.
`--log` 参数默认值为0, 即为false, 默认关闭Flask的HTTP请求响应日志打印.
## 3. 数据说明
### 3.1 CPU数据
使用`psutil.cpu_percent(percpu=True)`函数来获取各个逻辑处理器(核心)的CPU使用百分比.当percpu参数设置为True时,函数将返回一个包含所有CPU利用率百分比的列表,其中列表的第一个元素对应第一个CPU核心,第二个元素对应第二个核心,以此类推.列表中各元素的位置在每次调用中保持一致.
内部实现上,该函数维护了一个全局映射表(字典),其中每个键是调用线程的ID(通过threading.get_ident获取).这意味着即使在不同线程中、以不同间隔时间调用该函数,也能得到有意义且相互独立的结果.
psutil文档(5.9.8)原文:
When percpu is True returns a list of floats representing the utilization as a percentage for each CPU. First element of the list refers to first CPU, second element to second CPU and so on. The order of the list is consistent across calls. Internally this function maintains a global map (a dict) where each key is the ID of the calling thread (threading.get_ident). This means it can be called from different threads, at different intervals, and still return meaningful and independent results.
### 3.2 BPU数据
BPU占用率数据来自于以下文件
#### RDK X3, RDK X3 Module, RDK Ultra
```bash
/sys/devices/system/bpu/bpu0/ratio
/sys/devices/system/bpu/bpu1/ratio
```
### 3.3 内存占用数据
#### RDK X3, RDK X3 Module, RDK Ultra
通过`psutil.virtual_memory()`函数获取内存信息,该函数返回一个命名元组,包含多种关于系统虚拟内存的信息.
`available`字段: 可用内存, 指无需系统进入交换状态即可立即分配给进程的内存总量. 这个值是通过对不同平台下不同内存指标进行求和计算得出的, 旨在提供一种跨平台监控实际内存使用情况的方法.
psutil文档(5.9.8)原文: available: the memory that can be given instantly to processes without the system going into swap. This is calculated by summing different memory metrics that vary depending on the platform. It is supposed to be used to monitor actual memory usage in a cross platform fashion.
`used`字段: 已使用内存, 已使用的内存大小会根据不同平台有所差异,并且主要用于信息展示目的.需要注意的是, "total - free" (总内存减去空闲内存) 并不一定与“used”(已使用内存)相匹配.
psutil文档(5.9.8)原文: used: memory used, calculated differently depending on the platform and designed for informational purposes only. total - free does not necessarily match used.
### 3.4 温度数据
温度数据来自于以下文件
#### RDK X3, RDK X3 Module
```bash
/sys/class/hwmon/hwmon0/temp1_input
```
#### RDK Ultra
RDK Ultra有多个温度点,此处选择的是cpu-thermal.
```bash
/sys/devices/virtual/thermal/thermal_zone8/temp
```
可通过以下命令来查看所有温度传感器:
```bash
cat /sys/devices/virtual/thermal/thermal_zone*/type
```
可根据需要修改Web上显示的温度传感器数据
```bash
cat /sys/devices/virtual/thermal/thermal_zone*/temp
```
### 3.4 频率数据
#### RDK X3, RDK X3 Module
这两个设备的CPU是统一调度,所以读取一个文件即可
```bash
/sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
```
#### RDK Ultra
在RDK Ultra上,需要读取8个文件,对系统负载影响较大,故不采集这个数据.
### 3.5 硬盘数据
#### RDK X3, RDK X3 Module, RDK Ultra
通过`psutil.disk_usage()`函数获取内存信息, 我们可以获取指定路径所在磁盘分区的使用情况统计数据.此函数返回一个命名元组,包含了以字节为单位表示的总容量、已用空间和剩余可用空间,以及磁盘使用率百分比.
Performance Node使用了以下两个字段, 与Unix/Linux系统中的`df`命令行工具输出的数据是匹配的.
`used` 字段: 已用存储, 表示已使用的总空间
`free` 字段: 可用存储, 普通用户可用的空间大小
psutil文档(5.9.8)原文: Return disk usage statistics about the partition which contains the given path as a named tuple including total, used and free space expressed in bytes, plus the percentage usage. OSError is raised if path does not exist. Starting from Python 3.3 this is also available as shutil.disk_usage (see BPO-12442). See disk_usage.py script providing an example usage.
Note UNIX usually reserves 5% of the total disk space for the root user. total and used fields on UNIX refer to the overall total and used space, whereas free represents the space available for the user and percent represents the user utilization (see source code). That is why percent value may look 5% bigger than what you would expect it to be. Also note that both 4 values match “df” cmdline utility.
### 3.6 性能模式设置
Perfoemace Node的主要实现方式为利用`os.system()`函数向命令行发送命令, 从而达到修改处理器调频模式的目的.Performance Node可调整的模式解释如下:
- 性能(performance): 总是将CPU置于最高能耗也是最高性能的状态, 即硬件所支持的最高频.
- 节能(powersave): 总是将CPU置于最低能耗也是最差性能的状态, 即硬件所支持的最低频.
- 调度信息(schedutil): 这是从Linux-4.7版本开始才引入的策略, 其原理是根据调度器所提供的CPU利用率信息进行频率调节,效果上类似于ondemand策略, 但是因为调度器掌握了最好的CPU使用情况, 更加精确和自然.
关于ondemand策略:
- 按需(ondemand): 定时检查负载,然后根据负载来调节频率.负载低的时候调节至一个刚好能够满足当前负载需求的最低频,当负载高时,立即提升到最高性能状态.
在Web中, 使用了一个防抖函数, 每次都在最后一次切换后的2秒后进行切换.
#### RDK X3, RDK X3 Module
```bash
sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor"
```
#### RDK Ultra
```bash
sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor" && \
sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy1/scaling_governor" && \
sudo bash -c "echo performance > /sys/devices/system/cpu/cpufreq/policy2/scaling_gov
RDK-Web-Performance-Node
需积分: 0 23 浏览量
更新于2024-03-19
收藏 852KB ZIP 举报
**RDK-Web-Performance-Node** 是一个专注于提升基于RDK(Reference Design Kit)平台上的Web应用程序性能的模块。RDK是一种开放源代码的软件框架,广泛应用于机顶盒和智能电视等领域,用于统一和加速设备的底层软件开发。在RDK中,Web性能优化是至关重要的,因为它直接影响到用户的交互体验和系统的响应速度。
这个项目的核心目标是通过Node.js技术来增强RDK中的Web服务性能。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,以其高效的非阻塞I/O模型和事件驱动架构而闻名,特别适合处理实时、高并发的网络应用。
**主要知识点:**
1. **RDK(Reference Design Kit)**:RDK是一套预集成的软件堆栈,用于管理视频、宽带和家庭网络设备的底层软件。它包括操作系统、中间件、驱动程序等,旨在标准化和加速设备的上市时间。RDK允许开发者快速创建定制化的用户界面,并提供了跨平台兼容性。
2. **Web性能优化**:这是提升网站或Web应用程序加载速度和用户体验的过程。优化涉及减少HTTP请求、压缩资源、缓存策略、图片优化、代码精简等多个方面。在RDK-Web-Performance-Node中,可能包含对前端资源的优化、后端服务器性能调整以及网络传输效率提升等措施。
3. **Node.js**:Node.js是JavaScript的一个服务器端运行环境,它使得开发者可以用JavaScript编写服务器端代码。Node.js的V8引擎使得其执行速度快,同时其非阻塞I/O和事件驱动的特性使其在处理大量并发连接时表现出色,非常适合构建实时、高并发的Web应用。
4. **事件驱动编程**:Node.js采用事件驱动编程模型,当某个操作(如网络I/O)完成时,会触发相应的事件,然后调用预先注册的回调函数。这种模型减少了线程切换的开销,提高了系统的效率和可扩展性。
5. **非阻塞I/O**:非阻塞I/O是指在进行I/O操作时,程序不会等待该操作完成,而是立即返回继续执行其他任务。这种方式在处理大量并发请求时可以充分利用系统资源,提高系统吞吐量。
6. **中间件**:在Node.js中,中间件是处理请求和响应的函数链。它们按顺序执行,每个中间件都可以选择将请求传递给下一个中间件,或者直接返回响应。在RDK-Web-Performance-Node中,可能利用中间件进行路由控制、日志记录、错误处理等功能。
7. **性能监控与调试**:优化过程通常需要对Web应用的性能进行持续监控,包括CPU使用率、内存占用、网络带宽等。开发者可能使用各种工具,如New Relic、Prometheus、Grafana等,来收集和分析性能数据,找出瓶颈并进行针对性优化。
8. **代码部署与自动化**:为了确保RDK-Web-Performance-Node在不同环境中的一致性,可能涉及到版本控制、持续集成/持续部署(CI/CD)流程,如使用Git进行版本管理,Jenkins或Travis CI自动化构建和测试,Docker容器化部署等。
9. **安全考虑**:在优化Web性能的同时,也要注意安全性,例如防止XSS、CSRF攻击,保护敏感数据,实施HTTPS加密等。
10. **最佳实践**:在RDK-Web-Performance-Node项目中,开发者可能会遵循一系列最佳实践,包括模块化代码、遵循编码规范、优化数据库查询、使用缓存策略等,以确保代码质量与系统性能。
RDK-Web-Performance-Node项目旨在利用Node.js的优势,为RDK平台提供高性能的Web服务,提升用户体验。这涉及到多方面的技术知识和最佳实践,包括RDK平台的理解、Node.js的深入运用、Web性能优化策略以及安全性和自动化部署等。

Cauchy_WuChao
- 粉丝: 1456
最新资源
- 大学设计方案-学校网络安全探究-大学方案.doc
- 机械制造与自动化专业.doc
- 互联网+背景下高中语文课堂教学策略探析.docx
- 再论项目管理人力资源管理.doc
- XX项目管理前期物业顾问服务内容.doc
- VB1058酒店管理系统的方案设计书与实现--餐饮管理子系统2.doc
- 物联网技术在水文监测信息系统中的应用研究.docx
- IP网络高速公路数字对讲系统综合解决方案.doc
- 试述实施ERP企业项目管理失控6种表现.docx
- 单片机的直流电机速控制.doc
- 计算机专业毕业论文[]5.doc
- 上半年数据库系统工程师测验考试上午真题+下午真题.docx
- 论文一例小学生沉迷网络游戏的案例报告.doc
- 会计信息化在财务共享模式下的实施策略.docx
- 项目管理的成功要素.docx
- 浅析中职计算机英语校本教材的编写.docx