Vitaliy Filippov
dfb6e15eaa
Implement graceful stopping of PGs
2020-04-03 13:03:42 +03:00
Vitaliy Filippov
afe2e76c87
Implement regular automatic syncs, split osd_t constructor into some methods
2020-04-02 22:16:46 +03:00
Vitaliy Filippov
0f43f6d3f6
Fix crashes, print some stats
...
Notably:
- fix the `delete op` inside lambda callback crash (it frees the lambda itself
which results in use-after-free with g++)
- fix stop_client() reenterability
- fix a bug in the blockstore layer which resulted in always returning version=0
for zero-length reads
- change error codes for blockstore_stabilize
2020-03-31 17:55:31 +03:00
Vitaliy Filippov
92c800bb64
Forget unstable writes when re-peering, rename parity_block_size -> pg_stripe_size, pg_parity_size -> pg_block_size
2020-03-31 02:09:25 +03:00
Vitaliy Filippov
8a8b619875
Handle secondary OSD connection errors [in theory]
2020-03-30 19:51:34 +03:00
Vitaliy Filippov
43fe1d88e7
Fix memory leaks with subops, fix recovery crashes
2020-03-28 19:09:20 +03:00
Vitaliy Filippov
1b30120918
Fix stripe reconstruction in recovery, only write modified object parts
2020-03-28 13:58:42 +03:00
Vitaliy Filippov
c0a22d825d
Fix degraded object recovery (it seems to work now)
2020-03-25 02:17:41 +03:00
Vitaliy Filippov
7acfc95f75
CONFIG_HAVE_GETTID
2020-03-25 01:20:20 +03:00
Vitaliy Filippov
250f22c0b6
Implement basic degraded object recovery (integrated into primary_write)
2020-03-25 01:17:50 +03:00
Vitaliy Filippov
dbd8418798
Reply using a single finish_op() method, allow to call OSD ops from inside the OSD
2020-03-24 00:18:52 +03:00
Vitaliy Filippov
036f4c5bf3
Fix unstable flushing, include extra OSDs with old object versions in osd_set
2020-03-23 20:28:47 +03:00
Vitaliy Filippov
fd8e1a8418
Slightly reorganize object state check code
2020-03-23 00:42:17 +03:00
Vitaliy Filippov
a08e0bfacd
Treat misplaced and degraded as separate state parts
2020-03-23 00:40:31 +03:00
Vitaliy Filippov
ddc3e927d3
Solve it in integers
2020-03-20 13:58:54 +03:00
Vitaliy Filippov
2aa605f2bb
Do not check
2020-03-20 13:38:35 +03:00
Vitaliy Filippov
18915b264a
Extract to .pm + fix all_combinations
2020-03-19 21:35:47 +03:00
Vitaliy Filippov
60f795e7eb
Add lp_solve based data distribution optimizer
2020-03-19 17:23:24 +03:00
Vitaliy Filippov
3a4279adbf
Hash-based PG distribution experiments
2020-03-17 18:52:39 +03:00
Vitaliy Filippov
1ec9794376
Extract flushing into a separate file
2020-03-15 18:39:31 +03:00
Vitaliy Filippov
d8164e9d84
Print PG states on every change
2020-03-14 22:19:45 +03:00
Vitaliy Filippov
21d0b06959
Implement flushing (stabilize/rollback) of unstable entries on start of the PG
2020-03-14 02:49:34 +03:00
Vitaliy Filippov
46f9bd2a69
Make blockstore list operation return consistent snapshots
2020-03-14 02:10:25 +03:00
Vitaliy Filippov
6982fe1255
Do not block reads by previous unfinished writes
2020-03-13 21:28:49 +03:00
Vitaliy Filippov
eba053febe
Do not start small writes before finishing the last big write to the same object
2020-03-12 02:15:01 +03:00
Vitaliy Filippov
899946ff96
Add osd_test function to unblock an OSD blocked by the lack of journal space
2020-03-10 17:19:24 +03:00
Vitaliy Filippov
3dd1b22d55
Fix segfault with concurrent OP_SYNCs
2020-03-10 17:00:23 +03:00
Vitaliy Filippov
31f9445030
Use immediate_commit to benefit the primary OSD
2020-03-10 02:20:16 +03:00
Vitaliy Filippov
3f522c66e6
Implement immediate commit mode
2020-03-10 01:59:15 +03:00
Vitaliy Filippov
c3737ae3ff
Add journal fsync to stabilize/rollback
2020-03-09 00:35:58 +03:00
Vitaliy Filippov
c863543bfe
Fix possible journal corruption caused by concurrent flushing and writing of the same journal sector
2020-03-08 01:21:19 +03:00
Vitaliy Filippov
1696446545
Rename min/max _used to _flushed
2020-03-07 16:41:58 +03:00
Vitaliy Filippov
41dddddbf2
Fix some logging
2020-03-07 16:41:53 +03:00
Vitaliy Filippov
2d4e24c9ce
Add journal dumper debugging tool
2020-03-06 02:29:43 +03:00
Vitaliy Filippov
844cacd357
Allow incorrectly forbidden BS_OP_LIST in readonly mode
2020-03-06 02:29:39 +03:00
Vitaliy Filippov
e19d9fde5f
Fix peering_pg, begin tests
2020-03-06 02:02:49 +03:00
Vitaliy Filippov
9cb07d844b
Make [un]register_consumer operate on pointers, rename get_loop_again() to has_work()
2020-03-04 21:00:20 +03:00
Vitaliy Filippov
1e21555343
Add FIXME with Oops
2020-03-04 20:34:45 +03:00
Vitaliy Filippov
94cdbcd085
Stop reading when less than <buffer> data is available
2020-03-04 18:03:16 +03:00
Vitaliy Filippov
8315407558
Incoming data pre-buffering
2020-03-04 17:34:45 +03:00
Vitaliy Filippov
b27ad550cf
Use btree_map instead of sparsepp
2020-03-04 17:12:27 +03:00
Vitaliy Filippov
8e63995306
Allow to specify data area size
2020-03-04 02:32:49 +03:00
Vitaliy Filippov
c9f3654905
Add ringloop.h to dependencies
2020-03-03 17:23:33 +03:00
Vitaliy Filippov
2a5ca4ff6f
Measure OP_STAB in both ways
2020-03-03 02:18:59 +03:00
Vitaliy Filippov
2575431176
Fix EPOLLET race on Linux 5.5+
2020-03-03 01:47:56 +03:00
Vitaliy Filippov
20125db181
Use clock_gettime()
2020-03-03 00:54:42 +03:00
Vitaliy Filippov
7eac7b6d55
Use writev in libfio_sec_osd
2020-03-02 21:17:21 +03:00
Vitaliy Filippov
79839ec31d
Start sending immediately instead of waiting for another loop
2020-03-02 00:20:28 +03:00
Vitaliy Filippov
9d96e4bf0b
Add simple "stub bench" using sync I/O
2020-03-01 23:00:46 +03:00
Vitaliy Filippov
9e18293497
Allow to specify multiple peers
2020-03-01 00:46:07 +03:00
Vitaliy Filippov
56765ab750
Send all iovecs at once
2020-02-29 02:27:19 +03:00
Vitaliy Filippov
fd05e13bc4
Use EPOLLET
...
Its latency is slightly better, too
2020-02-29 01:56:59 +03:00
Vitaliy Filippov
c41fd7ea18
Measure sending subops with data
2020-02-29 01:46:03 +03:00
Vitaliy Filippov
c6334afc94
Measure OSD op/subop latency
...
Something is wrong: loopback RTT between OSDs is sometimes as high as 70us (should be 20us or less probably)
2020-02-28 12:26:49 +03:00
Vitaliy Filippov
2be4824a7a
Fix a small memory leak and BS_OP_SYNC mishandling, now fio does not hang during primary-osd test
2020-02-28 01:46:39 +03:00
Vitaliy Filippov
1733de2db6
Test & fix single-PG primary OSD
...
- Add support for benchmarking single primary OSD in fio_sec_osd
- Do not wait for the next event in flushers (return resume_0 back)
- Fix flushing of zero-length writes
- Print PG object count when peering
- Print journal free space when starting and when congested
2020-02-26 19:05:29 +03:00
Vitaliy Filippov
df66a76ce2
...and make it work :)
2020-02-25 22:52:03 +03:00
Vitaliy Filippov
a406c62a71
Implement basic primary-sync-stabilize
2020-02-25 20:10:21 +03:00
Vitaliy Filippov
74673c761f
Make basic primary-write work
2020-02-25 02:55:58 +03:00
Vitaliy Filippov
09588a349f
Transform primary_r/w into "coroutines"
2020-02-24 02:40:52 +03:00
Vitaliy Filippov
4c0178f180
Fix some memory freeing
2020-02-24 01:04:23 +03:00
Vitaliy Filippov
5dd04abbac
Make bs_op pointer
2020-02-23 23:46:00 +03:00
Vitaliy Filippov
fe3c47812c
Rename osd_exec_secondary to osd_secondary
2020-02-23 23:43:57 +03:00
Vitaliy Filippov
88e56a564f
Rename osd_read_stripe_t to osd_rmw_stripe_t
2020-02-23 23:43:57 +03:00
Vitaliy Filippov
c71b67f2f7
Move SYNC_STAB_ALL into blockstore implementation
2020-02-23 23:43:57 +03:00
Vitaliy Filippov
4a52a15564
Rename osd_op_t.op to req
2020-02-23 23:21:17 +03:00
Vitaliy Filippov
72a89be912
Move uint8_t[] buffers into any_op_t/any_reply_t
2020-02-23 23:21:17 +03:00
Vitaliy Filippov
d4fd9d982a
Implement read-modify-write calculation and extract it into a separate file
2020-02-23 02:11:43 +03:00
Vitaliy Filippov
0e177c7a2a
Fix possible leak in blockstore_read
2020-02-21 19:38:43 +03:00
Vitaliy Filippov
ffe073473a
Remove hardcode of the EC(2+1) scheme, now it supports EC(k+1), fix some bugs
2020-02-13 19:13:17 +03:00
Vitaliy Filippov
b7ccd63104
Return version number from reads
2020-02-12 12:30:50 +03:00
Vitaliy Filippov
1100ad44bd
Cancel outbound operations when disconnecting a peer
2020-02-11 21:17:10 +03:00
Vitaliy Filippov
a66b34e04d
Implement event-driven PG peering
2020-02-11 13:41:34 +03:00
Vitaliy Filippov
327f310868
Remove copy-pasted read/write _blocking
2020-02-09 19:23:03 +03:00
Vitaliy Filippov
1513d0490a
Test and fix degraded-read
2020-02-09 19:17:35 +03:00
Vitaliy Filippov
97d3fc593c
Test and fix primary-read
2020-02-09 19:17:32 +03:00
Vitaliy Filippov
235d15422c
Mostly finish primary-OSD-read
2020-02-03 14:18:21 +03:00
Vitaliy Filippov
9fb2d3f840
Fill out the rest of the degraded read logic; now we need to make it a "coroutine"
2020-02-02 00:05:56 +03:00
Vitaliy Filippov
206c4eb655
WIP submit subops
2020-01-31 14:07:16 +03:00
Vitaliy Filippov
74d0196ba5
Stripe read reconstruction
2020-01-31 13:46:23 +03:00
Vitaliy Filippov
ec50957c41
WIP primary OSD read
2020-01-30 22:06:46 +03:00
Vitaliy Filippov
f4707709c6
Move ack_sync() near sync_state = SYNC_DONE so it does not hang with disable_journal_fsync
2020-01-29 16:55:06 +03:00
Vitaliy Filippov
1e286eed08
Wait for writes to complete before issuing an fsync in blockstore_sync
...
Also fix a dormant bug (OP_SYNC could clear unsynced_*_writes and not be added into syncs_in_progress)
2020-01-29 16:42:40 +03:00
Vitaliy Filippov
dcc9e75c63
Wait for write completion before fsync in blockstore_init
2020-01-29 16:40:21 +03:00
Vitaliy Filippov
47663bd1dc
Add (empty) osd_primary.cpp, rename osd_read to osd_receive, add FIXMEs for fsync
2020-01-28 22:40:50 +03:00
Vitaliy Filippov
1447c44b68
Calculate required stabilize/rollback actions, add more map perf tests
2020-01-27 01:34:30 +03:00
Vitaliy Filippov
079f129390
Add rollback op to the OSD code
2020-01-25 02:04:58 +03:00
Vitaliy Filippov
2b09710d6f
Implement blockstore rollback operation
...
Rollback operation is required for the primary OSD to kill unstable
object versions in OSD peers so they don't occupy journal space
2020-01-24 20:18:14 +03:00
Vitaliy Filippov
98efdb78bd
Extract object state calculation to a separate file and slightly test it
2020-01-24 12:56:51 +03:00
Vitaliy Filippov
d2a3f0c6dd
Begin object state calculation
2020-01-23 22:05:27 +03:00
Vitaliy Filippov
a8bc44064d
Read object lists from peers and own blockstore
2020-01-22 02:36:14 +03:00
Vitaliy Filippov
8c05ee252c
Test object list sorting, begin peering code
2020-01-21 22:33:02 +03:00
Vitaliy Filippov
d0ab2a20b2
Make fsync flags separate for data, metadata and journal
2020-01-17 13:41:37 +03:00
Vitaliy Filippov
d5386aa958
Check presence in sync_to_repeat
2020-01-16 02:16:35 +03:00
Vitaliy Filippov
0d90966739
Add last_sync checking to fio_engine, too
2020-01-16 01:03:18 +03:00
Vitaliy Filippov
43f6cfeb73
Extract alignments to options
2020-01-16 00:54:25 +03:00
Vitaliy Filippov
57ecbb2cda
Parse OSD commandline options
2020-01-15 23:20:11 +03:00
Vitaliy Filippov
8ea1ccc192
Add an OSD stub to compare sync socket I/O with io_uring + skip multiple fsyncs that fio issues
2020-01-15 22:04:58 +03:00
Vitaliy Filippov
a3d3949dce
Do not overwrite same journal sector multiple times
...
It doesn't reduce actual WA, but it reduces tail latency (Q=32, 10% / 50% / 90% / 99% / 99.95%):
- write: 766us/979us/1090us/1303us/1729us vs 1074us/1450us/2212us/3261us/4113us
- sync: 701us/881us/1188us/1762us/2540us vs 269us/955us/1663us/2638us/4146us
2020-01-15 02:53:01 +03:00
Vitaliy Filippov
111516381f
Add FIXME
2020-01-14 18:41:56 +03:00