diff -uNr a/bitcoin/src/db.cpp b/bitcoin/src/db.cpp --- a/bitcoin/src/db.cpp 3696bed50163aab754e7875fb51cb16c5244865f23b2e4c00ddcd3f6b64c2001640b7a1f66c72c06d2d5cad7bfacb8fc18a0eb5f3e3f7cfd516a5353fc7ce1e3 +++ b/bitcoin/src/db.cpp 3e5ea93f89e9fd14225c30b37462794aefd3ff6fa92c39b60aa253929114e1f27f3f44a63fcfd8c144326233fcec55dd01f7ff4a0edfa728717ab5b35e80bf26 @@ -30,6 +30,17 @@ return dbWriteTime; } +CCriticalSection cs_dbreadtime; +int64 dbReadTime = 0; + +int64 DbReadOdometer(int64 dt) +{ + CRITICAL_BLOCK(cs_dbreadtime) // increment read-wait odometer + { + dbReadTime += dt; + } + return dbReadTime; +} // diff -uNr a/bitcoin/src/db.h b/bitcoin/src/db.h --- a/bitcoin/src/db.h 5d6e22ff9bb87c423cb2a4a92a41ab68959233611b431551203bc8b5fa2ca18a6f8db4955715c25238927bbdad1e3593dc02db35bfbb75bd81460c9765211198 +++ b/bitcoin/src/db.h f8c33844ccd37ba55598ed384ff24cbbed16fc5de6381fd16940d1d874a7d604eb41d104271ff7c5d9103f06119d68950e5b5ae8652c5f84e998a0fc7d7e1139 @@ -33,6 +33,7 @@ bool BackupWallet(const CWallet& wallet, const std::string& strDest); int64 DbWriteOdometer(int64 dt); +int64 DbReadOdometer(int64 dt); class CDB { @@ -66,7 +67,10 @@ // Read Dbt datValue; datValue.set_flags(DB_DBT_MALLOC); + int64 rStart = GetTimeMillis(); int ret = pdb->get(GetTxn(), &datKey, &datValue, 0); + int64 rInterval = GetTimeMillis() - rStart; + DbReadOdometer(rInterval); memset(datKey.get_data(), 0, datKey.get_size()); if (datValue.get_data() == NULL) return false; diff -uNr a/bitcoin/src/main.cpp b/bitcoin/src/main.cpp --- a/bitcoin/src/main.cpp 07f7a221f9a259415c81d76437369f62405b60d39917a70c23e2f9c2126259b7c4d6f589bdc3a8260197e35964f22d97e002d2e8226678a68efa68c147b78c87 +++ b/bitcoin/src/main.cpp b9e592cff62c483de38102554067b7d2fc6d1f5918dd18ed841ef8cfa984f986b898aca8166f152b83210eedb1ddc6fc30e2009f6f1d390ac81704b7ac344aaa @@ -1379,13 +1379,16 @@ // Timing wrapper for ProcessBlock, to determine portion of time spent waiting for db. bool ProcessBlock(CNode* pfrom, CBlock* pblock) { - int64 dbStart = DbWriteOdometer(0); + int64 rdStart = DbReadOdometer(0); + int64 wrStart = DbWriteOdometer(0); int64 pbStart = GetTimeMillis(); bool res = do_ProcessBlock(pfrom, pblock); int64 pbInterval = GetTimeMillis() - pbStart; - int64 dbInterval = DbWriteOdometer(0) - dbStart; - printf("ProcessBlock (res == %d) took : %"PRI64d"ms; db write wait: %"PRI64d"ms \n", - res, pbInterval, dbInterval); + int64 wrInterval = DbWriteOdometer(0) - wrStart; + int64 rdInterval = DbReadOdometer(0) - rdStart; + printf("ProcessBlock (res == %d) took : %"PRI64d + "ms; db write wait: %"PRI64d"ms; db read wait: %"PRI64d"ms \n", + res, pbInterval, wrInterval, rdInterval); return res; }