Submit #2783
closed[PATCH 0/2] sbin/hammer: add get_ondisk() and cleanups
0%
Description
These patches do followings.
---
From 91164be29025acef50289e3b3ee26544a95e91c4 Mon Sep 17 00:00:00 2001
Date: Wed, 4 Feb 2015 05:31:46 +0900
Subject: [PATCH 1/2] sbin/hammer: add get_ondisk()
- Cleanup get_buffer_data() and get_node() using a new inline function
get_ondisk(). These two look different but actually do the same thing
except for the way they release an existing buffer (--ref and
eventually free it). Using get_ondisk() makes the code clear.
- get_ondisk_data() frees an existing non-NULL buffer when isnew or
the offset is out of 16KB range of the cached data. get_node() frees
an existing buffer for btree node whenever the buffer is non-NULL.
They both do the same thing after this.
---
sbin/hammer/ondisk.c | 47 +++++++++++++++++++++++++++++++--------------
1 file changed, 33 insertions(+), 14 deletions(-)
---
From 7ce4695ffdc02bbd13e9070f06d06c6f026e9c58 Mon Sep 17 00:00:00 2001
Date: Wed, 4 Feb 2015 05:35:56 +0900
Subject: [PATCH 2/2] sbin/hammer: cleanups
- Minor cleanups to make get_buffer_data() and get_node() look the same.
As explained in the previous patch these two are very similar and it's
better if the code look similar as well.
- hunk1 - no need to dereference indirect pointer **bufferp via direct
pointer *buffer in here anymore.
- hunk2 - all the rest of the code use **bufferp instead of **bufp.
---
sbin/hammer/ondisk.c | 22 ++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
---
Quick check using gprof to see # of allocation/free against the same
hammer storage haven't changed, which indicates possible logical change
if the # were different.
--------
1. hammer blockmap (read the whole blockmap)
- ./hammer -f /dev/ad1:/dev/ad2:/dev/ad3 blockmap > out1
- gprof ./hammer ./hammer.gmon > hammer.gprof
- grep get_buffer hammer.gprof | grep "^\[[0-9]\+"
[4] 96.0 0.00 601.53 1835008 get_buffer_data [4]
[5] 90.9 0.00 569.08 2048+4099 get_buffer [5] - grep rel_buffer hammer.gprof | grep "^\[[0-9]\+"
[10] 19.5 0.00 121.87 7686 rel_buffer [10] - grep malloc hammer.gprof | grep "^\[[0-9]\+"
[26] 0.0 0.00 0.16 4191 malloc [26] - grep free hammer.gprof | grep "^\[[0-9]\+"
[8] 19.5 0.00 121.91 3079 free [8]
[9] 19.5 0.00 121.91 3079+1540 _slabfree [9]
[655] 0.0 0.00 0.00 1540 _vmem_free [655]
- ./hammer -f /dev/ad1:/dev/ad2:/dev/ad3 blockmap > out2
- gprof ./hammer ./hammer.gmon > hammer.gprof
- grep get_buffer hammer.gprof | grep "^\[[0-9]\+"
[5] 51.9 0.00 293.67 1835008 get_buffer_data [5]
[6] 51.9 0.00 293.67 2048+4099 get_buffer [6] - grep rel_buffer hammer.gprof | grep "^\[[0-9]\+"
[30] 0.0 0.00 0.00 7686 rel_buffer [30] - grep malloc hammer.gprof | grep "^\[[0-9]\+"
[33] 0.0 0.00 0.00 4191 malloc [33] - grep free hammer.gprof | grep "^\[[0-9]\+"
[34] 0.0 0.00 0.00 3079 free [34]
[647] 0.0 0.00 0.00 3079+1540 _slabfree [647]
[651] 0.0 0.00 0.00 1540 _vmem_free [651]
- diff ./out1 ./out2 #
--------
2. hammer show (read the whole filesystem btree nodes)
- ./hammer -f /dev/ad1:/dev/ad2:/dev/ad3 show > out1
- gprof ./hammer ./hammer.gmon > hammer.gprof
- grep get_buffer hammer.gprof | grep "^\[[0-9]\+"
[7] 61.9 0.00 584.42 1470091+111572 get_buffer <cycle 1> [7]
[28] 1.5 0.00 14.64 1462516 get_buffer_data <cycle 1> [28] - grep rel_buffer hammer.gprof | grep "^\[[0-9]\+"
[24] 4.2 0.01 40.00 1646814 rel_buffer [24] - grep malloc hammer.gprof | grep "^\[[0-9]\+"
[22] 19.5 0.00 183.76 132125 malloc [22] - grep free hammer.gprof | grep "^\[[0-9]\+"
[25] 4.2 0.00 39.99 130303 free [25]
[26] 4.2 0.02 39.98 130303+65152 _slabfree [26]
[655] 0.0 0.00 0.00 65152 _vmem_free [655]
- ./hammer -f /dev/ad1:/dev/ad2:/dev/ad3 show > out2
- gprof ./hammer ./hammer.gmon > hammer.gprof
- grep get_buffer hammer.gprof | grep "^\[[0-9]\+"
[7] 48.1 0.02 526.25 1470091+111572 get_buffer <cycle 1> [7]
[24] 13.3 0.01 145.37 1462516 get_buffer_data <cycle 1> [24] - grep rel_buffer hammer.gprof | grep "^\[[0-9]\+"
[12] 36.3 0.00 397.27 1646814 rel_buffer [12] - grep malloc hammer.gprof | grep "^\[[0-9]\+"
[38] 0.0 0.00 0.01 132125 malloc [38] - grep free hammer.gprof | grep "^\[[0-9]\+"
[10] 36.3 0.00 397.27 130303 free [10]
[11] 36.3 0.01 397.26 130303+65152 _slabfree [11]
[655] 0.0 0.00 0.00 65152 _vmem_free [655]
- diff ./out1 ./out2 #
Files