Hi, Markus Here is the non-RFC patch. Any suggestions are welcome. :)
Thanks, Liyang. At 01/15/2017 04:01 PM, Dou Liyang wrote:
Change log v3 -> v4: 1. Develop these into the non-RFC patches. 2. Fix some comments. 3. do declarations first. Change log v2 -> v3: 1. Remove the unnecessary code for the bdrv_next_node(). 2. Remove the change of the locking rules. Even if this change can improve the performance, but it may effect the consistency. The Qemu uses the qmp_query_blockstats() function to get the blockstats. As the function has been changed several times, it becomes more complex and longer. For the multi-disks guest, if we want to execute I/O operations and this function at the same time. we can use the dataplane feature to hold I/O performance does not drop. But, Normally without this feature, How to reduce the decline in performance? These patches refactor the qmp_query_blockstats() to make the code easier to follow, and shorter as follows: From: +--------------+ +---------------------+ | 1 | | 4. | |next_query_bds| |bdrv_query_bds_stats +---+ | | | | | +--------^-----+ +-------------^-------+ | | | | +---------+----------+ +--------+-------+ | | 0. | | 2. | | |qmp_query_blockstats+------>bdrv_query_stats<---- | | | | +--------------------+ +--------+-------+ | +-------------v-------+ | 3. | |bdrv_query_blk_stats | | | +---------------------+ To: +--------------+ | | +--------v-----------+ | +---> 3. | | +-------------------+ | |bdrv_query_bds_stats+--+ | 1. +--+ | | | + +--------------------+ |qmp_query_blockstats--+ | | | +-------------------+ | +--------------------+ | | 2. | +---> | |bdrv_query_blk_stats| | | +--------------------+ They also optimize the fuction by reducing its running time. 1. The function running time the time it takes(ns) in each requests: the disk numbers | 10 | 500 ------------------------------------- before these patches | 19429 | 667722 after these patches | 18536 | 627945 2. For the performance used the dd command likes this to test: dd if=date_1.dat of=date_2.dat conv=fsync oflag=direct bs=1k count=100k. the I/O performance is degraded(%) during the monitor: the disk numbers | 10 | 500 ------------------------------------- before these patches | 1.3 | 14.2 after these patches | 1.0 | 11.3 Dou Liyang (2): block/qapi: reduce the coupling between the bdrv_query_stats and bdrv_query_bds_stats block/qapi: reduce the execution time of qmp_query_blockstats block/qapi.c | 95 ++++++++++++++++++++++++++---------------------------------- 1 file changed, 41 insertions(+), 54 deletions(-)