BlueStore线程协作3_kv_sync线程.png 经过kv_sync_thread处理以后,kv事务被提交,txc状态被置为STATE_KV_SUBMITTED,这些txc被集中到kv_committing_to_finalize队列,等待kv_finalize线程处理;deferred_done的事务在经过bdev->flush()或者db->submit_transaction_sync(synct)操作后,变成deferred_stable,它们被集中到deferre...
会根据bluestore_sync_submit_transaction做不同处理。该值为布尔值,默认为false。 如果为true,设置状态为STATE_KV_SUBMITTED并且同步提交kv到RocksDB但是没有sync落盘(submit_transaction),然后applied_kv。 如果为false,则不用做上面的操作,但是以下操作都会做。 最后将事物放在kv_queue里,通过kv_cond通知kv_sync_th...
具体会在异步线程章节分析kv_sync_thread线程。 主要工作:从kv_sync_thread队列中取出事物。 延迟指标:l_bluestore_state_kv_queued_lat,从事物进入队列到取出事物,平均延迟在0.08ms,因为是单线程顺序处理的,所以依赖于kv_sync_thread处理事物的速度。 STATE_KV_SUBMITTED 等待kv_sync_thread中kv元数据和IO数据的...
1)bluestore_sync_transaction为true:表示同步提交kv到rocksdb并持久化,对应调用_txc_finalize_kv后再调用db->submit_transaction,即rocksdb::Write并设置rocksdb::WriteOptions.sync=true; 2)bluestore_sync_transaction为false,bluestore_sync_submit_transaction为true:表示将kv提交到rocksdb,但是不sync,也就是没有落...
完成AIO,并进入STATE_KV_QUEUED阶段。会根据bluestore_sync_submit_transaction做不同处理。该值为布尔值,默认为false。 如果为true,设置状态为STATE_KV_SUBMITTED并且同步提交kv到RocksDB但是没有sync落盘(submit_transaction),然后applied_kv。 如果为false,则不用做上面的操作,但是以下操作都会做。
bluestore_sync_submit_transaction控制kv信息是否同步提交到kvdb中。 非同步提交,则状态变更为STATE_KV_QUEUED,同步提交,则变更会STATE_KV_SUBMITTED。 最终kv_sync_thread线程都会将txc放入到kv_committing_to_finalize中。 kv_finalize_thread从kv_committing_to_finalize获取txc,并使流程向下进行。
如果为true,设置状态为STATE_KV_SUBMITTED并且同步提交kv到RocksDB但是没有sync落盘(submit_transaction),然后applied_kv。 如果为false,则不用做上面的操作,但是以下操作都会做。 最后将事物放在kv_queue里,通过kv_cond通知kv_sync_thread去同步IO和元数据。
bluestore机制中,os/bluestore:deferred write的操作流程涉及多个关键步骤。首先,通过BlueStore::queue_transaction,将事务操作加入到kv_queue中,目的是在随后的kv_sync_thread中完成数据库提交。之后,通过BlueStore::_kv_sync_thread,正常的事务提交操作得以执行,kv transations被提交至数据库,并唤醒_...
Oct 26 01:06:38 langhus-1 ceph-osd[310129]: 2020-10-26 01:06:38.676 7f2c921ec640 -1 rocksdb: submit_common error: Corruption: block checksum mismatch: expected 2320317871, got 95494035 in db/029531.sst offset 20331766 size 3873 code = 2 Rocksdb transaction: Oct 26 01:06:38 langhus...
"(RocksDBStore::submit_transaction(std::shared_ptr<KeyValueDB::TransactionImpl>)+0x87) [0x5632f0742027]", "(BlueStore::_txc_apply_kv(BlueStore::TransContext*, bool)+0x426) [0x5632f0226376]", "(BlueStore::_kv_sync_thread()+0x176f) [0x5632f024bc1f]", ...