)]}'
{
  "commit": "34a68001f16208a574cbef0cd2d4e2d681faa604",
  "tree": "bf4a9cbc804e5562e3ae4b557a9413c100883ded",
  "parents": [
    "2f3913f4b2ad74baeb5a6f1d36efbd9ecdf1057d"
  ],
  "author": {
    "name": "Andrei Gudkov",
    "email": "gudkov.andrei@huawei.com",
    "time": "Tue Sep 05 10:05:43 2023 +0300"
  },
  "committer": {
    "name": "Hyman Huang",
    "email": "yong.huang@smartx.com",
    "time": "Tue Oct 10 08:03:50 2023 +0800"
  },
  "message": "migration/calc-dirty-rate: millisecond-granularity period\n\nThis patch allows to measure dirty page rate for\nsub-second intervals of time. An optional argument is\nintroduced -- calc-time-unit. For example:\n{\"execute\": \"calc-dirty-rate\", \"arguments\":\n  {\"calc-time\": 500, \"calc-time-unit\": \"millisecond\"} }\n\nMillisecond granularity allows to make predictions whether\nmigration will succeed or not. To do this, calculate dirty\nrate with calc-time set to max allowed downtime (e.g. 300ms),\nconvert measured rate into volume of dirtied memory,\nand divide by network throughput. If the value is lower\nthan max allowed downtime, then migration will converge.\n\nMeasurement results for single thread randomly writing to\na 1/4/24GiB memory region:\n\n+----------------+-----------------------------------------------+\n| calc-time      |                dirty rate MiB/s               |\n| (milliseconds) +----------------+---------------+--------------+\n|                | theoretical    | page-sampling | dirty-bitmap |\n|                | (at 3M wr/sec) |               |              |\n+----------------+----------------+---------------+--------------+\n|                               1GiB                             |\n+----------------+----------------+---------------+--------------+\n|            100 |           6996 |          7100 |         3192 |\n|            200 |           4606 |          4660 |         2655 |\n|            300 |           3305 |          3280 |         2371 |\n|            400 |           2534 |          2525 |         2154 |\n|            500 |           2041 |          2044 |         1871 |\n|            750 |           1365 |          1341 |         1358 |\n|           1000 |           1024 |          1052 |         1025 |\n|           1500 |            683 |           678 |          684 |\n|           2000 |            512 |           507 |          513 |\n+----------------+----------------+---------------+--------------+\n|                               4GiB                             |\n+----------------+----------------+---------------+--------------+\n|            100 |          10232 |          8880 |         4070 |\n|            200 |           8954 |          8049 |         3195 |\n|            300 |           7889 |          7193 |         2881 |\n|            400 |           6996 |          6530 |         2700 |\n|            500 |           6245 |          5772 |         2312 |\n|            750 |           4829 |          4586 |         2465 |\n|           1000 |           3865 |          3780 |         2178 |\n|           1500 |           2694 |          2633 |         2004 |\n|           2000 |           2041 |          2031 |         1789 |\n+----------------+----------------+---------------+--------------+\n|                               24GiB                            |\n+----------------+----------------+---------------+--------------+\n|            100 |          11495 |          8640 |         5597 |\n|            200 |          11226 |          8616 |         3527 |\n|            300 |          10965 |          8386 |         2355 |\n|            400 |          10713 |          8370 |         2179 |\n|            500 |          10469 |          8196 |         2098 |\n|            750 |           9890 |          7885 |         2556 |\n|           1000 |           9354 |          7506 |         2084 |\n|           1500 |           8397 |          6944 |         2075 |\n|           2000 |           7574 |          6402 |         2062 |\n+----------------+----------------+---------------+--------------+\n\nTheoretical values are computed according to the following formula:\nsize * (1 - (1-(4096/size))^(time*wps)) / (time * 2^20),\nwhere size is in bytes, time is in seconds, and wps is number of\nwrites per second.\n\nSigned-off-by: Andrei Gudkov \u003cgudkov.andrei@huawei.com\u003e\nReviewed-by: Hyman Huang \u003cyong.huang@smartx.com\u003e\nMessage-Id: \u003cd802e6b8053eb60fbec1a784cf86f67d9528e0a8.1693895970.git.gudkov.andrei@huawei.com\u003e\nSigned-off-by: Hyman Huang \u003cyong.huang@smartx.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bccb3515e3c4801d23d565ac6b9e64856125c179",
      "old_mode": 33188,
      "old_path": "migration/dirtyrate.c",
      "new_id": "a461b28bb56e028d69c9541d9d816845666f7ad7",
      "new_mode": 33188,
      "new_path": "migration/dirtyrate.c"
    },
    {
      "type": "modify",
      "old_id": "594a5c0bb64c296bd294ed37949e095ddf9209cd",
      "old_mode": 33188,
      "old_path": "migration/dirtyrate.h",
      "new_id": "869c0609412e5ee29c1aac0e8f59334b4a6c0cda",
      "new_mode": 33188,
      "new_path": "migration/dirtyrate.h"
    },
    {
      "type": "modify",
      "old_id": "8843e74b59c7930f95484792f7124069b08e86d9",
      "old_mode": 33188,
      "old_path": "qapi/migration.json",
      "new_id": "1717aa4bbde83cda3ba9d5d52f4411ad56d2271a",
      "new_mode": 33188,
      "new_path": "qapi/migration.json"
    }
  ]
}
