|
1 | 1 | # AmorphousMemoryMark |
2 | | -AmorphousMemoryMark |
| 2 | +A macOS memory benchmark tool that measures read/write performance in GB/s. |
| 3 | + |
| 4 | +[](https://apps.apple.com/us/app/amorphousmemorymark/id1495719766) |
| 5 | + |
| 6 | +## Features |
| 7 | +- **Sequential benchmarks:** 1 MiB block reads/writes, single-thread (T=1) and multi-thread (T up to 64) |
| 8 | +- **Random benchmarks:** 4 KiB block reads/writes, single-thread (T=1) and multi-thread (T up to 64) |
| 9 | +- **Flexible test parameters:** configurable iteration count, test data (random/zero), measurement size (128 MiB – 64 GiB), and interval (0 s – 10 s) |
| 10 | +- **Tooltip:** shows results in GB/s |
| 11 | +- **Copy-pasteable results:** export measurements as formatted plain text |
| 12 | + |
| 13 | +## Example Output |
| 14 | +``` |
| 15 | + Sequential Read 128KiB (T= 8) : 18.95 GB/s (memmove) |
| 16 | + Sequential Write 128KiB (T= 8) : 23.79 GB/s (bzero) |
| 17 | + Random Read 4KiB (T= 8) : 20.04 GB/s (memmove) |
| 18 | + Random Write 4KiB (T= 8) : 11.09 GB/s (bzero) |
| 19 | + Sequential Read 1MiB (T=1) : 10.06 GB/s (memmove) |
| 20 | + Sequential Write 1MiB (T=1) : 16.37 GB/s (bzero) |
| 21 | + Random Read 4KiB (T=1) : 10.33 GB/s (memmove) |
| 22 | + Random Write 4KiB (T=1) : 7.85 GB/s (bzero) |
| 23 | +
|
| 24 | + Sequential Read 128KiB (T= 8) : 19.09 GB/s (rep movsb) |
| 25 | + Sequential Write 128KiB (T= 8) : 23.88 GB/s (rep stosb) |
| 26 | + Random Read 4KiB (T= 8) : 19.99 GB/s (rep movsb) |
| 27 | + Random Write 4KiB (T= 8) : 23.08 GB/s (rep stosb) |
| 28 | + Sequential Read 1MiB (T=1) : 10.34 GB/s (rep movsb) |
| 29 | + Sequential Write 1MiB (T=1) : 16.58 GB/s (rep stosb) |
| 30 | + Random Read 4KiB (T=1) : 10.06 GB/s (rep movsb) |
| 31 | + Random Write 4KiB (T=1) : 11.25 GB/s (rep stosb) |
| 32 | +
|
| 33 | + Sequential Read 128KiB (T= 8) : 19.99 GB/s (temporal) |
| 34 | + Sequential Write 128KiB (T= 8) : 10.97 GB/s (temporal) |
| 35 | + Random Read 4KiB (T= 8) : 19.81 GB/s (temporal) |
| 36 | + Random Write 4KiB (T= 8) : 11.22 GB/s (temporal) |
| 37 | + Sequential Read 1MiB (T=1) : 14.28 GB/s (temporal) |
| 38 | + Sequential Write 1MiB (T=1) : 8.71 GB/s (temporal) |
| 39 | + Random Read 4KiB (T=1) : 10.43 GB/s (temporal) |
| 40 | + Random Write 4KiB (T=1) : 7.90 GB/s (temporal) |
| 41 | +
|
| 42 | + Sequential Read 128KiB (T= 8) : 19.96 GB/s (non-temporal) |
| 43 | + Sequential Write 128KiB (T= 8) : 22.12 GB/s (non-temporal) |
| 44 | + Random Read 4KiB (T= 8) : 20.21 GB/s (non-temporal) |
| 45 | + Random Write 4KiB (T= 8) : 22.30 GB/s (non-temporal) |
| 46 | + Sequential Read 1MiB (T=1) : 14.07 GB/s (non-temporal) |
| 47 | + Sequential Write 1MiB (T=1) : 19.27 GB/s (non-temporal) |
| 48 | + Random Read 4KiB (T=1) : 10.30 GB/s (non-temporal) |
| 49 | + Random Write 4KiB (T=1) : 14.90 GB/s (non-temporal) |
| 50 | +``` |
| 51 | + |
| 52 | +## Requirements |
| 53 | +- macOS 10.9.5 or later |
| 54 | +- Xcode (to build from source) |
| 55 | + |
| 56 | +## Building |
| 57 | +Open `AmorphousMemoryMark/AmorphousMemoryMark.xcodeproj` in Xcode and build the scheme. The app is sandboxed. |
| 58 | + |
| 59 | +## Architecture |
| 60 | +The codebase is Objective-C, structured around a few key components: |
| 61 | + |
| 62 | +| File | Role | |
| 63 | +|---|---| |
| 64 | +| `AppDelegate` | Main UI controller — handles toolbar actions, test size selection, test orchestration | |
| 65 | +| `memmark` | Core memory benchmark engine | |
| 66 | +| `memento` | memory info utilities | |
| 67 | +| `DiskMark` | manages threaded I/O with configurable block size, threads, and duration | |
| 68 | +| `DiskUtil` | human readable size string utility | |
| 69 | +| `DMTextView` | Custom text view with logarithmic bar graph rendering (matching CrystalDiskMark's visual style) | |
| 70 | +| `DMButton` / `DMButtonCell` | Custom button with dark mode support | |
| 71 | +| `DMMediaIcon` | Resolves storage device icons from IOKit kernel extension bundles | |
| 72 | +| `LinkTextField` | Clickable URL text field | |
| 73 | + |
| 74 | +### How benchmarking works |
| 75 | +AmorphousMemoryMark spawns threads to perform I/O against a temporary file on the target volume. |
| 76 | + |
| 77 | +## Usage |
| 78 | +1. Click **All** (or an individual test button). |
| 79 | +2. When finished, press ⌘S to save a screenshot, or copy the plain-text results. |
| 80 | + |
| 81 | +## License |
| 82 | +MIT License. See [LICENSE](LICENSE) for details. |
| 83 | + |
| 84 | +UI design used with permission from the author of CrystalDiskMark. |
| 85 | + |
| 86 | +## Links |
| 87 | +- [Katsura Shareware](https://katsurashareware.com/) |
| 88 | +- [CrystalDiskMark](http://crystalmark.info/) |
0 commit comments