Skip to content
Snippets Groups Projects
  • Andrei Gudkov's avatar
    34a68001
    migration/calc-dirty-rate: millisecond-granularity period · 34a68001
    Andrei Gudkov authored
    
    This patch allows to measure dirty page rate for
    sub-second intervals of time. An optional argument is
    introduced -- calc-time-unit. For example:
    {"execute": "calc-dirty-rate", "arguments":
      {"calc-time": 500, "calc-time-unit": "millisecond"} }
    
    Millisecond granularity allows to make predictions whether
    migration will succeed or not. To do this, calculate dirty
    rate with calc-time set to max allowed downtime (e.g. 300ms),
    convert measured rate into volume of dirtied memory,
    and divide by network throughput. If the value is lower
    than max allowed downtime, then migration will converge.
    
    Measurement results for single thread randomly writing to
    a 1/4/24GiB memory region:
    
    +----------------+-----------------------------------------------+
    | calc-time      |                dirty rate MiB/s               |
    | (milliseconds) +----------------+---------------+--------------+
    |                | theoretical    | page-sampling | dirty-bitmap |
    |                | (at 3M wr/sec) |               |              |
    +----------------+----------------+---------------+--------------+
    |                               1GiB                             |
    +----------------+----------------+---------------+--------------+
    |            100 |           6996 |          7100 |         3192 |
    |            200 |           4606 |          4660 |         2655 |
    |            300 |           3305 |          3280 |         2371 |
    |            400 |           2534 |          2525 |         2154 |
    |            500 |           2041 |          2044 |         1871 |
    |            750 |           1365 |          1341 |         1358 |
    |           1000 |           1024 |          1052 |         1025 |
    |           1500 |            683 |           678 |          684 |
    |           2000 |            512 |           507 |          513 |
    +----------------+----------------+---------------+--------------+
    |                               4GiB                             |
    +----------------+----------------+---------------+--------------+
    |            100 |          10232 |          8880 |         4070 |
    |            200 |           8954 |          8049 |         3195 |
    |            300 |           7889 |          7193 |         2881 |
    |            400 |           6996 |          6530 |         2700 |
    |            500 |           6245 |          5772 |         2312 |
    |            750 |           4829 |          4586 |         2465 |
    |           1000 |           3865 |          3780 |         2178 |
    |           1500 |           2694 |          2633 |         2004 |
    |           2000 |           2041 |          2031 |         1789 |
    +----------------+----------------+---------------+--------------+
    |                               24GiB                            |
    +----------------+----------------+---------------+--------------+
    |            100 |          11495 |          8640 |         5597 |
    |            200 |          11226 |          8616 |         3527 |
    |            300 |          10965 |          8386 |         2355 |
    |            400 |          10713 |          8370 |         2179 |
    |            500 |          10469 |          8196 |         2098 |
    |            750 |           9890 |          7885 |         2556 |
    |           1000 |           9354 |          7506 |         2084 |
    |           1500 |           8397 |          6944 |         2075 |
    |           2000 |           7574 |          6402 |         2062 |
    +----------------+----------------+---------------+--------------+
    
    Theoretical values are computed according to the following formula:
    size * (1 - (1-(4096/size))^(time*wps)) / (time * 2^20),
    where size is in bytes, time is in seconds, and wps is number of
    writes per second.
    
    Signed-off-by: default avatarAndrei Gudkov <gudkov.andrei@huawei.com>
    Reviewed-by: default avatarHyman Huang <yong.huang@smartx.com>
    Message-Id: <d802e6b8053eb60fbec1a784cf86f67d9528e0a8.1693895970.git.gudkov.andrei@huawei.com>
    Signed-off-by: default avatarHyman Huang <yong.huang@smartx.com>
    34a68001
    History
    migration/calc-dirty-rate: millisecond-granularity period
    Andrei Gudkov authored
    
    This patch allows to measure dirty page rate for
    sub-second intervals of time. An optional argument is
    introduced -- calc-time-unit. For example:
    {"execute": "calc-dirty-rate", "arguments":
      {"calc-time": 500, "calc-time-unit": "millisecond"} }
    
    Millisecond granularity allows to make predictions whether
    migration will succeed or not. To do this, calculate dirty
    rate with calc-time set to max allowed downtime (e.g. 300ms),
    convert measured rate into volume of dirtied memory,
    and divide by network throughput. If the value is lower
    than max allowed downtime, then migration will converge.
    
    Measurement results for single thread randomly writing to
    a 1/4/24GiB memory region:
    
    +----------------+-----------------------------------------------+
    | calc-time      |                dirty rate MiB/s               |
    | (milliseconds) +----------------+---------------+--------------+
    |                | theoretical    | page-sampling | dirty-bitmap |
    |                | (at 3M wr/sec) |               |              |
    +----------------+----------------+---------------+--------------+
    |                               1GiB                             |
    +----------------+----------------+---------------+--------------+
    |            100 |           6996 |          7100 |         3192 |
    |            200 |           4606 |          4660 |         2655 |
    |            300 |           3305 |          3280 |         2371 |
    |            400 |           2534 |          2525 |         2154 |
    |            500 |           2041 |          2044 |         1871 |
    |            750 |           1365 |          1341 |         1358 |
    |           1000 |           1024 |          1052 |         1025 |
    |           1500 |            683 |           678 |          684 |
    |           2000 |            512 |           507 |          513 |
    +----------------+----------------+---------------+--------------+
    |                               4GiB                             |
    +----------------+----------------+---------------+--------------+
    |            100 |          10232 |          8880 |         4070 |
    |            200 |           8954 |          8049 |         3195 |
    |            300 |           7889 |          7193 |         2881 |
    |            400 |           6996 |          6530 |         2700 |
    |            500 |           6245 |          5772 |         2312 |
    |            750 |           4829 |          4586 |         2465 |
    |           1000 |           3865 |          3780 |         2178 |
    |           1500 |           2694 |          2633 |         2004 |
    |           2000 |           2041 |          2031 |         1789 |
    +----------------+----------------+---------------+--------------+
    |                               24GiB                            |
    +----------------+----------------+---------------+--------------+
    |            100 |          11495 |          8640 |         5597 |
    |            200 |          11226 |          8616 |         3527 |
    |            300 |          10965 |          8386 |         2355 |
    |            400 |          10713 |          8370 |         2179 |
    |            500 |          10469 |          8196 |         2098 |
    |            750 |           9890 |          7885 |         2556 |
    |           1000 |           9354 |          7506 |         2084 |
    |           1500 |           8397 |          6944 |         2075 |
    |           2000 |           7574 |          6402 |         2062 |
    +----------------+----------------+---------------+--------------+
    
    Theoretical values are computed according to the following formula:
    size * (1 - (1-(4096/size))^(time*wps)) / (time * 2^20),
    where size is in bytes, time is in seconds, and wps is number of
    writes per second.
    
    Signed-off-by: default avatarAndrei Gudkov <gudkov.andrei@huawei.com>
    Reviewed-by: default avatarHyman Huang <yong.huang@smartx.com>
    Message-Id: <d802e6b8053eb60fbec1a784cf86f67d9528e0a8.1693895970.git.gudkov.andrei@huawei.com>
    Signed-off-by: default avatarHyman Huang <yong.huang@smartx.com>