Mihawk
90aaa75abe
WebUI: a parallel transfer engine (batches, upload sessions, ranges, six lanes)
...
Measured first: one libmicrohttpd thread with 64 KiB a connection held uploads to
13 MB/s, and four connections to 15.3, on a link where FTP reached 25 / 30.5 MB/s.
PS5-Suite's design was reviewed (persistent connection pool, small files per
connection, large files as pwrite ranges, big socket buffers) and an engine built
from scratch on the WebUI's HTTP (src/webui_transfer.{h,cpp}, docs/WEBUI.md):
- a pool of four server threads, 512 KiB a connection, 4 MiB socket buffers, writes
in 1 MiB blocks; non-transfer routes under one lock as on the single thread;
- PUT /api/upload/batch: many small files in one request (a framed stream), each
renamed into place when whole, existing names skipped and named unless replace;
- upload sessions (/api/upload/session, /part, /commit): a large file's ranges in
any order on any number of connections, committed once covered;
- Range downloads (206); every upload still atomic, never over an existing name;
- the page plans batches, sessions and single uploads onto six lanes.
Evidence: evidence/webui-transfer-engine (base PS5 13.40, PC on Wi-Fi 6). Uploads
26.0 MB/s on one connection and 29.9 MB/s for one file in six parts (FTP: 25 /
30.5); 400 x 32 KiB at 215 files/s (FTP 105). The page against the console: 605
files in 20.1 s, all equal by FTP readback, duplicates refused, a cancelled 200 MiB
file left nothing. ThreadSanitizer under a mixed parallel load: no report.
Command: build/tmp/transfer/bench.py; node tests/webui_transfer_browser.cjs;
tools/verify.sh: all five PASS.
2026-10-07 08:23:21 -04:00
..
2026-09-19 11:30:05 -04:00
2026-10-07 07:41:51 -04:00
2026-09-19 02:41:52 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-05 14:00:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-05 14:00:05 -04:00
2026-10-05 14:00:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-04 16:31:50 -04:00
2026-10-05 14:00:05 -04:00
2026-09-25 09:24:54 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-04 16:31:50 -04:00
2026-09-23 19:36:17 -04:00
2026-09-23 19:36:17 -04:00
2026-10-06 23:40:55 -04:00
2026-09-28 21:30:19 -04:00
2026-10-06 21:16:01 -04:00
2026-10-04 15:17:20 -04:00
2026-10-07 07:41:51 -04:00
2026-09-23 19:36:17 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-04 15:17:20 -04:00
2026-10-04 15:17:20 -04:00
2026-09-28 21:30:19 -04:00
2026-10-04 16:31:50 -04:00
2026-10-05 14:00:05 -04:00
2026-10-05 14:00:05 -04:00
2026-09-18 22:50:12 -04:00
2026-09-23 19:36:17 -04:00
2026-10-05 14:00:05 -04:00
2026-10-06 23:09:36 -04:00
2026-10-06 23:09:36 -04:00
2026-10-07 07:41:51 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-09-25 09:24:54 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-06 23:09:36 -04:00
2026-10-04 15:17:20 -04:00
2026-09-19 20:25:47 -04:00
2026-10-06 23:09:36 -04:00
2026-09-23 19:36:17 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-07 07:41:51 -04:00
2026-10-05 14:00:05 -04:00
Thirteen cores: 32X, PC Engine, PC-FX, Virtual Boy, Neo Geo Pocket, WonderSwan, Pokemon Mini, Lynx, Jaguar, 2600, 5200, 7800, MS-DOS
2026-10-06 22:11:05 -04:00
2026-10-07 08:23:21 -04:00
2026-10-02 11:07:52 -04:00
2026-10-02 19:06:46 -04:00
2026-10-04 19:36:09 -04:00
2026-09-28 21:30:19 -04:00
2026-09-19 13:22:39 -04:00
2026-09-18 13:50:22 -04:00
2026-09-19 14:05:29 -04:00
2026-09-19 19:19:32 -04:00
2026-10-04 23:20:37 -04:00
2026-09-18 13:56:02 -04:00
2026-09-28 15:06:47 -04:00
2026-09-28 21:51:54 -04:00
2026-09-26 01:02:30 -04:00
2026-10-04 15:05:48 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-10-04 17:09:50 -04:00
2026-10-04 16:31:50 -04:00
2026-09-18 14:37:57 -04:00
2026-09-18 14:37:57 -04:00
2026-10-02 13:06:01 -04:00
2026-09-28 21:30:19 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-10-07 07:41:51 -04:00
2026-09-18 14:37:57 -04:00
2026-09-18 13:50:22 -04:00
2026-10-01 09:26:26 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-09-19 19:19:32 -04:00
2026-10-02 15:58:41 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-10-02 15:58:41 -04:00
2026-10-02 15:58:41 -04:00
2026-09-18 13:50:22 -04:00
2026-09-26 01:02:30 -04:00
2026-10-06 21:16:01 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-10-05 14:00:05 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-09-18 13:50:22 -04:00
2026-10-05 00:16:33 -04:00
2026-10-04 23:20:37 -04:00
2026-09-18 23:33:17 -04:00
2026-09-18 13:50:22 -04:00
2026-09-29 10:28:46 -04:00
2026-10-02 15:58:41 -04:00