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