CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
235 lines
6.7 KiB
Markdown
235 lines
6.7 KiB
Markdown
# Memory Management Tests
|
|
|
|
This document describes the test coverage for AMD SMI memory management features (UMA carveout and TTM configuration).
|
|
|
|
## Features Tested
|
|
|
|
### 1. UMA Carveout (VRAM - Dedicated GPU Memory)
|
|
- Reading current carveout configuration
|
|
- Validating available options
|
|
- Setting carveout index (DRY_RUN mode)
|
|
|
|
### 2. TTM Configuration (GTT - Shared GPU Memory)
|
|
- Reading current TTM pages limit
|
|
- Setting TTM pages limit (DRY_RUN mode)
|
|
- Resetting TTM to system default (DRY_RUN mode)
|
|
|
|
## DRY_RUN Mode
|
|
|
|
To enable comprehensive testing of write operations without actually modifying system configuration, all memory management write functions support a **DRY_RUN** mode.
|
|
|
|
### How DRY_RUN Works
|
|
|
|
When the `AMDSMI_DRY_RUN` environment variable is set to `1`:
|
|
|
|
1. **All validation is performed** - The functions validate inputs, check permissions, and verify file existence
|
|
2. **No files are modified** - System files (sysfs, /etc/modprobe.d/) are not written
|
|
3. **No system commands run** - Commands like `dracut -f` are not executed
|
|
4. **Status is printed** - Debug output shows what would have been done
|
|
5. **Return codes are accurate** - Functions return the same status codes as real execution
|
|
|
|
### Enabling DRY_RUN Mode
|
|
|
|
#### Bash/Shell:
|
|
```bash
|
|
export AMDSMI_DRY_RUN=1
|
|
amd-smi set --mem-carveout 2 --gpu 0 # Simulates setting VRAM carveout to index 2
|
|
```
|
|
|
|
#### Python:
|
|
```python
|
|
import os
|
|
os.environ['AMDSMI_DRY_RUN'] = '1'
|
|
amdsmi.amdsmi_set_gpu_uma_carveout(processor_handle, 2)
|
|
```
|
|
|
|
#### C++:
|
|
```cpp
|
|
setenv("AMDSMI_DRY_RUN", "1", 1);
|
|
amdsmi_set_gpu_uma_carveout(processor_handle, 2);
|
|
```
|
|
|
|
### Disabling DRY_RUN Mode
|
|
|
|
#### Bash/Shell:
|
|
```bash
|
|
unset AMDSMI_DRY_RUN
|
|
```
|
|
|
|
#### Python:
|
|
```python
|
|
del os.environ['AMDSMI_DRY_RUN']
|
|
```
|
|
|
|
#### C++:
|
|
```cpp
|
|
unsetenv("AMDSMI_DRY_RUN");
|
|
```
|
|
|
|
## Test Files
|
|
|
|
### C++ Functional Tests (GTest)
|
|
|
|
**Location:** `tests/amd_smi_test/functional/`
|
|
|
|
**Files:**
|
|
- `memory_read_write.h` - Test class definition
|
|
- `memory_read_write.cc` - Test implementation
|
|
|
|
**What's Tested:**
|
|
- ✅ Read UMA carveout information
|
|
- ✅ Validate carveout options structure
|
|
- ✅ Set UMA carveout (DRY_RUN) - current value
|
|
- ✅ Set UMA carveout (DRY_RUN) - different valid value
|
|
- ✅ Set UMA carveout (DRY_RUN) - invalid value (expect failure)
|
|
- ✅ Read TTM information
|
|
- ✅ Validate TTM pages value
|
|
- ✅ Set TTM pages limit (DRY_RUN) - current value
|
|
- ✅ Set TTM pages limit (DRY_RUN) - different value
|
|
- ✅ Set TTM pages limit (DRY_RUN) - invalid value (expect failure)
|
|
- ✅ Reset TTM pages limit (DRY_RUN)
|
|
|
|
**Running C++ Tests:**
|
|
```bash
|
|
cd build/tests/amd_smi_test
|
|
./amdsmitst -v 1 # Run all tests
|
|
```
|
|
|
|
### Python Integration Tests
|
|
|
|
**Location:** `tests/python_unittest/integration_test.py`
|
|
|
|
**Test Functions:**
|
|
- `test_uma_carveout_info()` - Read-only UMA carveout info test
|
|
- `test_uma_carveout_set_dry_run()` - UMA carveout write operations (DRY_RUN)
|
|
- `test_ttm_info()` - Read-only TTM info test
|
|
- `test_ttm_set_dry_run()` - TTM write operations (DRY_RUN)
|
|
|
|
**What's Tested:**
|
|
- ✅ Read UMA carveout for all GPUs
|
|
- ✅ Validate dictionary structure
|
|
- ✅ Set UMA carveout (DRY_RUN) - various scenarios
|
|
- ✅ Read TTM information
|
|
- ✅ Set TTM pages limit (DRY_RUN) - various scenarios
|
|
- ✅ Reset TTM (DRY_RUN)
|
|
|
|
**Running Python Integration Tests:**
|
|
```bash
|
|
# All tests
|
|
/opt/rocm/share/amd_smi/tests/python_unittest/integration_test.py -v
|
|
|
|
# Memory tests only
|
|
/opt/rocm/share/amd_smi/tests/python_unittest/integration_test.py -k "uma\|ttm" -v
|
|
```
|
|
|
|
### Python CLI Tests
|
|
|
|
**Location:** `tests/python_unittest/cli_unit_test.py`
|
|
|
|
**Test Function:**
|
|
- `test_static_mem_carveout_gtt()` - CLI command testing (display mode only)
|
|
|
|
**What's Tested:**
|
|
- ✅ `amd-smi static --mem-carveout` - Display VRAM carveout configuration
|
|
- ✅ `amd-smi static --gtt` - Display GTT configuration
|
|
- ✅ `amd-smi static --mem-carveout --gtt` - Display both
|
|
- ✅ JSON and CSV output formats
|
|
- ✅ Help text
|
|
|
|
**Note:** Write operations (--mem-carveout in set, --gtt in set/reset) are not tested in automated CLI tests to avoid requiring root permissions and system reboots. Use DRY_RUN mode for testing these operations.
|
|
|
|
**Running Python CLI Tests:**
|
|
```bash
|
|
# All CLI tests
|
|
sudo /opt/rocm/share/amd_smi/tests/python_unittest/cli_unit_test.py -v
|
|
|
|
# Memory tests only
|
|
sudo /opt/rocm/share/amd_smi/tests/python_unittest/cli_unit_test.py -k "mem_carveout_gtt" -v
|
|
```
|
|
|
|
## Manual Testing (Real Write Operations)
|
|
|
|
For testing actual write operations that modify system configuration:
|
|
|
|
### Prerequisites
|
|
- Root/sudo permissions
|
|
- Ability to reboot the system
|
|
- Backup of critical data
|
|
|
|
### Test UMA Carveout
|
|
|
|
```bash
|
|
# View current configuration and available options
|
|
amd-smi static --mem-carveout
|
|
|
|
# Change VRAM carveout to index 2 (example) for GPU 0
|
|
sudo amd-smi set --mem-carveout 2 --gpu 0
|
|
|
|
# Reboot required
|
|
sudo reboot
|
|
|
|
# After reboot, verify
|
|
amd-smi static --mem-carveout
|
|
```
|
|
|
|
### Test GTT Configuration
|
|
|
|
```bash
|
|
# View current configuration
|
|
amd-smi static --gtt
|
|
|
|
# Set GTT to 12 GB (example)
|
|
sudo amd-smi set --gtt 12
|
|
|
|
# Reboot required
|
|
sudo reboot
|
|
|
|
# After reboot, verify
|
|
amd-smi static --gtt
|
|
|
|
# Reset to default
|
|
sudo amd-smi reset --gtt
|
|
|
|
# Reboot required
|
|
sudo reboot
|
|
```
|
|
|
|
## Test Coverage Summary
|
|
|
|
| Feature | Read | Write (DRY_RUN) | Write (Real) |
|
|
|---------|------|-----------------|--------------|
|
|
| UMA Carveout Info | ✅ Automated | ✅ Automated | ⚠️ Manual Only |
|
|
| UMA Carveout Set | - | ✅ Automated | ⚠️ Manual Only |
|
|
| TTM Info | ✅ Automated | ✅ Automated | ⚠️ Manual Only |
|
|
| TTM Set | - | ✅ Automated | ⚠️ Manual Only |
|
|
| TTM Reset | - | ✅ Automated | ⚠️ Manual Only |
|
|
|
|
**Legend:**
|
|
- ✅ Automated - Runs in CI/CD and automated test suites
|
|
- ⚠️ Manual Only - Requires manual testing due to system modification requirements
|
|
|
|
## Benefits of DRY_RUN Mode
|
|
|
|
1. **No Root Required** - Tests can run without elevated permissions
|
|
2. **No Reboot Required** - Tests don't require system restart
|
|
3. **Safe for CI/CD** - Can run in automated pipelines without affecting test systems
|
|
4. **Full Code Coverage** - Exercises all code paths including validation and error handling
|
|
5. **Developer Friendly** - Easy to test changes without risk to development system
|
|
6. **Fast Feedback** - Get immediate test results without waiting for reboots
|
|
|
|
## Example DRY_RUN Output
|
|
|
|
```bash
|
|
$ export AMDSMI_DRY_RUN=1
|
|
|
|
$ amd-smi set --mem-carveout 2 --gpu 0
|
|
[DRY_RUN] Would write UMA carveout index 2 to /sys/class/drm/card0/device/uma/carveout
|
|
Successfully set VRAM carveout to [2] (4 GB). Reboot required for changes to take effect.
|
|
|
|
$ amd-smi set --gtt 12
|
|
[DRY_RUN] Would write to /etc/modprobe.d/ttm.conf:
|
|
[DRY_RUN] options ttm pages_limit=3145728
|
|
[DRY_RUN] Would rebuild initramfs with: dracut -f
|
|
Successfully set GTT to 12.00 GB (3145728 pages). Reboot required for changes to take effect.
|
|
```
|