Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
803b3c4a
Commit
803b3c4a
authored
Jun 23, 2015
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth, ethdb: measure database operation latencies too
parent
0609fcf0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
20 deletions
+37
-20
backend.go
eth/backend.go
+9
-9
database.go
ethdb/database.go
+28
-11
No files found.
eth/backend.go
View file @
803b3c4a
...
...
@@ -250,9 +250,9 @@ func New(config *Config) (*Ethereum, error) {
return
nil
,
fmt
.
Errorf
(
"blockchain db err: %v"
,
err
)
}
if
db
,
ok
:=
blockDb
.
(
*
ethdb
.
LDBDatabase
);
ok
{
db
.
Get
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/block/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/block/Puts"
,
metrics
.
DefaultRegistry
)
db
.
DelMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/block/Del
s"
,
metrics
.
DefaultRegistry
)
db
.
Get
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/block/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/block/Puts"
,
metrics
.
DefaultRegistry
)
db
.
MissMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/block/Misse
s"
,
metrics
.
DefaultRegistry
)
db
.
ReadMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/block/Reads"
,
metrics
.
DefaultRegistry
)
db
.
WriteMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/block/Writes"
,
metrics
.
DefaultRegistry
)
}
...
...
@@ -261,9 +261,9 @@ func New(config *Config) (*Ethereum, error) {
return
nil
,
fmt
.
Errorf
(
"state db err: %v"
,
err
)
}
if
db
,
ok
:=
stateDb
.
(
*
ethdb
.
LDBDatabase
);
ok
{
db
.
Get
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/state/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/state/Puts"
,
metrics
.
DefaultRegistry
)
db
.
DelMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/state/Del
s"
,
metrics
.
DefaultRegistry
)
db
.
Get
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/state/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/state/Puts"
,
metrics
.
DefaultRegistry
)
db
.
MissMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/state/Misse
s"
,
metrics
.
DefaultRegistry
)
db
.
ReadMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/state/Reads"
,
metrics
.
DefaultRegistry
)
db
.
WriteMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/state/Writes"
,
metrics
.
DefaultRegistry
)
}
...
...
@@ -272,9 +272,9 @@ func New(config *Config) (*Ethereum, error) {
return
nil
,
fmt
.
Errorf
(
"extra db err: %v"
,
err
)
}
if
db
,
ok
:=
extraDb
.
(
*
ethdb
.
LDBDatabase
);
ok
{
db
.
Get
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/extra/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Meter
=
metrics
.
GetOrRegisterMet
er
(
"eth/db/extra/Puts"
,
metrics
.
DefaultRegistry
)
db
.
DelMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/extra/Del
s"
,
metrics
.
DefaultRegistry
)
db
.
Get
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/extra/Gets"
,
metrics
.
DefaultRegistry
)
db
.
Put
Timer
=
metrics
.
GetOrRegisterTim
er
(
"eth/db/extra/Puts"
,
metrics
.
DefaultRegistry
)
db
.
MissMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/extra/Misse
s"
,
metrics
.
DefaultRegistry
)
db
.
ReadMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/extra/Reads"
,
metrics
.
DefaultRegistry
)
db
.
WriteMeter
=
metrics
.
GetOrRegisterMeter
(
"eth/db/extra/Writes"
,
metrics
.
DefaultRegistry
)
}
...
...
ethdb/database.go
View file @
803b3c4a
package
ethdb
import
(
"time"
"github.com/ethereum/go-ethereum/compression/rle"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
...
...
@@ -17,9 +19,10 @@ type LDBDatabase struct {
fn
string
// filename for reporting
db
*
leveldb
.
DB
// LevelDB instance
GetMeter
metrics
.
Meter
// Meter for measuring the database get request counts
PutMeter
metrics
.
Meter
// Meter for measuring the database put request counts
DelMeter
metrics
.
Meter
// Meter for measuring the database delete request counts
GetTimer
metrics
.
Timer
// Timer for measuring the database get request counts and latencies
PutTimer
metrics
.
Timer
// Timer for measuring the database put request counts and latencies
DelTimer
metrics
.
Timer
// Timer for measuring the database delete request counts and latencies
MissMeter
metrics
.
Meter
// MEter for measuring the missed database get requests
ReadMeter
metrics
.
Meter
// Meter for measuring the database get request data usage
WriteMeter
metrics
.
Meter
// Meter for measuring the database put request data usage
}
...
...
@@ -48,10 +51,14 @@ func NewLDBDatabase(file string) (*LDBDatabase, error) {
// Put puts the given key / value to the queue
func
(
self
*
LDBDatabase
)
Put
(
key
[]
byte
,
value
[]
byte
)
error
{
dat
:=
rle
.
Compress
(
value
)
if
self
.
PutMeter
!=
nil
{
self
.
PutMeter
.
Mark
(
1
)
// Measure the database put latency, if requested
if
self
.
PutTimer
!=
nil
{
start
:=
time
.
Now
()
defer
self
.
PutTimer
.
UpdateSince
(
start
)
}
// Generate the data to write to disk, update the meter and write
dat
:=
rle
.
Compress
(
value
)
if
self
.
WriteMeter
!=
nil
{
self
.
WriteMeter
.
Mark
(
int64
(
len
(
dat
)))
}
...
...
@@ -60,13 +67,20 @@ func (self *LDBDatabase) Put(key []byte, value []byte) error {
// Get returns the given key if it's present.
func
(
self
*
LDBDatabase
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
// Measure the database get latency, if requested
if
self
.
GetTimer
!=
nil
{
start
:=
time
.
Now
()
defer
self
.
GetTimer
.
UpdateSince
(
start
)
}
// Retrieve the key and increment the miss counter if not found
dat
,
err
:=
self
.
db
.
Get
(
key
,
nil
)
if
err
!=
nil
{
if
self
.
MissMeter
!=
nil
{
self
.
MissMeter
.
Mark
(
1
)
}
return
nil
,
err
}
if
self
.
GetMeter
!=
nil
{
self
.
GetMeter
.
Mark
(
1
)
}
// Otherwise update the actually retrieved amount of data
if
self
.
ReadMeter
!=
nil
{
self
.
ReadMeter
.
Mark
(
int64
(
len
(
dat
)))
}
...
...
@@ -75,9 +89,12 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
// Delete deletes the key from the queue and database
func
(
self
*
LDBDatabase
)
Delete
(
key
[]
byte
)
error
{
if
self
.
DelMeter
!=
nil
{
self
.
DelMeter
.
Mark
(
1
)
// Measure the database delete latency, if requested
if
self
.
DelTimer
!=
nil
{
start
:=
time
.
Now
()
defer
self
.
DelTimer
.
UpdateSince
(
start
)
}
// Execute the actual operation
return
self
.
db
.
Delete
(
key
,
nil
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment