Skip to content

Commit aa86de8

Browse files
committed
Release 1.0
1 parent b53beb3 commit aa86de8

6 files changed

Lines changed: 29 additions & 13 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ I'm not responsible for the data stored using chunkdisk!
4646
## Issues
4747

4848
* winspd-x64.dll is not compatible with the original to workaround [an issue](https://github.com/billziss-gh/winspd/issues/10). Specifically, invoking `SpdStorageUnitSendResponse()` or `SpdIoctlTransact()` leads to an undefined behavior. It's fine with the current WinSpd binaries though. The source code is available [here](https://github.com/extratype/winspd).
49-
* I/O performance is not great with SSDs.
49+
* Random I/O performance is not great with SSDs.
5050

5151
## Notes and Tips
5252

chunkdisk.rc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include <winver.h>
22

33
VS_VERSION_INFO VERSIONINFO
4-
FILEVERSION 0,9,0,0
5-
PRODUCTVERSION 0,9,0,0
4+
FILEVERSION 1,0,0,0
5+
PRODUCTVERSION 1,0,0,0
66
FILEFLAGSMASK 0x3fL
77
#ifdef _DEBUG
88
FILEFLAGS 0x1L
@@ -18,12 +18,12 @@ BEGIN
1818
BLOCK "040904b0"
1919
BEGIN
2020
VALUE "FileDescription", "chunkdisk"
21-
VALUE "FileVersion", "0.9.0.0"
21+
VALUE "FileVersion", "1.0.0.0"
2222
VALUE "InternalName", "chunkdisk.exe"
2323
VALUE "LegalCopyright", "Copyright (C) 2021 extratype"
2424
VALUE "OriginalFilename", "chunkdisk.exe"
2525
VALUE "ProductName", "chunkdisk"
26-
VALUE "ProductVersion", "0.9.0.0"
26+
VALUE "ProductVersion", "1.0.0.0"
2727
END
2828
END
2929
BLOCK "VarFileInfo"

docs/archived.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,16 @@ Performance experiments with DiskSpd:
4646
DRAM: > 1M IOPS, so single dispatcher
4747
SSD: parallel accesses > outstanding (queued) accesses
4848
HDD: better sequential performance with queue, tune total request size
49+
50+
WinSpd requests while sequential access:
51+
Split in maximum transfer length
52+
53+
Overlap requests in multiple threads to keep disk busy
54+
Buffered read: 2 ~ 4 threads
55+
Buffered write: up to 5 threads
56+
57+
Requests more out of order with single dispatcher thread
58+
Appears as if strided
59+
Not queued, read-ahead buffer required
60+
61+
Memory usage: (maximum transfer length) * (number of threads)

docs/changes.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,11 @@ v0.9
3434
* Make I/O scheduling deterministic for better sequential performance on HDDs.
3535
* Merge unmap ranges across requests for better space efficiency.
3636
* Flush file metadata after one minute of inactivity.
37+
38+
v1.0
39+
40+
* Change maximum transfer length to 1MB to maximize sequential performance.
41+
* Revert deterministic I/O scheduling to handle concurrent I/O's as intended.
42+
* Improve handling buffers for small-sized I/O's.
43+
* Fix bugs in unaligned (page-based) I/O's.
44+
* Fix inactivity timer.

docs/design.txt

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,8 @@ Asynchronous I/O:
3939

4040
--------------------------------------------------------------------------------
4141

42-
Scheduling requests in dispatcher:
43-
worker = (address / 1048576) % (# of workers)
44-
choose next worker if QD >= 32, wait if all full
45-
46-
characteristic:
47-
requests parallelized if depth > 32
48-
requests serialized if size < 1048576 bytes
42+
One worker thread per dispatcher thread:
43+
Bypass/Synchronous/Asynchronous I/O
4944

5045
ChunkDiskService:
5146
Chunks:

main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ DWORD CreateStorageUnit(PWSTR chunkdisk_file, BOOLEAN write_protected, PWSTR pip
302302
err = [&params, write_protected, pipe_name, &unit]() -> DWORD
303303
{
304304
constexpr wchar_t ProductId[] = L"ChunkDisk";
305-
constexpr wchar_t ProductRevision[] = L"0.9";
305+
constexpr wchar_t ProductRevision[] = L"1.0";
306306
auto unit_params = SPD_STORAGE_UNIT_PARAMS();
307307

308308
UuidCreate(&unit_params.Guid);

0 commit comments

Comments
 (0)