1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. 2 // This source code is licensed under both the GPLv2 (found in the 3 // COPYING file in the root directory) and Apache 2.0 License 4 // (found in the LICENSE.Apache file in the root directory). 5 // 6 // This file defines the structures for thread operation and state. 7 // Thread operations are used to describe high level action of a 8 // thread such as doing compaction or flush, while thread state 9 // are used to describe lower-level action such as reading / 10 // writing a file or waiting for a mutex. Operations and states 11 // are designed to be independent. Typically, a thread usually involves 12 // in one operation and one state at any specific point in time. 13 14 #pragma once 15 16 #include "rocksdb/thread_status.h" 17 18 #include <string> 19 20 namespace ROCKSDB_NAMESPACE { 21 22 #ifdef ROCKSDB_USING_THREAD_STATUS 23 24 // The structure that describes a major thread operation. 25 struct OperationInfo { 26 const ThreadStatus::OperationType type; 27 const std::string name; 28 }; 29 30 // The global operation table. 31 // 32 // When updating a status of a thread, the pointer of the OperationInfo 33 // of the current ThreadStatusData will be pointing to one of the 34 // rows in this global table. 35 // 36 // Note that it's not designed to be constant as in the future we 37 // might consider adding global count to the OperationInfo. 38 static OperationInfo global_operation_table[] = { 39 {ThreadStatus::OP_UNKNOWN, ""}, 40 {ThreadStatus::OP_COMPACTION, "Compaction"}, 41 {ThreadStatus::OP_FLUSH, "Flush"} 42 }; 43 44 struct OperationStageInfo { 45 const ThreadStatus::OperationStage stage; 46 const std::string name; 47 }; 48 49 // A table maintains the mapping from stage type to stage string. 50 // Note that the string must be changed accordingly when the 51 // associated function name changed. 52 static OperationStageInfo global_op_stage_table[] = { 53 {ThreadStatus::STAGE_UNKNOWN, ""}, 54 {ThreadStatus::STAGE_FLUSH_RUN, 55 "FlushJob::Run"}, 56 {ThreadStatus::STAGE_FLUSH_WRITE_L0, 57 "FlushJob::WriteLevel0Table"}, 58 {ThreadStatus::STAGE_COMPACTION_PREPARE, 59 "CompactionJob::Prepare"}, 60 {ThreadStatus::STAGE_COMPACTION_RUN, 61 "CompactionJob::Run"}, 62 {ThreadStatus::STAGE_COMPACTION_PROCESS_KV, 63 "CompactionJob::ProcessKeyValueCompaction"}, 64 {ThreadStatus::STAGE_COMPACTION_INSTALL, 65 "CompactionJob::Install"}, 66 {ThreadStatus::STAGE_COMPACTION_SYNC_FILE, 67 "CompactionJob::FinishCompactionOutputFile"}, 68 {ThreadStatus::STAGE_PICK_MEMTABLES_TO_FLUSH, 69 "MemTableList::PickMemtablesToFlush"}, 70 {ThreadStatus::STAGE_MEMTABLE_ROLLBACK, 71 "MemTableList::RollbackMemtableFlush"}, 72 {ThreadStatus::STAGE_MEMTABLE_INSTALL_FLUSH_RESULTS, 73 "MemTableList::TryInstallMemtableFlushResults"}, 74 }; 75 76 // The structure that describes a state. 77 struct StateInfo { 78 const ThreadStatus::StateType type; 79 const std::string name; 80 }; 81 82 // The global state table. 83 // 84 // When updating a status of a thread, the pointer of the StateInfo 85 // of the current ThreadStatusData will be pointing to one of the 86 // rows in this global table. 87 static StateInfo global_state_table[] = { 88 {ThreadStatus::STATE_UNKNOWN, ""}, 89 {ThreadStatus::STATE_MUTEX_WAIT, "Mutex Wait"}, 90 }; 91 92 struct OperationProperty { 93 int code; 94 std::string name; 95 }; 96 97 static OperationProperty compaction_operation_properties[] = { 98 {ThreadStatus::COMPACTION_JOB_ID, "JobID"}, 99 {ThreadStatus::COMPACTION_INPUT_OUTPUT_LEVEL, "InputOutputLevel"}, 100 {ThreadStatus::COMPACTION_PROP_FLAGS, "Manual/Deletion/Trivial"}, 101 {ThreadStatus::COMPACTION_TOTAL_INPUT_BYTES, "TotalInputBytes"}, 102 {ThreadStatus::COMPACTION_BYTES_READ, "BytesRead"}, 103 {ThreadStatus::COMPACTION_BYTES_WRITTEN, "BytesWritten"}, 104 }; 105 106 static OperationProperty flush_operation_properties[] = { 107 {ThreadStatus::FLUSH_JOB_ID, "JobID"}, 108 {ThreadStatus::FLUSH_BYTES_MEMTABLES, "BytesMemtables"}, 109 {ThreadStatus::FLUSH_BYTES_WRITTEN, "BytesWritten"} 110 }; 111 112 #else 113 114 struct OperationInfo { 115 }; 116 117 struct StateInfo { 118 }; 119 120 #endif // ROCKSDB_USING_THREAD_STATUS 121 } // namespace ROCKSDB_NAMESPACE 122