From cb4d188a340904e44386055b98328fb8dcb12048 Mon Sep 17 00:00:00 2001 From: KNOEEE <1215892778@qq.com> Date: Mon, 21 Mar 2022 16:11:02 -0700 Subject: [PATCH] Fix a bug in PosixClock (#9695) Summary: Multiplier here should be 1e6 to get microseconds. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9695 Reviewed By: ajkr Differential Revision: D34897086 Pulled By: jay-zhuang fbshipit-source-id: 9c1d0811ea740ba0a007edc2da199edbd000b88b --- db/compaction/compaction_job.cc | 4 ++-- db/flush_job.cc | 8 ++++---- env/env_posix.cc | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/db/compaction/compaction_job.cc b/db/compaction/compaction_job.cc index 524968b16..23b1c60d0 100644 --- a/db/compaction/compaction_job.cc +++ b/db/compaction/compaction_job.cc @@ -1315,7 +1315,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) { } #endif // !ROCKSDB_LITE - uint64_t prev_cpu_micros = db_options_.clock->CPUNanos() / 1000; + uint64_t prev_cpu_micros = db_options_.clock->CPUMicros(); ColumnFamilyData* cfd = sub_compact->compaction->column_family_data(); @@ -1669,7 +1669,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) { } sub_compact->compaction_job_stats.cpu_micros = - db_options_.clock->CPUNanos() / 1000 - prev_cpu_micros; + db_options_.clock->CPUMicros() - prev_cpu_micros; if (measure_io_stats_) { sub_compact->compaction_job_stats.file_write_nanos += diff --git a/db/flush_job.cc b/db/flush_job.cc index 8f9160354..d81ddb03a 100644 --- a/db/flush_job.cc +++ b/db/flush_job.cc @@ -361,7 +361,7 @@ Status FlushJob::MemPurge() { // Measure purging time. const uint64_t start_micros = clock_->NowMicros(); - const uint64_t start_cpu_micros = clock_->CPUNanos() / 1000; + const uint64_t start_cpu_micros = clock_->CPUMicros(); MemTable* new_mem = nullptr; // For performance/log investigation purposes: @@ -614,7 +614,7 @@ Status FlushJob::MemPurge() { TEST_SYNC_POINT("DBImpl::FlushJob:MemPurgeUnsuccessful"); } const uint64_t micros = clock_->NowMicros() - start_micros; - const uint64_t cpu_micros = clock_->CPUNanos() / 1000 - start_cpu_micros; + const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros; ROCKS_LOG_INFO(db_options_.info_log, "[%s] [JOB %d] Mempurge lasted %" PRIu64 " microseconds, and %" PRIu64 @@ -800,7 +800,7 @@ Status FlushJob::WriteLevel0Table() { ThreadStatus::STAGE_FLUSH_WRITE_L0); db_mutex_->AssertHeld(); const uint64_t start_micros = clock_->NowMicros(); - const uint64_t start_cpu_micros = clock_->CPUNanos() / 1000; + const uint64_t start_cpu_micros = clock_->CPUMicros(); Status s; std::vector blob_file_additions; @@ -993,7 +993,7 @@ Status FlushJob::WriteLevel0Table() { // Note that here we treat flush as level 0 compaction in internal stats InternalStats::CompactionStats stats(CompactionReason::kFlush, 1); const uint64_t micros = clock_->NowMicros() - start_micros; - const uint64_t cpu_micros = clock_->CPUNanos() / 1000 - start_cpu_micros; + const uint64_t cpu_micros = clock_->CPUMicros() - start_cpu_micros; stats.micros = micros; stats.cpu_micros = cpu_micros; diff --git a/env/env_posix.cc b/env/env_posix.cc index ca54b01ca..609d169f2 100644 --- a/env/env_posix.cc +++ b/env/env_posix.cc @@ -166,7 +166,7 @@ class PosixClock : public SystemClock { defined(OS_AIX) || (defined(__MACH__) && defined(__MAC_10_12)) struct timespec ts; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); - return static_cast(ts.tv_sec) * 1000000000; + return (static_cast(ts.tv_sec) * 1000000000 + ts.tv_nsec) / 1000; #endif return 0; }