* perf counters from a performance discrepancy
@ 2015-09-23 16:33 Deneau, Tom
2015-09-23 18:19 ` Sage Weil
2015-09-23 20:39 ` Gregory Farnum
0 siblings, 2 replies; 15+ messages in thread
From: Deneau, Tom @ 2015-09-23 16:33 UTC (permalink / raw)
To: ceph-devel@vger.kernel.org
Hi all --
Looking for guidance with perf counters...
I am trying to see whether the perf counters can tell me anything about the following discrepancy
I populate a number of 40k size objects in each of two pools, poolA and poolB.
Both pools cover osds on a single node, 5 osds total.
* Config 1 (1p):
* use single rados bench client with 32 threads to do seq read of 20000 objects from poolA.
* Config 2 (2p):
* use two concurrent rados bench clients (running on same client node) with 16 threads each,
one reading 10000 objects from poolA,
one reading 10000 objects from poolB,
So in both configs, we have 32 threads total and the number of objects read is the same.
Note: in all cases, we drop the caches before doing the seq reads
The combined bandwidth (MB/sec) for the 2 clients in config 2 is about 1/3 of the bandwidth for
the single client in config 1.
I gathered perf counters before and after each run and looked at the difference of
the before and after counters for both the 1p and 2p cases. Here are some things I noticed
that are different between the two runs. Can someone take a look and let me know
whether any of these differences are significant. In particular, for the
throttle-msgr_dispatch_throttler ones, since I don't know the detailed definitions of these fields.
Note: these are the numbers for one of the 5 osds, the other osds are similar...
* The field osd/loadavg is always about 3 times higher on the 2p c
some latency-related counters
------------------------------
osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
and some throttle-msgr_dispatch_throttler related counters
----------------------------------------------------------
throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
throttle-msgr_dispatch_throttler-client/get_sum 1p=222877, 2p=223088, diff=211
throttle-msgr_dispatch_throttler-client/put 1p=1337, 2p=1339, diff=2
throttle-msgr_dispatch_throttler-client/put_sum 1p=222877, 2p=223088, diff=211
throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134, diff=76
throttle-msgr_dispatch_throttler-hb_back_server/get_sum 1p=2726, 2p=6298, diff=3572
throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134, diff=76
throttle-msgr_dispatch_throttler-hb_back_server/put_sum 1p=2726, 2p=6298, diff=3572
throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134, diff=76
throttle-msgr_dispatch_throttler-hb_front_server/get_sum 1p=2726, 2p=6298, diff=3572
throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134, diff=76
throttle-msgr_dispatch_throttler-hb_front_server/put_sum 1p=2726, 2p=6298, diff=3572
throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252, diff=84
throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896, 2p=11844, diff=3948
throttle-msgr_dispatch_throttler-hbclient/put 1p=168, 2p=252, diff=84
throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844, diff=3948
-- Tom Deneau, AMD
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 16:33 perf counters from a performance discrepancy Deneau, Tom
@ 2015-09-23 18:19 ` Sage Weil
2015-09-23 18:25 ` Gregory Farnum
2015-09-23 20:39 ` Gregory Farnum
1 sibling, 1 reply; 15+ messages in thread
From: Sage Weil @ 2015-09-23 18:19 UTC (permalink / raw)
To: Deneau, Tom; +Cc: ceph-devel@vger.kernel.org
On Wed, 23 Sep 2015, Deneau, Tom wrote:
> Hi all --
>
> Looking for guidance with perf counters...
> I am trying to see whether the perf counters can tell me anything about the following discrepancy
>
> I populate a number of 40k size objects in each of two pools, poolA and poolB.
> Both pools cover osds on a single node, 5 osds total.
>
> * Config 1 (1p):
> * use single rados bench client with 32 threads to do seq read of 20000 objects from poolA.
>
> * Config 2 (2p):
> * use two concurrent rados bench clients (running on same client node) with 16 threads each,
> one reading 10000 objects from poolA,
> one reading 10000 objects from poolB,
>
> So in both configs, we have 32 threads total and the number of objects read is the same.
> Note: in all cases, we drop the caches before doing the seq reads
>
> The combined bandwidth (MB/sec) for the 2 clients in config 2 is about 1/3 of the bandwidth for
> the single client in config 1.
How were the object written? I assume the cluster is backed by spinning
disks?
I wonder if this is a disk layout issue. If the 20,000 objects are
written in order, they willb e roughly sequential on disk, and the 32
thread case will read them in order. In the 2x 10,000 case, the two
clients are reading two sequences of objects written at different
times, and the disk arms will be swinging around more.
My guess is that if the reads were reading the objects in a random order
the performance would be the same... I'm not sure that rados bench does
that though?
sage
>
>
> I gathered perf counters before and after each run and looked at the difference of
> the before and after counters for both the 1p and 2p cases. Here are some things I noticed
> that are different between the two runs. Can someone take a look and let me know
> whether any of these differences are significant. In particular, for the
> throttle-msgr_dispatch_throttler ones, since I don't know the detailed definitions of these fields.
> Note: these are the numbers for one of the 5 osds, the other osds are similar...
>
> * The field osd/loadavg is always about 3 times higher on the 2p c
>
> some latency-related counters
> ------------------------------
> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
> osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
>
>
> and some throttle-msgr_dispatch_throttler related counters
> ----------------------------------------------------------
> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
> throttle-msgr_dispatch_throttler-client/get_sum 1p=222877, 2p=223088, diff=211
> throttle-msgr_dispatch_throttler-client/put 1p=1337, 2p=1339, diff=2
> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877, 2p=223088, diff=211
> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134, diff=76
> throttle-msgr_dispatch_throttler-hb_back_server/get_sum 1p=2726, 2p=6298, diff=3572
> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134, diff=76
> throttle-msgr_dispatch_throttler-hb_back_server/put_sum 1p=2726, 2p=6298, diff=3572
> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134, diff=76
> throttle-msgr_dispatch_throttler-hb_front_server/get_sum 1p=2726, 2p=6298, diff=3572
> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134, diff=76
> throttle-msgr_dispatch_throttler-hb_front_server/put_sum 1p=2726, 2p=6298, diff=3572
> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252, diff=84
> throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896, 2p=11844, diff=3948
> throttle-msgr_dispatch_throttler-hbclient/put 1p=168, 2p=252, diff=84
> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844, diff=3948
>
> -- Tom Deneau, AMD
>
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 18:19 ` Sage Weil
@ 2015-09-23 18:25 ` Gregory Farnum
2015-09-23 18:42 ` Mark Nelson
0 siblings, 1 reply; 15+ messages in thread
From: Gregory Farnum @ 2015-09-23 18:25 UTC (permalink / raw)
To: Sage Weil; +Cc: Deneau, Tom, ceph-devel@vger.kernel.org
On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net> wrote:
> On Wed, 23 Sep 2015, Deneau, Tom wrote:
>> Hi all --
>>
>> Looking for guidance with perf counters...
>> I am trying to see whether the perf counters can tell me anything about the following discrepancy
>>
>> I populate a number of 40k size objects in each of two pools, poolA and poolB.
>> Both pools cover osds on a single node, 5 osds total.
>>
>> * Config 1 (1p):
>> * use single rados bench client with 32 threads to do seq read of 20000 objects from poolA.
>>
>> * Config 2 (2p):
>> * use two concurrent rados bench clients (running on same client node) with 16 threads each,
>> one reading 10000 objects from poolA,
>> one reading 10000 objects from poolB,
>>
>> So in both configs, we have 32 threads total and the number of objects read is the same.
>> Note: in all cases, we drop the caches before doing the seq reads
>>
>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is about 1/3 of the bandwidth for
>> the single client in config 1.
>
> How were the object written? I assume the cluster is backed by spinning
> disks?
>
> I wonder if this is a disk layout issue. If the 20,000 objects are
> written in order, they willb e roughly sequential on disk, and the 32
> thread case will read them in order. In the 2x 10,000 case, the two
> clients are reading two sequences of objects written at different
> times, and the disk arms will be swinging around more.
>
> My guess is that if the reads were reading the objects in a random order
> the performance would be the same... I'm not sure that rados bench does
> that though?
>
> sage
>
>>
>>
>> I gathered perf counters before and after each run and looked at the difference of
>> the before and after counters for both the 1p and 2p cases. Here are some things I noticed
>> that are different between the two runs. Can someone take a look and let me know
>> whether any of these differences are significant. In particular, for the
>> throttle-msgr_dispatch_throttler ones, since I don't know the detailed definitions of these fields.
>> Note: these are the numbers for one of the 5 osds, the other osds are similar...
>>
>> * The field osd/loadavg is always about 3 times higher on the 2p c
>>
>> some latency-related counters
>> ------------------------------
>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
>> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
>> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
>> osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
So, yep, the individual read ops are taking much longer in the
two-client case. Naively that's pretty odd.
>>
>>
>> and some throttle-msgr_dispatch_throttler related counters
>> ----------------------------------------------------------
>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
>> throttle-msgr_dispatch_throttler-client/get_sum 1p=222877, 2p=223088, diff=211
>> throttle-msgr_dispatch_throttler-client/put 1p=1337, 2p=1339, diff=2
>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877, 2p=223088, diff=211
>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134, diff=76
>> throttle-msgr_dispatch_throttler-hb_back_server/get_sum 1p=2726, 2p=6298, diff=3572
>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134, diff=76
>> throttle-msgr_dispatch_throttler-hb_back_server/put_sum 1p=2726, 2p=6298, diff=3572
>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134, diff=76
>> throttle-msgr_dispatch_throttler-hb_front_server/get_sum 1p=2726, 2p=6298, diff=3572
>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134, diff=76
>> throttle-msgr_dispatch_throttler-hb_front_server/put_sum 1p=2726, 2p=6298, diff=3572
>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252, diff=84
>> throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896, 2p=11844, diff=3948
>> throttle-msgr_dispatch_throttler-hbclient/put 1p=168, 2p=252, diff=84
>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844, diff=3948
IIRC these are just saying how many times the dispatch throttler was
accessed on each messenger — nothing here is surprising, you're doing
basically the same number of messages on the client messengers, and
the heartbeat messengers are passing more because the test takes
longer.
I'd go with Sage's idea for what is actually causing this, or try and
look at how the latency changes over time — if you're going to two
pools instead of one, presumably you're doubling the amount of
metadata that needs to be read into memory during the run? Perhaps
that's just a significant enough effect with your settings that you're
seeing a bunch of extra directory lookups impact your throughput more
than expected... :/
-Greg
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 18:25 ` Gregory Farnum
@ 2015-09-23 18:42 ` Mark Nelson
2015-09-23 20:05 ` Deneau, Tom
2015-10-07 22:39 ` Deneau, Tom
0 siblings, 2 replies; 15+ messages in thread
From: Mark Nelson @ 2015-09-23 18:42 UTC (permalink / raw)
To: Gregory Farnum, Sage Weil; +Cc: Deneau, Tom, ceph-devel@vger.kernel.org
On 09/23/2015 01:25 PM, Gregory Farnum wrote:
> On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net> wrote:
>> On Wed, 23 Sep 2015, Deneau, Tom wrote:
>>> Hi all --
>>>
>>> Looking for guidance with perf counters...
>>> I am trying to see whether the perf counters can tell me anything about the following discrepancy
>>>
>>> I populate a number of 40k size objects in each of two pools, poolA and poolB.
>>> Both pools cover osds on a single node, 5 osds total.
>>>
>>> * Config 1 (1p):
>>> * use single rados bench client with 32 threads to do seq read of 20000 objects from poolA.
>>>
>>> * Config 2 (2p):
>>> * use two concurrent rados bench clients (running on same client node) with 16 threads each,
>>> one reading 10000 objects from poolA,
>>> one reading 10000 objects from poolB,
>>>
>>> So in both configs, we have 32 threads total and the number of objects read is the same.
>>> Note: in all cases, we drop the caches before doing the seq reads
>>>
>>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is about 1/3 of the bandwidth for
>>> the single client in config 1.
>>
>> How were the object written? I assume the cluster is backed by spinning
>> disks?
>>
>> I wonder if this is a disk layout issue. If the 20,000 objects are
>> written in order, they willb e roughly sequential on disk, and the 32
>> thread case will read them in order. In the 2x 10,000 case, the two
>> clients are reading two sequences of objects written at different
>> times, and the disk arms will be swinging around more.
>>
>> My guess is that if the reads were reading the objects in a random order
>> the performance would be the same... I'm not sure that rados bench does
>> that though?
>>
>> sage
>>
>>>
>>>
>>> I gathered perf counters before and after each run and looked at the difference of
>>> the before and after counters for both the 1p and 2p cases. Here are some things I noticed
>>> that are different between the two runs. Can someone take a look and let me know
>>> whether any of these differences are significant. In particular, for the
>>> throttle-msgr_dispatch_throttler ones, since I don't know the detailed definitions of these fields.
>>> Note: these are the numbers for one of the 5 osds, the other osds are similar...
>>>
>>> * The field osd/loadavg is always about 3 times higher on the 2p c
>>>
>>> some latency-related counters
>>> ------------------------------
>>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
>>> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
>>> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
>>> osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
>
> So, yep, the individual read ops are taking much longer in the
> two-client case. Naively that's pretty odd.
>
>>>
>>>
>>> and some throttle-msgr_dispatch_throttler related counters
>>> ----------------------------------------------------------
>>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
>>> throttle-msgr_dispatch_throttler-client/get_sum 1p=222877, 2p=223088, diff=211
>>> throttle-msgr_dispatch_throttler-client/put 1p=1337, 2p=1339, diff=2
>>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877, 2p=223088, diff=211
>>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134, diff=76
>>> throttle-msgr_dispatch_throttler-hb_back_server/get_sum 1p=2726, 2p=6298, diff=3572
>>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134, diff=76
>>> throttle-msgr_dispatch_throttler-hb_back_server/put_sum 1p=2726, 2p=6298, diff=3572
>>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134, diff=76
>>> throttle-msgr_dispatch_throttler-hb_front_server/get_sum 1p=2726, 2p=6298, diff=3572
>>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134, diff=76
>>> throttle-msgr_dispatch_throttler-hb_front_server/put_sum 1p=2726, 2p=6298, diff=3572
>>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252, diff=84
>>> throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896, 2p=11844, diff=3948
>>> throttle-msgr_dispatch_throttler-hbclient/put 1p=168, 2p=252, diff=84
>>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844, diff=3948
>
> IIRC these are just saying how many times the dispatch throttler was
> accessed on each messenger — nothing here is surprising, you're doing
> basically the same number of messages on the client messengers, and
> the heartbeat messengers are passing more because the test takes
> longer.
>
> I'd go with Sage's idea for what is actually causing this, or try and
> look at how the latency changes over time — if you're going to two
> pools instead of one, presumably you're doubling the amount of
> metadata that needs to be read into memory during the run? Perhaps
> that's just a significant enough effect with your settings that you're
> seeing a bunch of extra directory lookups impact your throughput more
> than expected... :/
FWIW, typically if I've seen an effect, it's been the opposite where
multiple rados bench processes are slightly faster (maybe simply related
to the client side implementation). Running collectl or iostat would
show various interval statistics that would help diagnose if this is
related to slower accesses on the disks. blktrace of course would give
a more nuanced view. Might be worth doing if there are extra metadata
accesses.
A couple of other random thoughts:
- Are any of the reads coming from buffer cache?
- Readahead not working well?
- Were the pools recreated between tests?
- If not, what were the total number of objects and PGs for each pool
(Is it possible that the per-pg directory hirearchy was deeper for the
2nd set of tests?)
- If the pools still exist, what does the following script say about them?
https://github.com/ceph/cbt/blob/master/tools/readpgdump.py
> -Greg
> --
> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-09-23 18:42 ` Mark Nelson
@ 2015-09-23 20:05 ` Deneau, Tom
2015-09-23 20:28 ` Samuel Just
2015-10-07 22:39 ` Deneau, Tom
1 sibling, 1 reply; 15+ messages in thread
From: Deneau, Tom @ 2015-09-23 20:05 UTC (permalink / raw)
To: Mark Nelson, Gregory Farnum, Sage Weil; +Cc: ceph-devel@vger.kernel.org
> -----Original Message-----
> From: Mark Nelson [mailto:mnelson@redhat.com]
> Sent: Wednesday, September 23, 2015 1:43 PM
> To: Gregory Farnum; Sage Weil
> Cc: Deneau, Tom; ceph-devel@vger.kernel.org
> Subject: Re: perf counters from a performance discrepancy
>
>
>
> On 09/23/2015 01:25 PM, Gregory Farnum wrote:
> > On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net> wrote:
> >> On Wed, 23 Sep 2015, Deneau, Tom wrote:
> >>> Hi all --
> >>>
> >>> Looking for guidance with perf counters...
> >>> I am trying to see whether the perf counters can tell me anything
> >>> about the following discrepancy
> >>>
> >>> I populate a number of 40k size objects in each of two pools, poolA
> and poolB.
> >>> Both pools cover osds on a single node, 5 osds total.
> >>>
> >>> * Config 1 (1p):
> >>> * use single rados bench client with 32 threads to do seq read
> of 20000 objects from poolA.
> >>>
> >>> * Config 2 (2p):
> >>> * use two concurrent rados bench clients (running on same
> client node) with 16 threads each,
> >>> one reading 10000 objects from poolA,
> >>> one reading 10000 objects from poolB,
> >>>
> >>> So in both configs, we have 32 threads total and the number of objects
> read is the same.
> >>> Note: in all cases, we drop the caches before doing the seq reads
> >>>
> >>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is
> >>> about 1/3 of the bandwidth for the single client in config 1.
> >>
> >> How were the object written? I assume the cluster is backed by
> >> spinning disks?
> >>
> >> I wonder if this is a disk layout issue. If the 20,000 objects are
> >> written in order, they willb e roughly sequential on disk, and the 32
> >> thread case will read them in order. In the 2x 10,000 case, the two
> >> clients are reading two sequences of objects written at different
> >> times, and the disk arms will be swinging around more.
> >>
> >> My guess is that if the reads were reading the objects in a random
> >> order the performance would be the same... I'm not sure that rados
> >> bench does that though?
> >>
> >> sage
> >>
> >>>
> >>>
> >>> I gathered perf counters before and after each run and looked at the
> >>> difference of the before and after counters for both the 1p and 2p
> >>> cases. Here are some things I noticed that are different between
> >>> the two runs. Can someone take a look and let me know whether any
> >>> of these differences are significant. In particular, for the
> throttle-msgr_dispatch_throttler ones, since I don't know the detailed
> definitions of these fields.
> >>> Note: these are the numbers for one of the 5 osds, the other osds are
> similar...
> >>>
> >>> * The field osd/loadavg is always about 3 times higher on the 2p c
> >>>
> >>> some latency-related counters
> >>> ------------------------------
> >>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> >>> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
> >>> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
> >>> osd/op_r_process_latency/sum 1p=3.48506945399276,
> >>> 2p=42.6278494550061
> >
> > So, yep, the individual read ops are taking much longer in the
> > two-client case. Naively that's pretty odd.
> >
> >>>
> >>>
> >>> and some throttle-msgr_dispatch_throttler related counters
> >>> ----------------------------------------------------------
> >>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
> >>> throttle-msgr_dispatch_throttler-client/get_sum 1p=222877,
> >>> 2p=223088, diff=211 throttle-msgr_dispatch_throttler-client/put
> >>> 1p=1337, 2p=1339, diff=2
> >>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877,
> >>> 2p=223088, diff=211
> >>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134,
> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/get_sum
> >>> 1p=2726, 2p=6298, diff=3572
> >>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134,
> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/put_sum
> >>> 1p=2726, 2p=6298, diff=3572
> >>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134,
> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/get_sum
> >>> 1p=2726, 2p=6298, diff=3572
> >>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134,
> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/put_sum
> >>> 1p=2726, 2p=6298, diff=3572
> >>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252,
> >>> diff=84 throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896,
> >>> 2p=11844, diff=3948 throttle-msgr_dispatch_throttler-hbclient/put
> >>> 1p=168, 2p=252, diff=84
> >>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844,
> >>> diff=3948
> >
> > IIRC these are just saying how many times the dispatch throttler was
> > accessed on each messenger — nothing here is surprising, you're doing
> > basically the same number of messages on the client messengers, and
> > the heartbeat messengers are passing more because the test takes
> > longer.
> >
> > I'd go with Sage's idea for what is actually causing this, or try and
> > look at how the latency changes over time — if you're going to two
> > pools instead of one, presumably you're doubling the amount of
> > metadata that needs to be read into memory during the run? Perhaps
> > that's just a significant enough effect with your settings that you're
> > seeing a bunch of extra directory lookups impact your throughput more
> > than expected... :/
>
> FWIW, typically if I've seen an effect, it's been the opposite where
> multiple rados bench processes are slightly faster (maybe simply related
> to the client side implementation). Running collectl or iostat would show
> various interval statistics that would help diagnose if this is related to
> slower accesses on the disks. blktrace of course would give a more
> nuanced view. Might be worth doing if there are extra metadata accesses.
>
> A couple of other random thoughts:
>
> - Are any of the reads coming from buffer cache?
> - Readahead not working well?
> - Were the pools recreated between tests?
> - If not, what were the total number of objects and PGs for each pool (Is
> it possible that the per-pg directory hirearchy was deeper for the 2nd set
> of tests?)
> - If the pools still exist, what does the following script say about them?
>
> https://github.com/ceph/cbt/blob/master/tools/readpgdump.py
>
>
Thanks Sage, Greg and Mark for the suggestions --
The objects in the pools were created by running two simultaneous
client rados bench write processes, one to each pool. I started with
empty osd disks. The pools both cover the same osds and since
there was a replication factor of 2, so I would have expected that not
all the primary objects in each pool would be sequential on the disk.
But when I changed the read test to do rados bench rand rather than
seq, both the 1p and 2p configs went down in bandwidth, so clearly the
disk layout had something to do with it. With random reads, 1p is now
"only" 40% faster than 2p.
Mark had mentioned that he's often seen the opposite effect, ie, more
client processes increasing the bandwidth, and we have seen the same,
which is why I started using multiple clients. In fact if I do the
same configuration tests as above but with 4M objects rather than 40K,
I see the 2p beats 1p by 30% or so. (and I've seen 4p help even more).
So there's something about smaller object sizes that gets hurt by
multiple clients vs. 1 client.
I will try to look into this with some of the low level stat tools
that Mark mentioned.
-- Tom
> > -Greg
> > --
> > To unsubscribe from this list: send the line "unsubscribe ceph-devel"
> > in the body of a message to majordomo@vger.kernel.org More majordomo
> > info at http://vger.kernel.org/majordomo-info.html
> >
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 20:05 ` Deneau, Tom
@ 2015-09-23 20:28 ` Samuel Just
2015-09-23 20:46 ` Deneau, Tom
0 siblings, 1 reply; 15+ messages in thread
From: Samuel Just @ 2015-09-23 20:28 UTC (permalink / raw)
To: Deneau, Tom
Cc: Mark Nelson, Gregory Farnum, Sage Weil,
ceph-devel@vger.kernel.org
Just to eliminate a variable, can you reproduce this on master, first
with the simple messenger, and then with the async messenger? (make
sure to switch the messengers on all daemons and clients, just put it
in the [global] section on all configs).
-Sam
On Wed, Sep 23, 2015 at 1:05 PM, Deneau, Tom <tom.deneau@amd.com> wrote:
>
>
>> -----Original Message-----
>> From: Mark Nelson [mailto:mnelson@redhat.com]
>> Sent: Wednesday, September 23, 2015 1:43 PM
>> To: Gregory Farnum; Sage Weil
>> Cc: Deneau, Tom; ceph-devel@vger.kernel.org
>> Subject: Re: perf counters from a performance discrepancy
>>
>>
>>
>> On 09/23/2015 01:25 PM, Gregory Farnum wrote:
>> > On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net> wrote:
>> >> On Wed, 23 Sep 2015, Deneau, Tom wrote:
>> >>> Hi all --
>> >>>
>> >>> Looking for guidance with perf counters...
>> >>> I am trying to see whether the perf counters can tell me anything
>> >>> about the following discrepancy
>> >>>
>> >>> I populate a number of 40k size objects in each of two pools, poolA
>> and poolB.
>> >>> Both pools cover osds on a single node, 5 osds total.
>> >>>
>> >>> * Config 1 (1p):
>> >>> * use single rados bench client with 32 threads to do seq read
>> of 20000 objects from poolA.
>> >>>
>> >>> * Config 2 (2p):
>> >>> * use two concurrent rados bench clients (running on same
>> client node) with 16 threads each,
>> >>> one reading 10000 objects from poolA,
>> >>> one reading 10000 objects from poolB,
>> >>>
>> >>> So in both configs, we have 32 threads total and the number of objects
>> read is the same.
>> >>> Note: in all cases, we drop the caches before doing the seq reads
>> >>>
>> >>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is
>> >>> about 1/3 of the bandwidth for the single client in config 1.
>> >>
>> >> How were the object written? I assume the cluster is backed by
>> >> spinning disks?
>> >>
>> >> I wonder if this is a disk layout issue. If the 20,000 objects are
>> >> written in order, they willb e roughly sequential on disk, and the 32
>> >> thread case will read them in order. In the 2x 10,000 case, the two
>> >> clients are reading two sequences of objects written at different
>> >> times, and the disk arms will be swinging around more.
>> >>
>> >> My guess is that if the reads were reading the objects in a random
>> >> order the performance would be the same... I'm not sure that rados
>> >> bench does that though?
>> >>
>> >> sage
>> >>
>> >>>
>> >>>
>> >>> I gathered perf counters before and after each run and looked at the
>> >>> difference of the before and after counters for both the 1p and 2p
>> >>> cases. Here are some things I noticed that are different between
>> >>> the two runs. Can someone take a look and let me know whether any
>> >>> of these differences are significant. In particular, for the
>> throttle-msgr_dispatch_throttler ones, since I don't know the detailed
>> definitions of these fields.
>> >>> Note: these are the numbers for one of the 5 osds, the other osds are
>> similar...
>> >>>
>> >>> * The field osd/loadavg is always about 3 times higher on the 2p c
>> >>>
>> >>> some latency-related counters
>> >>> ------------------------------
>> >>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
>> >>> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
>> >>> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
>> >>> osd/op_r_process_latency/sum 1p=3.48506945399276,
>> >>> 2p=42.6278494550061
>> >
>> > So, yep, the individual read ops are taking much longer in the
>> > two-client case. Naively that's pretty odd.
>> >
>> >>>
>> >>>
>> >>> and some throttle-msgr_dispatch_throttler related counters
>> >>> ----------------------------------------------------------
>> >>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339, diff=2
>> >>> throttle-msgr_dispatch_throttler-client/get_sum 1p=222877,
>> >>> 2p=223088, diff=211 throttle-msgr_dispatch_throttler-client/put
>> >>> 1p=1337, 2p=1339, diff=2
>> >>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877,
>> >>> 2p=223088, diff=211
>> >>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134,
>> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/get_sum
>> >>> 1p=2726, 2p=6298, diff=3572
>> >>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134,
>> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/put_sum
>> >>> 1p=2726, 2p=6298, diff=3572
>> >>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58, 2p=134,
>> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/get_sum
>> >>> 1p=2726, 2p=6298, diff=3572
>> >>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58, 2p=134,
>> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/put_sum
>> >>> 1p=2726, 2p=6298, diff=3572
>> >>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252,
>> >>> diff=84 throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896,
>> >>> 2p=11844, diff=3948 throttle-msgr_dispatch_throttler-hbclient/put
>> >>> 1p=168, 2p=252, diff=84
>> >>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896, 2p=11844,
>> >>> diff=3948
>> >
>> > IIRC these are just saying how many times the dispatch throttler was
>> > accessed on each messenger — nothing here is surprising, you're doing
>> > basically the same number of messages on the client messengers, and
>> > the heartbeat messengers are passing more because the test takes
>> > longer.
>> >
>> > I'd go with Sage's idea for what is actually causing this, or try and
>> > look at how the latency changes over time — if you're going to two
>> > pools instead of one, presumably you're doubling the amount of
>> > metadata that needs to be read into memory during the run? Perhaps
>> > that's just a significant enough effect with your settings that you're
>> > seeing a bunch of extra directory lookups impact your throughput more
>> > than expected... :/
>>
>> FWIW, typically if I've seen an effect, it's been the opposite where
>> multiple rados bench processes are slightly faster (maybe simply related
>> to the client side implementation). Running collectl or iostat would show
>> various interval statistics that would help diagnose if this is related to
>> slower accesses on the disks. blktrace of course would give a more
>> nuanced view. Might be worth doing if there are extra metadata accesses.
>>
>> A couple of other random thoughts:
>>
>> - Are any of the reads coming from buffer cache?
>> - Readahead not working well?
>> - Were the pools recreated between tests?
>> - If not, what were the total number of objects and PGs for each pool (Is
>> it possible that the per-pg directory hirearchy was deeper for the 2nd set
>> of tests?)
>> - If the pools still exist, what does the following script say about them?
>>
>> https://github.com/ceph/cbt/blob/master/tools/readpgdump.py
>>
>>
>
> Thanks Sage, Greg and Mark for the suggestions --
>
> The objects in the pools were created by running two simultaneous
> client rados bench write processes, one to each pool. I started with
> empty osd disks. The pools both cover the same osds and since
> there was a replication factor of 2, so I would have expected that not
> all the primary objects in each pool would be sequential on the disk.
>
> But when I changed the read test to do rados bench rand rather than
> seq, both the 1p and 2p configs went down in bandwidth, so clearly the
> disk layout had something to do with it. With random reads, 1p is now
> "only" 40% faster than 2p.
>
> Mark had mentioned that he's often seen the opposite effect, ie, more
> client processes increasing the bandwidth, and we have seen the same,
> which is why I started using multiple clients. In fact if I do the
> same configuration tests as above but with 4M objects rather than 40K,
> I see the 2p beats 1p by 30% or so. (and I've seen 4p help even more).
>
> So there's something about smaller object sizes that gets hurt by
> multiple clients vs. 1 client.
>
> I will try to look into this with some of the low level stat tools
> that Mark mentioned.
>
> -- Tom
>
>> > -Greg
>> > --
>> > To unsubscribe from this list: send the line "unsubscribe ceph-devel"
>> > in the body of a message to majordomo@vger.kernel.org More majordomo
>> > info at http://vger.kernel.org/majordomo-info.html
>> >
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 16:33 perf counters from a performance discrepancy Deneau, Tom
2015-09-23 18:19 ` Sage Weil
@ 2015-09-23 20:39 ` Gregory Farnum
2015-09-23 20:51 ` Deneau, Tom
1 sibling, 1 reply; 15+ messages in thread
From: Gregory Farnum @ 2015-09-23 20:39 UTC (permalink / raw)
To: Deneau, Tom; +Cc: ceph-devel@vger.kernel.org
On Wed, Sep 23, 2015 at 9:33 AM, Deneau, Tom <tom.deneau@amd.com> wrote:
> Hi all --
>
> Looking for guidance with perf counters...
> I am trying to see whether the perf counters can tell me anything about the following discrepancy
>
> I populate a number of 40k size objects in each of two pools, poolA and poolB.
> Both pools cover osds on a single node, 5 osds total.
>
> * Config 1 (1p):
> * use single rados bench client with 32 threads to do seq read of 20000 objects from poolA.
>
> * Config 2 (2p):
> * use two concurrent rados bench clients (running on same client node) with 16 threads each,
> one reading 10000 objects from poolA,
> one reading 10000 objects from poolB,
>
> So in both configs, we have 32 threads total and the number of objects read is the same.
> Note: in all cases, we drop the caches before doing the seq reads
>
> The combined bandwidth (MB/sec) for the 2 clients in config 2 is about 1/3 of the bandwidth for
> the single client in config 1.
>
>
> I gathered perf counters before and after each run and looked at the difference of
> the before and after counters for both the 1p and 2p cases. Here are some things I noticed
> that are different between the two runs. Can someone take a look and let me know
> whether any of these differences are significant. In particular, for the
> throttle-msgr_dispatch_throttler ones, since I don't know the detailed definitions of these fields.
> Note: these are the numbers for one of the 5 osds, the other osds are similar...
>
> * The field osd/loadavg is always about 3 times higher on the 2p c
>
> some latency-related counters
> ------------------------------
> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
> osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
> osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
So if you've got 20k objects and 5 OSDs then each OSD is getting ~4k
reads during this test. Which if I'm reading these properly means
OSD-side latency is something like 1.5 milliseconds for the single
client and...144 milliseconds for the two-client case! You might try
dumping some of the historic ops out of the admin socket and seeing
where the time is getting spent (is it all on disk accesses?). And
trying to reproduce something like this workload on your disks without
Ceph involved.
-Greg
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-09-23 20:28 ` Samuel Just
@ 2015-09-23 20:46 ` Deneau, Tom
0 siblings, 0 replies; 15+ messages in thread
From: Deneau, Tom @ 2015-09-23 20:46 UTC (permalink / raw)
To: Samuel Just
Cc: Mark Nelson, Gregory Farnum, Sage Weil,
ceph-devel@vger.kernel.org
I will be out of office for a week but will put this on the list of things to try when I get back.
-- Tom
> -----Original Message-----
> From: Samuel Just [mailto:sjust@redhat.com]
> Sent: Wednesday, September 23, 2015 3:28 PM
> To: Deneau, Tom
> Cc: Mark Nelson; Gregory Farnum; Sage Weil; ceph-devel@vger.kernel.org
> Subject: Re: perf counters from a performance discrepancy
>
> Just to eliminate a variable, can you reproduce this on master, first with
> the simple messenger, and then with the async messenger? (make sure to
> switch the messengers on all daemons and clients, just put it in the
> [global] section on all configs).
> -Sam
>
> On Wed, Sep 23, 2015 at 1:05 PM, Deneau, Tom <tom.deneau@amd.com> wrote:
> >
> >
> >> -----Original Message-----
> >> From: Mark Nelson [mailto:mnelson@redhat.com]
> >> Sent: Wednesday, September 23, 2015 1:43 PM
> >> To: Gregory Farnum; Sage Weil
> >> Cc: Deneau, Tom; ceph-devel@vger.kernel.org
> >> Subject: Re: perf counters from a performance discrepancy
> >>
> >>
> >>
> >> On 09/23/2015 01:25 PM, Gregory Farnum wrote:
> >> > On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net>
> wrote:
> >> >> On Wed, 23 Sep 2015, Deneau, Tom wrote:
> >> >>> Hi all --
> >> >>>
> >> >>> Looking for guidance with perf counters...
> >> >>> I am trying to see whether the perf counters can tell me anything
> >> >>> about the following discrepancy
> >> >>>
> >> >>> I populate a number of 40k size objects in each of two pools,
> >> >>> poolA
> >> and poolB.
> >> >>> Both pools cover osds on a single node, 5 osds total.
> >> >>>
> >> >>> * Config 1 (1p):
> >> >>> * use single rados bench client with 32 threads to do seq
> >> >>> read
> >> of 20000 objects from poolA.
> >> >>>
> >> >>> * Config 2 (2p):
> >> >>> * use two concurrent rados bench clients (running on same
> >> client node) with 16 threads each,
> >> >>> one reading 10000 objects from poolA,
> >> >>> one reading 10000 objects from poolB,
> >> >>>
> >> >>> So in both configs, we have 32 threads total and the number of
> >> >>> objects
> >> read is the same.
> >> >>> Note: in all cases, we drop the caches before doing the seq reads
> >> >>>
> >> >>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is
> >> >>> about 1/3 of the bandwidth for the single client in config 1.
> >> >>
> >> >> How were the object written? I assume the cluster is backed by
> >> >> spinning disks?
> >> >>
> >> >> I wonder if this is a disk layout issue. If the 20,000 objects
> >> >> are written in order, they willb e roughly sequential on disk, and
> >> >> the 32 thread case will read them in order. In the 2x 10,000
> >> >> case, the two clients are reading two sequences of objects written
> >> >> at different times, and the disk arms will be swinging around more.
> >> >>
> >> >> My guess is that if the reads were reading the objects in a random
> >> >> order the performance would be the same... I'm not sure that rados
> >> >> bench does that though?
> >> >>
> >> >> sage
> >> >>
> >> >>>
> >> >>>
> >> >>> I gathered perf counters before and after each run and looked at
> >> >>> the difference of the before and after counters for both the 1p
> >> >>> and 2p cases. Here are some things I noticed that are different
> >> >>> between the two runs. Can someone take a look and let me know
> >> >>> whether any of these differences are significant. In particular,
> >> >>> for the
> >> throttle-msgr_dispatch_throttler ones, since I don't know the
> >> detailed definitions of these fields.
> >> >>> Note: these are the numbers for one of the 5 osds, the other osds
> >> >>> are
> >> similar...
> >> >>>
> >> >>> * The field osd/loadavg is always about 3 times higher on the 2p
> >> >>> c
> >> >>>
> >> >>> some latency-related counters
> >> >>> ------------------------------
> >> >>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> >> >>> osd/op_process_latency/sum 1p=3.48506945394911,
> >> >>> 2p=42.6278494549915 osd/op_r_latency/sum 1p=6.2480111719924,
> >> >>> 2p=579.722513079003 osd/op_r_process_latency/sum
> >> >>> 1p=3.48506945399276,
> >> >>> 2p=42.6278494550061
> >> >
> >> > So, yep, the individual read ops are taking much longer in the
> >> > two-client case. Naively that's pretty odd.
> >> >
> >> >>>
> >> >>>
> >> >>> and some throttle-msgr_dispatch_throttler related counters
> >> >>> ----------------------------------------------------------
> >> >>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339,
> >> >>> diff=2 throttle-msgr_dispatch_throttler-client/get_sum 1p=222877,
> >> >>> 2p=223088, diff=211 throttle-msgr_dispatch_throttler-client/put
> >> >>> 1p=1337, 2p=1339, diff=2
> >> >>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877,
> >> >>> 2p=223088, diff=211
> >> >>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58,
> >> >>> 2p=134,
> >> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/get_sum
> >> >>> 1p=2726, 2p=6298, diff=3572
> >> >>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58,
> >> >>> 2p=134,
> >> >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/put_sum
> >> >>> 1p=2726, 2p=6298, diff=3572
> >> >>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58,
> >> >>> 2p=134,
> >> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/get_sum
> >> >>> 1p=2726, 2p=6298, diff=3572
> >> >>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58,
> >> >>> 2p=134,
> >> >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/put_sum
> >> >>> 1p=2726, 2p=6298, diff=3572
> >> >>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252,
> >> >>> diff=84 throttle-msgr_dispatch_throttler-hbclient/get_sum
> >> >>> 1p=7896, 2p=11844, diff=3948
> >> >>> throttle-msgr_dispatch_throttler-hbclient/put
> >> >>> 1p=168, 2p=252, diff=84
> >> >>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896,
> >> >>> 2p=11844,
> >> >>> diff=3948
> >> >
> >> > IIRC these are just saying how many times the dispatch throttler
> >> > was accessed on each messenger — nothing here is surprising, you're
> >> > doing basically the same number of messages on the client
> >> > messengers, and the heartbeat messengers are passing more because
> >> > the test takes longer.
> >> >
> >> > I'd go with Sage's idea for what is actually causing this, or try
> >> > and look at how the latency changes over time — if you're going to
> >> > two pools instead of one, presumably you're doubling the amount of
> >> > metadata that needs to be read into memory during the run? Perhaps
> >> > that's just a significant enough effect with your settings that
> >> > you're seeing a bunch of extra directory lookups impact your
> >> > throughput more than expected... :/
> >>
> >> FWIW, typically if I've seen an effect, it's been the opposite where
> >> multiple rados bench processes are slightly faster (maybe simply
> >> related to the client side implementation). Running collectl or
> >> iostat would show various interval statistics that would help
> >> diagnose if this is related to slower accesses on the disks.
> >> blktrace of course would give a more nuanced view. Might be worth
> doing if there are extra metadata accesses.
> >>
> >> A couple of other random thoughts:
> >>
> >> - Are any of the reads coming from buffer cache?
> >> - Readahead not working well?
> >> - Were the pools recreated between tests?
> >> - If not, what were the total number of objects and PGs for each pool
> >> (Is it possible that the per-pg directory hirearchy was deeper for
> >> the 2nd set of tests?)
> >> - If the pools still exist, what does the following script say about
> them?
> >>
> >> https://github.com/ceph/cbt/blob/master/tools/readpgdump.py
> >>
> >>
> >
> > Thanks Sage, Greg and Mark for the suggestions --
> >
> > The objects in the pools were created by running two simultaneous
> > client rados bench write processes, one to each pool. I started with
> > empty osd disks. The pools both cover the same osds and since there
> > was a replication factor of 2, so I would have expected that not all
> > the primary objects in each pool would be sequential on the disk.
> >
> > But when I changed the read test to do rados bench rand rather than
> > seq, both the 1p and 2p configs went down in bandwidth, so clearly the
> > disk layout had something to do with it. With random reads, 1p is now
> > "only" 40% faster than 2p.
> >
> > Mark had mentioned that he's often seen the opposite effect, ie, more
> > client processes increasing the bandwidth, and we have seen the same,
> > which is why I started using multiple clients. In fact if I do the
> > same configuration tests as above but with 4M objects rather than 40K,
> > I see the 2p beats 1p by 30% or so. (and I've seen 4p help even more).
> >
> > So there's something about smaller object sizes that gets hurt by
> > multiple clients vs. 1 client.
> >
> > I will try to look into this with some of the low level stat tools
> > that Mark mentioned.
> >
> > -- Tom
> >
> >> > -Greg
> >> > --
> >> > To unsubscribe from this list: send the line "unsubscribe ceph-devel"
> >> > in the body of a message to majordomo@vger.kernel.org More
> >> > majordomo info at http://vger.kernel.org/majordomo-info.html
> >> >
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-09-23 20:39 ` Gregory Farnum
@ 2015-09-23 20:51 ` Deneau, Tom
2015-09-23 20:52 ` Gregory Farnum
0 siblings, 1 reply; 15+ messages in thread
From: Deneau, Tom @ 2015-09-23 20:51 UTC (permalink / raw)
To: Gregory Farnum; +Cc: ceph-devel@vger.kernel.org
> -----Original Message-----
> From: Gregory Farnum [mailto:gfarnum@redhat.com]
> Sent: Wednesday, September 23, 2015 3:39 PM
> To: Deneau, Tom
> Cc: ceph-devel@vger.kernel.org
> Subject: Re: perf counters from a performance discrepancy
>
> On Wed, Sep 23, 2015 at 9:33 AM, Deneau, Tom <tom.deneau@amd.com> wrote:
> > Hi all --
> >
> > Looking for guidance with perf counters...
> > I am trying to see whether the perf counters can tell me anything
> > about the following discrepancy
> >
> > I populate a number of 40k size objects in each of two pools, poolA and
> poolB.
> > Both pools cover osds on a single node, 5 osds total.
> >
> > * Config 1 (1p):
> > * use single rados bench client with 32 threads to do seq read of
> 20000 objects from poolA.
> >
> > * Config 2 (2p):
> > * use two concurrent rados bench clients (running on same client
> node) with 16 threads each,
> > one reading 10000 objects from poolA,
> > one reading 10000 objects from poolB,
> >
> > So in both configs, we have 32 threads total and the number of objects
> read is the same.
> > Note: in all cases, we drop the caches before doing the seq reads
> >
> > The combined bandwidth (MB/sec) for the 2 clients in config 2 is about
> > 1/3 of the bandwidth for the single client in config 1.
> >
> >
> > I gathered perf counters before and after each run and looked at the
> > difference of the before and after counters for both the 1p and 2p
> > cases. Here are some things I noticed that are different between the
> > two runs. Can someone take a look and let me know whether any of
> > these differences are significant. In particular, for the throttle-
> msgr_dispatch_throttler ones, since I don't know the detailed definitions
> of these fields.
> > Note: these are the numbers for one of the 5 osds, the other osds are
> similar...
> >
> > * The field osd/loadavg is always about 3 times higher on the 2p c
> >
> > some latency-related counters
> > ------------------------------
> > osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> > osd/op_process_latency/sum 1p=3.48506945394911, 2p=42.6278494549915
> > osd/op_r_latency/sum 1p=6.2480111719924, 2p=579.722513079003
> > osd/op_r_process_latency/sum 1p=3.48506945399276, 2p=42.6278494550061
>
> So if you've got 20k objects and 5 OSDs then each OSD is getting ~4k reads
> during this test. Which if I'm reading these properly means OSD-side
> latency is something like 1.5 milliseconds for the single client and...144
> milliseconds for the two-client case! You might try dumping some of the
> historic ops out of the admin socket and seeing where the time is getting
> spent (is it all on disk accesses?). And trying to reproduce something
> like this workload on your disks without Ceph involved.
> -Greg
Greg --
Not sure how much it matters but in looking at the pools more closely I
was getting mixed up with an earlier experiment with pools that just used 5 osds.
The pools for this example actually distributed across 15 osds on 3 nodes.
What is the recommended command for dumping historic ops out of the admin socket?
-- Tom
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: perf counters from a performance discrepancy
2015-09-23 20:51 ` Deneau, Tom
@ 2015-09-23 20:52 ` Gregory Farnum
0 siblings, 0 replies; 15+ messages in thread
From: Gregory Farnum @ 2015-09-23 20:52 UTC (permalink / raw)
To: Deneau, Tom; +Cc: ceph-devel@vger.kernel.org
On Wed, Sep 23, 2015 at 1:51 PM, Deneau, Tom <tom.deneau@amd.com> wrote:
>
>
>> -----Original Message-----
>> From: Gregory Farnum [mailto:gfarnum@redhat.com]
>> So if you've got 20k objects and 5 OSDs then each OSD is getting ~4k reads
>> during this test. Which if I'm reading these properly means OSD-side
>> latency is something like 1.5 milliseconds for the single client and...144
>> milliseconds for the two-client case! You might try dumping some of the
>> historic ops out of the admin socket and seeing where the time is getting
>> spent (is it all on disk accesses?). And trying to reproduce something
>> like this workload on your disks without Ceph involved.
>> -Greg
>
> Greg --
>
> Not sure how much it matters but in looking at the pools more closely I
> was getting mixed up with an earlier experiment with pools that just used 5 osds.
> The pools for this example actually distributed across 15 osds on 3 nodes.
Okay, so this is running on hard drives, not SSDs. The speed
differential is a lot more plausibly in the drive/filesystem/total
layout in that case, then...
>
> What is the recommended command for dumping historic ops out of the admin socket?
"ceph daemon osd.<N> dump_historic_ops", I think. "ceph daemon osd.<N>
help" will include it in the list, though.
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-09-23 18:42 ` Mark Nelson
2015-09-23 20:05 ` Deneau, Tom
@ 2015-10-07 22:39 ` Deneau, Tom
2015-10-08 2:47 ` Sage Weil
1 sibling, 1 reply; 15+ messages in thread
From: Deneau, Tom @ 2015-10-07 22:39 UTC (permalink / raw)
To: Mark Nelson, Gregory Farnum, Sage Weil; +Cc: ceph-devel@vger.kernel.org
> -----Original Message-----
> From: Deneau, Tom
> Sent: Wednesday, September 23, 2015 3:05 PM
> To: 'Mark Nelson'; Gregory Farnum; Sage Weil
> Cc: ceph-devel@vger.kernel.org
> Subject: RE: perf counters from a performance discrepancy
>
>
>
> > -----Original Message-----
> > From: Mark Nelson [mailto:mnelson@redhat.com]
> > Sent: Wednesday, September 23, 2015 1:43 PM
> > To: Gregory Farnum; Sage Weil
> > Cc: Deneau, Tom; ceph-devel@vger.kernel.org
> > Subject: Re: perf counters from a performance discrepancy
> >
> >
> >
> > On 09/23/2015 01:25 PM, Gregory Farnum wrote:
> > > On Wed, Sep 23, 2015 at 11:19 AM, Sage Weil <sage@newdream.net> wrote:
> > >> On Wed, 23 Sep 2015, Deneau, Tom wrote:
> > >>> Hi all --
> > >>>
> > >>> Looking for guidance with perf counters...
> > >>> I am trying to see whether the perf counters can tell me anything
> > >>> about the following discrepancy
> > >>>
> > >>> I populate a number of 40k size objects in each of two pools,
> > >>> poolA
> > and poolB.
> > >>> Both pools cover osds on a single node, 5 osds total.
> > >>>
> > >>> * Config 1 (1p):
> > >>> * use single rados bench client with 32 threads to do seq
> > >>> read
> > of 20000 objects from poolA.
> > >>>
> > >>> * Config 2 (2p):
> > >>> * use two concurrent rados bench clients (running on same
> > client node) with 16 threads each,
> > >>> one reading 10000 objects from poolA,
> > >>> one reading 10000 objects from poolB,
> > >>>
> > >>> So in both configs, we have 32 threads total and the number of
> > >>> objects
> > read is the same.
> > >>> Note: in all cases, we drop the caches before doing the seq reads
> > >>>
> > >>> The combined bandwidth (MB/sec) for the 2 clients in config 2 is
> > >>> about 1/3 of the bandwidth for the single client in config 1.
> > >>
> > >> How were the object written? I assume the cluster is backed by
> > >> spinning disks?
> > >>
> > >> I wonder if this is a disk layout issue. If the 20,000 objects are
> > >> written in order, they willb e roughly sequential on disk, and the
> > >> 32 thread case will read them in order. In the 2x 10,000 case, the
> > >> two clients are reading two sequences of objects written at
> > >> different times, and the disk arms will be swinging around more.
> > >>
> > >> My guess is that if the reads were reading the objects in a random
> > >> order the performance would be the same... I'm not sure that rados
> > >> bench does that though?
> > >>
> > >> sage
> > >>
> > >>>
> > >>>
> > >>> I gathered perf counters before and after each run and looked at
> > >>> the difference of the before and after counters for both the 1p
> > >>> and 2p cases. Here are some things I noticed that are different
> > >>> between the two runs. Can someone take a look and let me know
> > >>> whether any of these differences are significant. In particular,
> > >>> for the
> > throttle-msgr_dispatch_throttler ones, since I don't know the detailed
> > definitions of these fields.
> > >>> Note: these are the numbers for one of the 5 osds, the other osds
> > >>> are
> > similar...
> > >>>
> > >>> * The field osd/loadavg is always about 3 times higher on the 2p c
> > >>>
> > >>> some latency-related counters
> > >>> ------------------------------
> > >>> osd/op_latency/sum 1p=6.24801117205061, 2p=579.722513078945
> > >>> osd/op_process_latency/sum 1p=3.48506945394911,
> > >>> 2p=42.6278494549915 osd/op_r_latency/sum 1p=6.2480111719924,
> > >>> 2p=579.722513079003 osd/op_r_process_latency/sum
> > >>> 1p=3.48506945399276,
> > >>> 2p=42.6278494550061
> > >
> > > So, yep, the individual read ops are taking much longer in the
> > > two-client case. Naively that's pretty odd.
> > >
> > >>>
> > >>>
> > >>> and some throttle-msgr_dispatch_throttler related counters
> > >>> ----------------------------------------------------------
> > >>> throttle-msgr_dispatch_throttler-client/get 1p=1337, 2p=1339,
> > >>> diff=2 throttle-msgr_dispatch_throttler-client/get_sum 1p=222877,
> > >>> 2p=223088, diff=211 throttle-msgr_dispatch_throttler-client/put
> > >>> 1p=1337, 2p=1339, diff=2
> > >>> throttle-msgr_dispatch_throttler-client/put_sum 1p=222877,
> > >>> 2p=223088, diff=211
> > >>> throttle-msgr_dispatch_throttler-hb_back_server/get 1p=58, 2p=134,
> > >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/get_sum
> > >>> 1p=2726, 2p=6298, diff=3572
> > >>> throttle-msgr_dispatch_throttler-hb_back_server/put 1p=58, 2p=134,
> > >>> diff=76 throttle-msgr_dispatch_throttler-hb_back_server/put_sum
> > >>> 1p=2726, 2p=6298, diff=3572
> > >>> throttle-msgr_dispatch_throttler-hb_front_server/get 1p=58,
> > >>> 2p=134,
> > >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/get_sum
> > >>> 1p=2726, 2p=6298, diff=3572
> > >>> throttle-msgr_dispatch_throttler-hb_front_server/put 1p=58,
> > >>> 2p=134,
> > >>> diff=76 throttle-msgr_dispatch_throttler-hb_front_server/put_sum
> > >>> 1p=2726, 2p=6298, diff=3572
> > >>> throttle-msgr_dispatch_throttler-hbclient/get 1p=168, 2p=252,
> > >>> diff=84 throttle-msgr_dispatch_throttler-hbclient/get_sum 1p=7896,
> > >>> 2p=11844, diff=3948 throttle-msgr_dispatch_throttler-hbclient/put
> > >>> 1p=168, 2p=252, diff=84
> > >>> throttle-msgr_dispatch_throttler-hbclient/put_sum 1p=7896,
> > >>> 2p=11844,
> > >>> diff=3948
> > >
> > > IIRC these are just saying how many times the dispatch throttler was
> > > accessed on each messenger — nothing here is surprising, you're
> > > doing basically the same number of messages on the client
> > > messengers, and the heartbeat messengers are passing more because
> > > the test takes longer.
> > >
> > > I'd go with Sage's idea for what is actually causing this, or try
> > > and look at how the latency changes over time — if you're going to
> > > two pools instead of one, presumably you're doubling the amount of
> > > metadata that needs to be read into memory during the run? Perhaps
> > > that's just a significant enough effect with your settings that
> > > you're seeing a bunch of extra directory lookups impact your
> > > throughput more than expected... :/
> >
> > FWIW, typically if I've seen an effect, it's been the opposite where
> > multiple rados bench processes are slightly faster (maybe simply
> > related to the client side implementation). Running collectl or
> > iostat would show various interval statistics that would help diagnose
> > if this is related to slower accesses on the disks. blktrace of
> > course would give a more nuanced view. Might be worth doing if there
> are extra metadata accesses.
> >
> > A couple of other random thoughts:
> >
> > - Are any of the reads coming from buffer cache?
> > - Readahead not working well?
> > - Were the pools recreated between tests?
> > - If not, what were the total number of objects and PGs for each pool
> > (Is it possible that the per-pg directory hirearchy was deeper for the
> > 2nd set of tests?)
> > - If the pools still exist, what does the following script say about
> them?
> >
> > https://github.com/ceph/cbt/blob/master/tools/readpgdump.py
> >
> >
>
> Thanks Sage, Greg and Mark for the suggestions --
>
> The objects in the pools were created by running two simultaneous client
> rados bench write processes, one to each pool. I started with empty osd
> disks. The pools both cover the same osds and since there was a
> replication factor of 2, so I would have expected that not all the primary
> objects in each pool would be sequential on the disk.
>
> But when I changed the read test to do rados bench rand rather than seq,
> both the 1p and 2p configs went down in bandwidth, so clearly the disk
> layout had something to do with it. With random reads, 1p is now "only"
> 40% faster than 2p.
>
> Mark had mentioned that he's often seen the opposite effect, ie, more
> client processes increasing the bandwidth, and we have seen the same,
> which is why I started using multiple clients. In fact if I do the same
> configuration tests as above but with 4M objects rather than 40K, I see
> the 2p beats 1p by 30% or so. (and I've seen 4p help even more).
>
> So there's something about smaller object sizes that gets hurt by multiple
> clients vs. 1 client.
>
> I will try to look into this with some of the low level stat tools that
> Mark mentioned.
>
> -- Tom
>
> > > -Greg
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe ceph-devel"
> > > in the body of a message to majordomo@vger.kernel.org More majordomo
> > > info at http://vger.kernel.org/majordomo-info.html
> > >
I finally got around to looking at the dump_historic_ops output for the 1-client and 2-client cases.
As you recall these are all read-ops. so the events in the dump are
initiated
reached_pg
started
done
The pattern I see for most of the slow ops recorded in the dump is:
* In the 1-client case the typical slow op has duration between 50-65 ms
and usually most of this is the interval between reached_pg and started.
* In the 2-client case the typical slow op has duration between 95-120 ms
and again usually most of this is the interval between reached_pg and started.
Could someone describe what the interval between reached_pg and started means?
I did see this earlier mail thread on the definition of the events, but
maybe this discussion only applies to writes (or else things have changed for v9.0.3)
https://www.mail-archive.com/ceph-users@lists.ceph.com/msg12783.html
-- Tom
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-10-07 22:39 ` Deneau, Tom
@ 2015-10-08 2:47 ` Sage Weil
2015-10-08 15:49 ` Deneau, Tom
0 siblings, 1 reply; 15+ messages in thread
From: Sage Weil @ 2015-10-08 2:47 UTC (permalink / raw)
To: Deneau, Tom; +Cc: Mark Nelson, Gregory Farnum, ceph-devel@vger.kernel.org
> I finally got around to looking at the dump_historic_ops output for the
> 1-client and 2-client cases.
> As you recall these are all read-ops. so the events in the dump are
> initiated
> reached_pg
> started
> done
>
> The pattern I see for most of the slow ops recorded in the dump is:
>
> * In the 1-client case the typical slow op has duration between 50-65 ms
> and usually most of this is the interval between reached_pg and started.
>
> * In the 2-client case the typical slow op has duration between 95-120 ms
> and again usually most of this is the interval between reached_pg
> and started.
>
> Could someone describe what the interval between reached_pg and started
> means?
I think the slow part is probably find_object_context() (although to be
fair tons of stuff happens here, see do_op()). You could test this
theory or otherwise narrow this down with additional event
markers lke
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index d6f3084..6faccc2 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -1691,10 +1691,12 @@ void ReplicatedPG::do_op(OpRequestRef& op)
return;
}
+ op->mark_event("about to find");
int r = find_object_context(
oid, &obc, can_create,
m->has_flag(CEPH_OSD_FLAG_MAP_SNAP_CLONE),
&missing_oid);
+ op->mark_event("found");
if (r == -EAGAIN) {
// If we're not the primary of this OSD, and we have
sage
^ permalink raw reply related [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-10-08 2:47 ` Sage Weil
@ 2015-10-08 15:49 ` Deneau, Tom
2015-10-08 15:55 ` Sage Weil
0 siblings, 1 reply; 15+ messages in thread
From: Deneau, Tom @ 2015-10-08 15:49 UTC (permalink / raw)
To: Sage Weil; +Cc: Mark Nelson, Gregory Farnum, ceph-devel@vger.kernel.org
> -----Original Message-----
> From: Sage Weil [mailto:sweil@redhat.com]
> Sent: Wednesday, October 07, 2015 9:48 PM
> To: Deneau, Tom
> Cc: Mark Nelson; Gregory Farnum; ceph-devel@vger.kernel.org
> Subject: RE: perf counters from a performance discrepancy
>
> > I finally got around to looking at the dump_historic_ops output for
> > the 1-client and 2-client cases.
> > As you recall these are all read-ops. so the events in the dump are
> > initiated
> > reached_pg
> > started
> > done
> >
> > The pattern I see for most of the slow ops recorded in the dump is:
> >
> > * In the 1-client case the typical slow op has duration between 50-65
> ms
> > and usually most of this is the interval between reached_pg and
> started.
> >
> > * In the 2-client case the typical slow op has duration between 95-
> 120 ms
> > and again usually most of this is the interval between reached_pg
> > and started.
> >
> > Could someone describe what the interval between reached_pg and
> > started means?
>
> I think the slow part is probably find_object_context() (although to be
> fair tons of stuff happens here, see do_op()). You could test this theory
> or otherwise narrow this down with additional event markers lke
>
> diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index
> d6f3084..6faccc2 100644
> --- a/src/osd/ReplicatedPG.cc
> +++ b/src/osd/ReplicatedPG.cc
> @@ -1691,10 +1691,12 @@ void ReplicatedPG::do_op(OpRequestRef& op)
> return;
> }
>
> + op->mark_event("about to find");
> int r = find_object_context(
> oid, &obc, can_create,
> m->has_flag(CEPH_OSD_FLAG_MAP_SNAP_CLONE),
> &missing_oid);
> + op->mark_event("found");
>
> if (r == -EAGAIN) {
> // If we're not the primary of this OSD, and we have
>
>
> sage
Sage --
Is it likely that find_object_context would take longer when there are two clients
each using their own pool (compared to one client using one pool)?
And would two clients using the same pool spend less time in find_object_context?
-- Tom
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-10-08 15:49 ` Deneau, Tom
@ 2015-10-08 15:55 ` Sage Weil
2015-10-08 17:58 ` Somnath Roy
0 siblings, 1 reply; 15+ messages in thread
From: Sage Weil @ 2015-10-08 15:55 UTC (permalink / raw)
To: Deneau, Tom; +Cc: Mark Nelson, Gregory Farnum, ceph-devel@vger.kernel.org
On Thu, 8 Oct 2015, Deneau, Tom wrote:
> > -----Original Message-----
> > From: Sage Weil [mailto:sweil@redhat.com]
> > Sent: Wednesday, October 07, 2015 9:48 PM
> > To: Deneau, Tom
> > Cc: Mark Nelson; Gregory Farnum; ceph-devel@vger.kernel.org
> > Subject: RE: perf counters from a performance discrepancy
> >
> > > I finally got around to looking at the dump_historic_ops output for
> > > the 1-client and 2-client cases.
> > > As you recall these are all read-ops. so the events in the dump are
> > > initiated
> > > reached_pg
> > > started
> > > done
> > >
> > > The pattern I see for most of the slow ops recorded in the dump is:
> > >
> > > * In the 1-client case the typical slow op has duration between 50-65
> > ms
> > > and usually most of this is the interval between reached_pg and
> > started.
> > >
> > > * In the 2-client case the typical slow op has duration between 95-
> > 120 ms
> > > and again usually most of this is the interval between reached_pg
> > > and started.
> > >
> > > Could someone describe what the interval between reached_pg and
> > > started means?
> >
> > I think the slow part is probably find_object_context() (although to be
> > fair tons of stuff happens here, see do_op()). You could test this theory
> > or otherwise narrow this down with additional event markers lke
> >
> > diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index
> > d6f3084..6faccc2 100644
> > --- a/src/osd/ReplicatedPG.cc
> > +++ b/src/osd/ReplicatedPG.cc
> > @@ -1691,10 +1691,12 @@ void ReplicatedPG::do_op(OpRequestRef& op)
> > return;
> > }
> >
> > + op->mark_event("about to find");
> > int r = find_object_context(
> > oid, &obc, can_create,
> > m->has_flag(CEPH_OSD_FLAG_MAP_SNAP_CLONE),
> > &missing_oid);
> > + op->mark_event("found");
> >
> > if (r == -EAGAIN) {
> > // If we're not the primary of this OSD, and we have
> >
> >
> > sage
>
> Sage --
>
> Is it likely that find_object_context would take longer when there are two clients
> each using their own pool (compared to one client using one pool)?
>
> And would two clients using the same pool spend less time in find_object_context?
Maybe.. find_object_context is where we lookup the file, and if there
are caching effects that would be one place where we'd see it.
sage
^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: perf counters from a performance discrepancy
2015-10-08 15:55 ` Sage Weil
@ 2015-10-08 17:58 ` Somnath Roy
0 siblings, 0 replies; 15+ messages in thread
From: Somnath Roy @ 2015-10-08 17:58 UTC (permalink / raw)
To: Sage Weil, Deneau, Tom
Cc: Mark Nelson, Gregory Farnum, ceph-devel@vger.kernel.org
If I remember correctly, Nick faced similar issue and we debugged down to the xattr access issue in the find_object_context(). I am not sure if it is resolved though for him or not.
Thanks & Regards
Somnath
-----Original Message-----
From: ceph-devel-owner@vger.kernel.org [mailto:ceph-devel-owner@vger.kernel.org] On Behalf Of Sage Weil
Sent: Thursday, October 08, 2015 8:56 AM
To: Deneau, Tom
Cc: Mark Nelson; Gregory Farnum; ceph-devel@vger.kernel.org
Subject: RE: perf counters from a performance discrepancy
On Thu, 8 Oct 2015, Deneau, Tom wrote:
> > -----Original Message-----
> > From: Sage Weil [mailto:sweil@redhat.com]
> > Sent: Wednesday, October 07, 2015 9:48 PM
> > To: Deneau, Tom
> > Cc: Mark Nelson; Gregory Farnum; ceph-devel@vger.kernel.org
> > Subject: RE: perf counters from a performance discrepancy
> >
> > > I finally got around to looking at the dump_historic_ops output
> > > for the 1-client and 2-client cases.
> > > As you recall these are all read-ops. so the events in the dump are
> > > initiated
> > > reached_pg
> > > started
> > > done
> > >
> > > The pattern I see for most of the slow ops recorded in the dump is:
> > >
> > > * In the 1-client case the typical slow op has duration between
> > > 50-65
> > ms
> > > and usually most of this is the interval between reached_pg
> > > and
> > started.
> > >
> > > * In the 2-client case the typical slow op has duration between
> > > 95-
> > 120 ms
> > > and again usually most of this is the interval between reached_pg
> > > and started.
> > >
> > > Could someone describe what the interval between reached_pg and
> > > started means?
> >
> > I think the slow part is probably find_object_context() (although to
> > be fair tons of stuff happens here, see do_op()). You could test
> > this theory or otherwise narrow this down with additional event
> > markers lke
> >
> > diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index
> > d6f3084..6faccc2 100644
> > --- a/src/osd/ReplicatedPG.cc
> > +++ b/src/osd/ReplicatedPG.cc
> > @@ -1691,10 +1691,12 @@ void ReplicatedPG::do_op(OpRequestRef& op)
> > return;
> > }
> >
> > + op->mark_event("about to find");
> > int r = find_object_context(
> > oid, &obc, can_create,
> > m->has_flag(CEPH_OSD_FLAG_MAP_SNAP_CLONE),
> > &missing_oid);
> > + op->mark_event("found");
> >
> > if (r == -EAGAIN) {
> > // If we're not the primary of this OSD, and we have
> >
> >
> > sage
>
> Sage --
>
> Is it likely that find_object_context would take longer when there are
> two clients each using their own pool (compared to one client using one pool)?
>
> And would two clients using the same pool spend less time in find_object_context?
Maybe.. find_object_context is where we lookup the file, and if there are caching effects that would be one place where we'd see it.
sage
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
________________________________
PLEASE NOTE: The information contained in this electronic mail message is intended only for the use of the designated recipient(s) named above. If the reader of this message is not the intended recipient, you are hereby notified that you have received this message in error and that any review, dissemination, distribution, or copying of this message is strictly prohibited. If you have received this communication in error, please notify the sender by telephone or e-mail (as shown above) immediately and destroy any and all copies of this message in your possession (whether hard copies or electronically stored copies).
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2015-10-08 17:58 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-23 16:33 perf counters from a performance discrepancy Deneau, Tom
2015-09-23 18:19 ` Sage Weil
2015-09-23 18:25 ` Gregory Farnum
2015-09-23 18:42 ` Mark Nelson
2015-09-23 20:05 ` Deneau, Tom
2015-09-23 20:28 ` Samuel Just
2015-09-23 20:46 ` Deneau, Tom
2015-10-07 22:39 ` Deneau, Tom
2015-10-08 2:47 ` Sage Weil
2015-10-08 15:49 ` Deneau, Tom
2015-10-08 15:55 ` Sage Weil
2015-10-08 17:58 ` Somnath Roy
2015-09-23 20:39 ` Gregory Farnum
2015-09-23 20:51 ` Deneau, Tom
2015-09-23 20:52 ` Gregory Farnum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.