- Comprehensive NVMe benchmark before firmware update (GXA7401Q) - SMART health: 19% used, 0 media errors, 100% spare - Sequential read: 1,554 MiB/s, write: 1,305 MiB/s - Random read: 361k IOPS, write: 291k IOPS - Key discovery: GXA7802Q is SED-only, GXA7801Q is non-SED (our drive) - Firmware update applied: fw-download + fw-commit + fw-activate (slot 2) - Reboot required to activate GXA7801Q firmware
155 lines
3.9 KiB
Markdown
155 lines
3.9 KiB
Markdown
# NVMe Benchmark: Pre-Firmware Update (GXA7401Q)
|
|
|
|
> **Date**: 2026-04-02 10:35 CET
|
|
> **Device**: Samsung PM9A1 (MZVL2512HCJQ-00B00), 512GB
|
|
> **Serial**: S675NF0R703667
|
|
> **Firmware**: GXA7401Q (pre-update)
|
|
> **OS**: Manjaro Linux, kernel 6.12, KDE 6.5.6
|
|
> **NVMe slot**: /dev/nvme0n1 (root drive)
|
|
|
|
## SMART Health Data
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Critical Warning | 0 (healthy) |
|
|
| Temperature | 51°C (Sensor 2: 64°C) |
|
|
| Available Spare | 100% |
|
|
| Available Spare Threshold | 10% |
|
|
| Percentage Used | 19% |
|
|
| Data Units Read | 17.97 TB |
|
|
| Data Units Written | 94.19 TB |
|
|
| Host Read Commands | 683,328,216 |
|
|
| Host Write Commands | 1,651,377,088 |
|
|
| Controller Busy Time | 9,265 min |
|
|
| Power Cycles | 884 |
|
|
| Power On Hours | 4,926 h (~205 days) |
|
|
| Unsafe Shutdowns | 88 |
|
|
| Media Errors | 0 |
|
|
| Error Log Entries | 0 |
|
|
|
|
## hdparm Results
|
|
|
|
| Test | Throughput |
|
|
|------|-----------|
|
|
| Cached Reads | 7,349.97 MB/sec |
|
|
| Buffered Disk Reads | 741.99 MB/sec |
|
|
|
|
## fio Benchmarks (4K block, libaio, iodepth=32, 30s per test)
|
|
|
|
### Sequential Read
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Bandwidth | 1,554 MiB/s (1,630 MB/s) |
|
|
| IOPS | 398,000 |
|
|
| Avg Latency | 80.16 µs |
|
|
| P99 Latency | 128 µs |
|
|
| P99.9 Latency | 186 µs |
|
|
|
|
### Sequential Write
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Bandwidth | 1,305 MiB/s (1,368 MB/s) |
|
|
| IOPS | 334,000 |
|
|
| Avg Latency | 95.53 µs |
|
|
| P99 Latency | 163 µs |
|
|
| P99.9 Latency | 255 µs |
|
|
|
|
### Random Read
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Bandwidth | 1,409 MiB/s (1,477 MB/s) |
|
|
| IOPS | 361,000 |
|
|
| Avg Latency | 88.42 µs |
|
|
| P99 Latency | 141 µs |
|
|
| P99.9 Latency | 200 µs |
|
|
|
|
### Random Write
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Bandwidth | 1,135 MiB/s (1,190 MB/s) |
|
|
| IOPS | 291,000 |
|
|
| Avg Latency | 109.78 µs |
|
|
| P99 Latency | 190 µs |
|
|
| P99.9 Latency | 334 µs |
|
|
|
|
### Random Read/Write (70/30)
|
|
|
|
| Metric | Read | Write |
|
|
|--------|------|-------|
|
|
| Bandwidth | 919 MiB/s (964 MB/s) | 394 MiB/s (413 MB/s) |
|
|
| IOPS | 235,000 | 101,000 |
|
|
| Avg Latency | 94.72 µs | 95.05 µs |
|
|
| P99 Latency | 149 µs | 149 µs |
|
|
|
|
## Test Configuration
|
|
|
|
```text
|
|
fio-3.41
|
|
Block size: 4096B
|
|
IO Engine: libaio
|
|
IO Depth: 32
|
|
Direct IO: yes
|
|
Runtime: 30s per test
|
|
File size: 1GiB
|
|
Directory: /tmp (on NVMe root drive)
|
|
```
|
|
|
|
## Assessment
|
|
|
|
- Drive health is good: 0 media errors, 0 error log entries, 100% spare
|
|
- 19% endurance used after ~205 days powered on (within normal range)
|
|
- Sequential performance consistent with PCIe 4.0 x4 NVMe expectations
|
|
- Random IOPS strong for a client-grade TLC SSD
|
|
- Temperature under load: 51-64°C (well within spec)
|
|
|
|
## Firmware Update Applied
|
|
|
|
> **Date**: 2026-04-02 10:51 CET
|
|
|
|
### Key Discovery: Firmware Naming Convention
|
|
|
|
| Suffix | Type | Model Suffix |
|
|
|--------|------|-------------|
|
|
| `GXA***1Q` | Non-SED | `00B00` (our drive) |
|
|
| `GXA***2Q` | SED | `00B07` |
|
|
|
|
Our drive (MZVL2512HCJQ-**00B00**) requires `GXA7801Q`, NOT `GXA7802Q`.
|
|
The OVH mirror only hosts `GXA7802Q` (SED variant) which was rejected as "Invalid Firmware Image".
|
|
|
|
### Correct Firmware Source
|
|
|
|
- **Repository**: `lolyinseo/samsung-nvme-firmware` (GitHub, 199 stars)
|
|
- **File**: `PM9A1/ASUS/GXA7801Q/GXA7801Q_20221102.bin`
|
|
- **Size**: 2,097,152 bytes (2.0 MiB)
|
|
- **SHA256**: `76ad2b0c35581cb71bd4c5a5fd358a15c4432aa38e9e983acc2349d2b24b5a11`
|
|
|
|
### Update Process (all succeeded)
|
|
|
|
```bash
|
|
# Step 1: Download to controller SRAM
|
|
sudo nvme fw-download --fw=/tmp/GXA7801Q.bin /dev/nvme0n1
|
|
# → Firmware download success
|
|
|
|
# Step 2: Install to slot 2 (preserve original in slot 1)
|
|
sudo nvme fw-commit -s 2 -a 0 /dev/nvme0
|
|
# → Success committing firmware action:0 slot:2
|
|
|
|
# Step 3: Activate slot 2
|
|
sudo nvme fw-commit -s 2 -a 2 /dev/nvme0
|
|
# → Success committing firmware action:2 slot:2
|
|
|
|
# Step 4: Reboot to apply
|
|
sudo reboot
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- [ ] Reboot system to activate GXA7801Q firmware
|
|
- [ ] Verify firmware version with `nvme list`
|
|
- [ ] Re-run identical benchmarks post-update
|
|
- [ ] Compare results in `docs/tech/nvme-benchmark-post-gxa7801q.md`
|