# hrut_ddr

`hrut_ddr` 是一个用于监控 DDR（ Double Data Rate，双倍速率内存）带宽和性能的工具。它通过读取特定设备文件（如 /dev/axi_mon 或 /dev/ddrmonitor）中的数据，实时显示 DDR 的读写带宽、延迟等信息。

## 语法说明

以下是执行 `hrut_ddr -h` 输出的 `Usage`：

```bash
DDR MONITOR HELP INFORMATION
>>> -t/--type   sample type: cpu,bpu,vin,codec,gpu,sum,all
>>> -p/--period sample period: [1-1000] ms
>>> -r/--raw    print raw data
```

## 参数选项说明

以下是 `hrut_ddr` 支持的选项及其说明：

- **-t/--type**：指定要监控的 DDR 端口类型。可选值包括：
作用：指定要监控的 DDR 端口类型。
参数：
  - `cpu`： CPU 端口。
  - `bpu`: BPU0 （ BPU，硬件加速单元）端口。
  - `vin`: VIO（ Video Input/Output）端口。
  - `codec`：编解码器端口。
  - `gpu`： GPU (Graphics Processing Unit，图形处理单元 ) 端口。
  - `sum`：显示所有端口的总和。
  - `all`：显示所有端口的详细信息。
- **-p/--period**：
作用：设置采样周期。
参数：采样周期，单位为毫秒（ ms），范围为 [1-1000]。
- **-r/--raw**：
作用：以原始数据格式显示详细信息。
- **-h/--help**：
作用：显示帮助信息，解释命令的使用方法。

## 各项命令选项及其功能说明

### 显示帮助信息

命令：

```bash
hrut_ddr -h
```

功能：

显示帮助信息，解释命令的使用方法。

打印输出：

```bash
DDR MONITOR HELP INFORMATION
>>> -t/--type   sample type: cpu,bpu,vin,codec,gpu,sum,all
>>> -p/--period sample period: [1-1000] ms
>>> -r/--raw    print raw data
```

### 监控所有端口的 DDR 带宽

命令：

```bash
hrut_ddr -t all
```

功能：

监控所有 DDR 端口的读写带宽信息。

打印输出：

```bash
root@buildroot:/userdata/gmsl_test# hrut_ddr -t all
port_type:ALL
DDR type is: LPDDR4

Set sample period:10ms, 100 samples per seconds

Time 3546.680s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     19        0        0       12        0       31
Write:      7        0        0        0        0        7

Time 3546.690s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :      1        0        0       11        0       12
Write:      0        0        0        0        0        0

Time 3546.700s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :      0        0        0       11        0       11
Write:      0        0        0        0        0        0

Time 3546.710s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :      3        0        0       12        0       15
Write:      1        0       37        0        0       38

Time 3546.720s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :      3        0        0       13        0       16
Write:      0        0       77        0        0       77

Time 3546.730s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :      0        0        0       13        0       13
Write:      0        0       77        0        0       77

Time 3546.740s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     31        0      334       14        0      379
Write:     19        0      383        0        0      402

Time 3546.750s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :    342        0      563       14        0      919
Write:    323        0      607        0        0      930

Time 3546.760s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     40        0        0      518        0      558
Write:     10        0        0      271        0      281
```

结果解析：

- Time：表示当前采样时间。
- Read 和 Write：分别表示 DDR 的读操作和写操作的带宽信息。
- P0:CPU、 P1:BPU 等：表示不同端口的带宽值，单位为 MB/s。
- SUM：表示所有端口的总带宽。

### 监控特定端口的 DDR 带宽

命令：

```bash
hrut_ddr -t cpu
```

功能：

仅监控 CPU 端口的 DDR 带宽信息。

打印输出：

```bash
root@buildroot:/userdata/gmsl_test# hrut_ddr -t cpu
port_type:CPU
DDR type is: LPDDR4

Set sample period:10ms, 100 samples per seconds

Time 4521.998s       P0:CPU     SUM  MB/S
             Read :     20      638

             Write:     17      689

Time 4522.008s       P0:CPU     SUM  MB/S
             Read :    359      845

             Write:    331      747

```

### 以原始数据格式显示详细信息

命令：

```bash
hrut_ddr -t all -r
```

功能：

以原始数据格式显示所有 DDR 端口的详细信息，包括延迟、命令数等。

打印输出：

```bash
root@buildroot:/userdata/gmsl_test# hrut_ddr -t all -r
port_type:ALL
DDR type is: LPDDR4

Set sample period:10ms, 100 samples per seconds

Time 4651.868s
Read :
        CPU  (bw:    17 cmd_num:     0 max_lantency:  1679 min_lantency:    50 cmd_accomulative_latency:    253955 stop_ost:     2)
        BPU  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
        VIN  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
        CODEC(bw:    11 cmd_num:     0 max_lantency:  2147 min_lantency:    71 cmd_accomulative_latency:   2415530 stop_ost:     0)
        GPU  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
Write:
        CPU  (bw:     6 cmd_num:     0 max_lantency:    86 min_lantency:     8 cmd_accomulative_latency:      9142 stop_ost:     0)
        BPU  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
        VIN  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
        CODEC(bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)
        GPU  (bw:     0 cmd_num:     0 max_lantency:     0 min_lantency:     0 cmd_accomulative_latency:         0 stop_ost:     0)

Time 4651.878s
```

结果解析：

- bw：表示带宽值，单位为 MB/s。
- cmd_num：表示命令总数。
- max_latency 和 min_latency：表示最大和最小延迟。
- cmd_accomulative_latency：表示累积延迟。
- stop_ost：表示停止时的时钟周期数。

### 设置采样周期

命令：

```bash
hrut_ddr -t all -p 100
```

功能：

设置采样周期为 100 毫秒，并监控所有 DDR 端口的带宽信息。

打印输出：

```bash
root@buildroot:/userdata/gmsl_test# hrut_ddr -t all -p 100
port_type:ALL
DDR type is: LPDDR4

Set sample period:100ms, 10 samples per seconds

Time 4942.393s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     42        0       90       64        0      196
Write:     35        0      118       28        0      181

Time 4942.493s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     39        0       90       64        0      193
Write:     33        0      118       28        0      179

Time 4942.593s
MB/S   P0:CPU   P1:BPU  P2:VIN  P3:CODEC  P4:GPU      SUM
Read :     38        0       90       64        0      192
Write:     32        0      118       28        0      178
```
