|
| 1 | +E:\GitHub\fula-api>cargo run --example benchmark --release |
| 2 | + Compiling fula-client v0.1.0 (E:\GitHub\fula-api\crates\fula-client) |
| 3 | + Compiling fula-api v0.1.0 (E:\GitHub\fula-api) |
| 4 | + Finished `release` profile [optimized] target(s) in 1m 05s |
| 5 | + Running `target\release\examples\benchmark.exe` |
| 6 | +════════════════════════════════════════════════════════════════════════════════ |
| 7 | + FULA ENCRYPTED STORAGE BENCHMARK |
| 8 | +════════════════════════════════════════════════════════════════════════════════ |
| 9 | + |
| 10 | +Configuration: |
| 11 | + ├─ Gateway: http://localhost:9000 |
| 12 | + ├─ Small folders: 20 × 100 files |
| 13 | + ├─ Large file: 100 MB |
| 14 | + ├─ Deep structure: 10 levels × 10 files |
| 15 | + └─ Remote pinning: enabled |
| 16 | + |
| 17 | +To customize, set environment variables: |
| 18 | + BENCHMARK_SMALL_FOLDERS, BENCHMARK_FILES_PER_FOLDER, |
| 19 | + BENCHMARK_LARGE_FILE_MB, BENCHMARK_DEEP_LEVELS |
| 20 | + |
| 21 | + |
| 22 | +🔧 SETUP: Creating User A's encrypted client... |
| 23 | + ├─ Remote pinning enabled: https://api.cloud.fx.land |
| 24 | + └─ Bucket created: benchmark-user-a |
| 25 | + |
| 26 | +📁 SCENARIO 1A: Uploading 20 folders × 100 files each... |
| 27 | + Folder 1/20: ✓ (100 files) |
| 28 | + Folder 2/20: ✓ (100 files) |
| 29 | + Folder 3/20: ✓ (100 files) |
| 30 | + Folder 4/20: ✓ (100 files) |
| 31 | + Folder 5/20: ✓ (100 files) |
| 32 | + Folder 6/20: ✓ (100 files) |
| 33 | + Folder 7/20: ✓ (100 files) |
| 34 | + Folder 8/20: ✓ (100 files) |
| 35 | + Folder 9/20: ✓ (100 files) |
| 36 | + Folder 10/20: ✓ (100 files) |
| 37 | + Folder 11/20: ✓ (100 files) |
| 38 | + Folder 12/20: ✓ (100 files) |
| 39 | + Folder 13/20: ✓ (100 files) |
| 40 | + Folder 14/20: ✓ (100 files) |
| 41 | + Folder 15/20: ✓ (100 files) |
| 42 | + Folder 16/20: ✓ (100 files) |
| 43 | + Folder 17/20: ✓ (100 files) |
| 44 | + Folder 18/20: ✓ (100 files) |
| 45 | + Folder 19/20: ✓ (100 files) |
| 46 | + Folder 20/20: ✓ (100 files) |
| 47 | + └─ Upload complete: 2000 files, 53.50 MB in 744.1056406s |
| 48 | + |
| 49 | + 📋 Listing all directories... |
| 50 | + └─ Listed 20 directories in 1.9586ms |
| 51 | + |
| 52 | + 📥 Downloading & decrypting sample files... |
| 53 | +.................... |
| 54 | + └─ Downloaded 200 files in 14.8787811s |
| 55 | + |
| 56 | +📦 SCENARIO 1B: Uploading large file (100 MB)... |
| 57 | + ├─ Upload: 296.3246268s |
| 58 | + └─ Downloading & decrypting... |
| 59 | + └─ Download: 97.4642419s (100.00 MB verified) |
| 60 | + |
| 61 | +🌲 SCENARIO 1C: Creating 10-level deep folder structure... |
| 62 | + ├─ Created 10 files at depth 10 in 10.5218297s |
| 63 | + └─ Listed deep directory in 1.4459ms (10 entries) |
| 64 | + |
| 65 | +🔗 SCENARIO 2: Sharing Benchmark |
| 66 | + User A shares the deep folder with User B... |
| 67 | + |
| 68 | + 👤 User B created (public key: Fv6Zp8DlLdTWJgb6BaBn...) |
| 69 | + |
| 70 | + 📝 Method 1: Direct ShareToken Creation |
| 71 | + ├─ Token created: 183.4µs |
| 72 | + ├─ Share ID: 151e55db392c7368d1123759cf0e122f |
| 73 | + └─ Path scope: /deep/level_0/level_1/level_2/level_3/level_4/level_5/level_6/level_7/level_8/level_9 |
| 74 | + |
| 75 | + 📬 Method 2: Async Inbox Sharing |
| 76 | + ├─ Envelope created: 378.4µs |
| 77 | + ├─ Entry ID: b9967390e8326c4a5a4725660e22f7b6 |
| 78 | + └─ Inbox path: /.fula/inbox/0b987176e51cdb7abb46bd664456024b/b9967390e8326c4a5a4725660e22f7b6.share |
| 79 | + |
| 80 | + 👤 User B accepts the share... |
| 81 | + ├─ Share accepted: 163.2µs |
| 82 | + ├─ Path scope: /deep/level_0/level_1/level_2/level_3/level_4/level_5/level_6/level_7/level_8/level_9 |
| 83 | + └─ Can read: true, Can write: false |
| 84 | + |
| 85 | + 📬 User B checks inbox... |
| 86 | + ├─ Pending shares: 1 |
| 87 | + ├─ From: Some("User A") |
| 88 | + ├─ Label: Some("Deep Folder Share") |
| 89 | + └─ Message: Some("Here's access to my deep nested folder!") |
| 90 | + |
| 91 | + 📥 User B fetches shared folder content... |
| 92 | + ├─ Fetch time: 1.3388ms |
| 93 | + └─ Files accessible: 10 |
| 94 | + |
| 95 | +════════════════════════════════════════════════════════════════════════════════ |
| 96 | + BENCHMARK RESULTS SUMMARY |
| 97 | +════════════════════════════════════════════════════════════════════════════════ |
| 98 | + |
| 99 | +📁 SCENARIO 1A: Small Files (20 folders × 100 files each) |
| 100 | + ├─ Files: 2000 |
| 101 | + ├─ Total Size: 53.50 MB |
| 102 | + ├─ Encrypt + Upload: 744.1056406s |
| 103 | + ├─ Download + Decrypt: 14.8787811s |
| 104 | + ├─ List Directory: 1.9586ms |
| 105 | + └─ Upload Throughput: 0.07 MB/s |
| 106 | + |
| 107 | +📦 SCENARIO 1B: Large File |
| 108 | + ├─ Size: 100.00 MB |
| 109 | + ├─ Encrypt + Upload: 296.3246268s |
| 110 | + ├─ Download + Decrypt: 97.4642419s |
| 111 | + ├─ Upload Throughput: 0.34 MB/s |
| 112 | + └─ Download Throughput: 1.03 MB/s |
| 113 | + |
| 114 | +🌲 SCENARIO 1C: Deep Nested Structure (10 levels) |
| 115 | + ├─ Files at Bottom: 10 |
| 116 | + ├─ Upload Time: 10.5218297s |
| 117 | + └─ List Directory: 1.4459ms |
| 118 | + |
| 119 | +🔗 SCENARIO 2: Sharing Benchmark |
| 120 | + ├─ Share Token Creation: 183.4µs |
| 121 | + ├─ Inbox Enqueue Time: 378.4µs |
| 122 | + ├─ Share Acceptance: 163.2µs |
| 123 | + ├─ Shared Folder Fetch: 1.3388ms |
| 124 | + └─ Files Decrypted by Recipient: 10 |
| 125 | + |
| 126 | +📊 OVERALL SUMMARY |
| 127 | + ├─ Total Files: 2011 |
| 128 | + ├─ Total Data: 153.50 MB |
| 129 | + └─ Total Benchmark Time: 1163.7834586s |
| 130 | + |
| 131 | +⚡ PERFORMANCE METRICS |
| 132 | + ├─ Files/second: 1.73 |
| 133 | + └─ Throughput: 0.13 MB/s |
0 commit comments