Hi,
This is a followup on the OSD wbthrottle slow issue casued by fdatasync 
discussed on the weekly performance meeting. 
For a 4K random write tests (qd=2) with qem-rbd driver and 50 volumes:
* We are able to get ~3100IOPS on our setup with Firefly (0.80.5) default 
parameter  
* We can get ~3200 IOPS on the same setup with if we set wbthrottle = 1
* if we replace fdatasync with sync_file_range, we are albe to get 4457 IOPS, 
41% improvement compared with all the default parameter. 

Setup configuration: 
* 4 OSD nodes (E3-1275 @3.5GHz processor with 32GB memory)
* each attached 10x Seagate 3TB 7200rpm HDD, with 2x Intel 400GB SSD as Journal
* network is 10GB. 

Wbthrottle tunings:
filestore_wbthrottle_xfs_ios_start_flusher=1
filestore_wbthrottle_xfs_bytes_start_flusher=1
filestore_wbthrottle_xfs_inodes_start_flusher=1

fdatasync -> sync_file_range:

diff codes_backup/WBThrottle.cc ceph-0.80.5/src/os/WBThrottle.cc
163c163
< #ifdef HAVE_FDATASYNC
---
> /*#ifdef HAVE_FDATASYNC
164a165,167
> */
> #ifdef HAVE_SYNC_FILE_RANGE
>     ::sync_file_range(**wb.get<1>(), wb.get<2>().offset, wb.get<2>().len, 
> SYNC_FILE_RANGE_WRITE);
210c213
<   wbiter->second.first.add(nocache, len, 1);
---
>   wbiter->second.first.add(nocache, len, 1, offset, len);
 
 
[root@a-ceph04 opt]# diff codes_backup/WBThrottle.h 
ceph-0.80.5/src/os/WBThrottle.h
72a73,74
>     uint64_t offset;
>     uint64_t len;
74c76
<     void add(bool _nocache, uint64_t _size, uint64_t _ios) {
---
>     void add(bool _nocache, uint64_t _size, uint64_t _ios, uint64_t _offset, 
> uint64_t _len) {
78a81,82
>       offset = _offset;
>       len = _len;

Thanks
Jian
N�����r��y����b�X��ǧv�^�)޺{.n�+���z�]z���{ay�ʇڙ�,j��f���h���z��w���
���j:+v���w�j�m��������zZ+�����ݢj"��!�i

Reply via email to