2022-10-06 13:33:45 +02:00
# SPDX-FileCopyrightText: Red Hat, Inc.
# SPDX-License-Identifier: GPL-2.0-or-later
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
from ovirt_imageio . _internal . measure import Range , RangeList
2017-09-26 14:04:24 +03:00
2022-02-06 23:49:21 +02:00
# Compare ranges.
2017-09-26 14:04:24 +03:00
2022-02-06 23:49:21 +02:00
def test_range_lt_start_smaller ( ) :
assert Range ( 5 , 10 ) < Range ( 6 , 10 )
assert not Range ( 6 , 10 ) < Range ( 5 , 10 )
def test_range_lt_start_same ( ) :
assert Range ( 5 , 10 ) < Range ( 5 , 11 )
assert not Range ( 5 , 11 ) < Range ( 5 , 10 )
def test_range_eq ( ) :
assert Range ( 5 , 10 ) == Range ( 5 , 10 )
def test_ragne_ne ( ) :
assert Range ( 5 , 10 ) != Range ( 15 , 20 )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
# Add to range list
def test_range_list_empty ( ) :
rl = RangeList ( )
assert rl . sum ( ) == 0
def test_range_list_add_first ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) ]
assert rl . sum ( ) == 10
def test_range_list_add_same ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 0 , 10 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) ]
assert rl . sum ( ) == 10
def test_range_list_add_shorter ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 0 , 5 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) ]
assert rl . sum ( ) == 10
def test_range_list_add_longer ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 5 ) )
rl . add ( Range ( 0 , 10 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) ]
assert rl . sum ( ) == 10
def test_range_list_add_overlap ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 5 , 15 ) )
assert rl . _ranges == [ Range ( 0 , 15 ) ]
assert rl . sum ( ) == 15
def test_range_list_add_contiguous ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 10 , 20 ) )
assert rl . _ranges == [ Range ( 0 , 20 ) ]
assert rl . sum ( ) == 20
def test_range_list_add_non_contiguous ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 20 , 30 ) ]
assert rl . sum ( ) == 20
def test_ragne_list_add_overlap_next_some ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 15 , 25 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 15 , 30 ) ]
assert rl . sum ( ) == 25
def test_ragne_list_add_overlap_next_all ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 15 , 30 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 15 , 30 ) ]
assert rl . sum ( ) == 25
def test_range_list_add_overlap_both_some ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 5 , 25 ) )
assert rl . _ranges == [ Range ( 0 , 30 ) ]
assert rl . sum ( ) == 30
def test_range_list_add_overlap_both_all ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 0 , 30 ) )
assert rl . _ranges == [ Range ( 0 , 30 ) ]
assert rl . sum ( ) == 30
def test_range_list_add_overlap_next_multi_some ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 40 , 50 ) )
rl . add ( Range ( 60 , 70 ) )
rl . add ( Range ( 25 , 45 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 20 , 50 ) , Range ( 60 , 70 ) ]
assert rl . sum ( ) == 50
def test_range_list_add_overlap_next_multi_all ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 10 ) )
rl . add ( Range ( 20 , 30 ) )
rl . add ( Range ( 40 , 50 ) )
rl . add ( Range ( 60 , 70 ) )
rl . add ( Range ( 20 , 50 ) )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 20 , 50 ) , Range ( 60 , 70 ) ]
assert rl . sum ( ) == 50
# Update range list.
def test_range_list_update_first ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 10 , 20 ) , Range ( 20 , 30 ) , Range ( 30 , 40 ) ] )
assert rl . _ranges == [ Range ( 0 , 40 ) ]
assert rl . sum ( ) == 40
def test_range_list_update_same ( ) :
rl = RangeList ( )
rl . add ( Range ( 0 , 40 ) )
rl . update ( [ Range ( 0 , 10 ) , Range ( 10 , 20 ) , Range ( 20 , 30 ) , Range ( 30 , 40 ) ] )
assert rl . _ranges == [ Range ( 0 , 40 ) ]
assert rl . sum ( ) == 40
def test_range_list_update_contiguous ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 100 , 110 ) , Range ( 200 , 210 ) ] )
rl . update ( [ Range ( 10 , 20 ) , Range ( 110 , 120 ) , Range ( 210 , 220 ) ] )
assert rl . _ranges == [ Range ( 0 , 20 ) , Range ( 100 , 120 ) , Range ( 200 , 220 ) ]
assert rl . sum ( ) == 60
def test_range_list_update_non_contiguous ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 100 , 110 ) , Range ( 200 , 210 ) ] )
rl . update ( [ Range ( 300 , 310 ) , Range ( 400 , 410 ) , Range ( 500 , 510 ) ] )
assert rl . _ranges == [
Range ( 0 , 10 ) ,
Range ( 100 , 110 ) ,
Range ( 200 , 210 ) ,
Range ( 300 , 310 ) ,
Range ( 400 , 410 ) ,
Range ( 500 , 510 ) ,
]
assert rl . sum ( ) == 60
def test_ragne_list_update_overlap_next_some ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) ] )
rl . update ( [ Range ( 15 , 25 ) ] )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 15 , 30 ) ]
assert rl . sum ( ) == 25
def test_ragne_list_update_overlap_next_all ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) ] )
rl . update ( [ Range ( 15 , 30 ) ] )
assert rl . _ranges == [ Range ( 0 , 10 ) , Range ( 15 , 30 ) ]
assert rl . sum ( ) == 25
def test_range_list_update_overlap_both_some ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) ] )
rl . update ( [ Range ( 5 , 25 ) ] )
assert rl . _ranges == [ Range ( 0 , 30 ) ]
assert rl . sum ( ) == 30
def test_range_list_update_overlap_both_all ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) ] )
rl . update ( [ Range ( 0 , 30 ) ] )
assert rl . _ranges == [ Range ( 0 , 30 ) ]
assert rl . sum ( ) == 30
def test_range_list_update_overlap_next_multi_some ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) , Range ( 40 , 50 ) , Range ( 60 , 70 ) ] )
rl . update ( [ Range ( 5 , 35 ) , Range ( 25 , 65 ) ] )
assert rl . _ranges == [ Range ( 0 , 70 ) ]
assert rl . sum ( ) == 70
def test_range_list_update_overlap_next_multi_all ( ) :
rl = RangeList ( )
rl . update ( [ Range ( 0 , 10 ) , Range ( 20 , 30 ) , Range ( 40 , 50 ) , Range ( 60 , 70 ) ] )
rl . update ( [ Range ( 0 , 50 ) , Range ( 20 , 70 ) ] )
assert rl . _ranges == [ Range ( 0 , 70 ) ]
assert rl . sum ( ) == 70
# Copy range list.
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
def test_range_list_copy ( ) :
r1 = RangeList ( )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
r1 . add ( Range ( 0 , 100 ) )
r1 . add ( Range ( 200 , 300 ) )
r1 . add ( Range ( 400 , 500 ) )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
r2 = RangeList ( r1 )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
# r1 and r2 are qqual.
assert r1 . _ranges == r2 . _ranges
assert r1 . sum ( ) == r2 . sum ( )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
# But independent.
r1 . add ( Range ( 300 , 400 ) )
r2 . add ( Range ( 100 , 200 ) )
2017-09-26 14:04:24 +03:00
measure: Add RangeList
Manage completed and ongoing ranges in a new class. This simplifies
ticket code, and removes unneeded sorting during merge.
The RangeList class support these operations:
- add() - add a single range - used when ending an operation. Add the
range to the sorted range list, merging consecutive or overlapping
ranges. This operation should be fast sine every read, write, or zero
request must add a range.
- update() - add multiple ranges - used when computing transferred
bytes. Copy the current range list, and the unsorted ongoing
operations ranges. This happens once every 10 seconds, so it does not
have to be fast.
- copy() - create a RangeList from another instance. Used to copy
completed range list for adding ongoing operations without modifying
ticket state.
Testing show tiny improvement:
test_run_benchmark[nbdcopy-1] 1 workers, 25600 ops, 1.831 s, 13982.81 ops/s
test_run_benchmark[nbdcopy-2] 2 workers, 25600 ops, 2.188 s, 11700.50 ops/s
test_run_benchmark[nbdcopy-4] 4 workers, 25600 ops, 2.207 s, 11601.56 ops/s
test_run_benchmark[nbdcopy-8] 8 workers, 25600 ops, 2.272 s, 11265.57 ops/s
test_run_benchmark[imageio-1] 1 workers, 25600 ops, 1.816 s, 14098.55 ops/s
test_run_benchmark[imageio-2] 2 workers, 25600 ops, 2.186 s, 11712.27 ops/s
test_run_benchmark[imageio-4] 4 workers, 25600 ops, 2.272 s, 11265.23 ops/s
test_run_benchmark[imageio-8] 8 workers, 25600 ops, 2.265 s, 11300.43 ops/s
test_transferred_benchmark[1] 1 workers, 10000 ops, 0.033 s, 307152.71 ops/s
test_transferred_benchmark[2] 2 workers, 10000 ops, 0.043 s, 232254.57 ops/s
test_transferred_benchmark[4] 4 workers, 10000 ops, 0.062 s, 162435.13 ops/s
test_transferred_benchmark[8] 8 workers, 10000 ops, 0.115 s, 87216.57 ops/s
Fixes: #29
Signed-off-by: Nir Soffer <nsoffer@redhat.com>
2022-02-05 08:08:46 +02:00
assert r1 . _ranges == [ Range ( 0 , 100 ) , Range ( 200 , 500 ) ]
assert r2 . _ranges == [ Range ( 0 , 300 ) , Range ( 400 , 500 ) ]