Hi Xiaoxi,
Please note that this PR is proof-of-concept hence I didn't try to
implement the best algorithm.
But IMO your approach is not viable (or at least isn't that simple)
though since freelist manager (and RocksDB) doesn't contain up to date
allocator state at arbitrary moment of time - running transactions might
have some pending allocations that were processed by allocator but
haven't landed to DB yet. So one is unable to restore valid allocator
state from Freelist Manager unless he finalizes all the transactions.
Which looks a bit troublesome...
Thanks,
Igor
On 3/2/2019 6:41 PM, Xiaoxi Chen wrote:
Hi Igor,
Thanks, no worry I will build it locally and test , will update
this thread if I get anything.
The commit
https://github.com/ceph/ceph/commit/8ee87c22bcd88a8911d58936cec9049e0932fb77 make
sense though the concern is the full defragment will take long time.
Do you see it will be faster to use freelist manager rather than
iterate every btree , insert to common one and re-build original
b-tree? The freelist manager should always de-fraged in anytime.
fm->enumerate_reset();
uint64_t offset, length;
while (fm->enumerate_next(&offset, &length)) {
alloc->init_add_free(offset, length);
++num;
bytes += length;
}
Xiaoxi
Igor Fedotov <ifedotov@xxxxxxx <mailto:ifedotov@xxxxxxx>>
于2019年3月2日周六 上午3:23写道:
Xiaoxi,
Here is the luminous patch which performs StupidAllocator reset
once per 12 hours.
https://github.com/ceph/ceph/tree/wip-ifed-reset-allocator-luminous
Sorry, didn't have enough time today to learn how to make a
package from it, just sources for now.
Thanks,
Igor
On 3/1/2019 11:46 AM, Xiaoxi Chen wrote:
igor,
I can test the patch if we have a package.
My enviroment and workload can consistently reproduce the
latency 2-3 days after restarting.
Sage tells me to try bitmap allocator to make sure stupid
allocator is the bad guy. I have some osds in luminous +bitmap
and some osds in 14.1.0+bitmap. Both looks positive till now,
but i need more time to be sure.
The perf ,log and admin socket analysis lead to the theory
that in alloc_int the loop sometimes take long time wkth
allocator locks held. Which blocks release part called from
_txc_finish in kv_finalize_thread, this thread is also the one to
calculate state_kv_committing_lat and overall commit_lat. You can
find from admin socket that state_done_latency has similar trend
as commit_latency.
But we cannot find a theory to.explain why reboot helps, the
allocator btree will be rebuild from freelist manager
and.it.should be exactly. the same as it is prior to reboot.
Anything related with pg recovery?
Anyway, as I have a live env and workload, I am more than
willing to work with you for further investigatiom
-Xiaoxi
Igor Fedotov <ifedotov@xxxxxxx <mailto:ifedotov@xxxxxxx>> 于
2019年3月1日周五 上午6:21写道:
Also I think it makes sense to create a ticket at this point.
Any
volunteers?
On 3/1/2019 1:00 AM, Igor Fedotov wrote:
> Wondering if somebody would be able to apply simple patch that
> periodically resets StupidAllocator?
>
> Just to verify/disprove the hypothesis it's allocator relateted
>
> On 2/28/2019 11:57 PM, Stefan Kooman wrote:
>> Quoting Wido den Hollander (wido@xxxxxxxx
<mailto:wido@xxxxxxxx>):
>>> Just wanted to chime in, I've seen this with
Luminous+BlueStore+NVMe
>>> OSDs as well. Over time their latency increased until we
started to
>>> notice I/O-wait inside VMs.
>> On a Luminous 12.2.8 cluster with only SSDs we also hit
this issue I
>> guess. After restarting the OSD servers the latency would
drop to normal
>> values again. See
https://owncloud.kooman.org/s/BpkUc7YM79vhcDj
>>
>> Reboots were finished at ~ 19:00.
>>
>> Gr. Stefan
>>