Re: ceph encoding optimization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I agree with pg_stat_t (and friends) is a good first start.
The eversion_t and utime_t are also good choice to start because they
are used at many places.

2015-11-04 23:07 GMT+08:00 Gregory Farnum <gfarnum@xxxxxxxxxx>:
> On Wed, Nov 4, 2015 at 7:00 AM, 池信泽 <xmdxcxz@xxxxxxxxx> wrote:
>> hi, all:
>>
>>      I am focus on the cpu usage of ceph now. I find the struct (such
>> as pg_info_t , transaction and so on) encode and decode exhaust too
>> much cpu resource.
>>
>>      For now, we should encode every member variable one by one which
>> calling encode_raw finally. When there are many members, we should
>> encode it many times. But I think, we could reduce some in some cases.
>>
>>      For example , struct A { int a; int b; int c }; ceph would
>> encoding int a , and then encode int b , finally int c. But for this
>> case , we could calling bufferlist.append((char *)(&a), sizeof(A))
>> because there are not padding bytes in this struct.
>>
>>      I use the above optimization, the cpu usage of object_stat_sum_t
>> encoding decrease from 0.5% to 0% (I could not see any using perf
>> tools).
>>
>>      This is only a case, so I think we could do similar optimization
>> other struct. I think we should pay attention to the padding in
>> struct.
>
> The problem with this approach is that the encoded versions need to be
> platform-independent — they are shared over the wire and written to
> disks that might get transplanted to different machines. Apart from
> padding bytes, we also need to worry about endianness of the machine,
> etc. *And* we often mutate structures across versions in order to add
> new abilities, relying on the encode-decode process to deal with any
> changes to the system. How could we deal with that if just dumping the
> raw memory?
>
> Now, maybe we could make these changes on some carefully-selected
> structs, I'm not sure. But we'd need a way to pick them out, guarantee
> that we aren't breaking interoperability concerns, etc; and it would
> need to be something we can maintain as a group going forward. I'm not
> sure how to satisfy those constraints without burning a little extra
> CPU. :/
> -Greg



-- 
Regards,
xinze
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux