)]}'
{
  "commit": "5a09d1e1c10750dce2618ef847d54c0cd96e3cae",
  "tree": "bd7777531a7bab3726058d38ddaa2f5e94bc8622",
  "parents": [
    "03ad4a42545591863f3f01be31e15d221cf29c75"
  ],
  "author": {
    "name": "Brian Norris",
    "email": "briannorris@chromium.org",
    "time": "Thu Feb 29 16:29:51 2024 -0800"
  },
  "committer": {
    "name": "Nico Huber",
    "email": "nico.h@gmx.de",
    "time": "Sat Mar 09 13:21:35 2024 +0000"
  },
  "message": "udelay: Lower the sleep vs delay threshold\n\nBy default, we busy-loop (a.k.a., \"delay\") for most delay values, and\nonly allow sleeping for large delays. But busy-looping is expensive, as\nit wastes CPU cycles.\n\nIn a simple program that runs a bunch of samples of [1] over 1000\nsamples, I find that for 0.1 s (100000 us):\n\n 64x2 AMD CPU (CONFIG_HZ\u003d250 / CONFIG_NO_HZ_FULL\u003dy):\n   min diff: 60 us\n   max diff: 831 us\n   mean diff: 135 us\n\n 4+2 Mediatek MT8183 CPU (CONFIG_HZ\u003d1000 / CONFIG_NO_HZ_IDLE\u003dy /\n                          sysctl kernel.timer_highres\u003d1):\n   min diff: 70 us\n   max diff: 1556 us\n   mean diff: 146 us\n\n 4+2 Mediatek MT8183 CPU (CONFIG_HZ\u003d1000 / CONFIG_NO_HZ_IDLE\u003dy /\n                          sysctl kernel.timer_highres\u003d0):\n   min diff: 94 us\n   max diff: 7222 us\n   mean diff: 1201 us\n\ni.e., maximum 1.5% error, typically ~0.1% error with high resolution\ntimers. Max 7% error, typical 1% error with low resolution timers.\n\nThis seems reasonable.\n\n[1] Stripped / pseudocode:\n\n  clock_gettime(CLOCK_MONOTONIC, before);\n  nanosleep({ .tv_nsec \u003d usecs * 1000 }, NULL);\n  clock_gettime(CLOCK_MONOTONIC, after);\n  diff \u003d abs((after - before) / 1000 - usecs));\n\nChange-Id: Ifd4821c66c5564f7c975c08769a6742f645e9be0\nSigned-off-by: Brian Norris \u003cbriannorris@chromium.org\u003e\nReviewed-on: https://review.sourcearcade.org/c/flashprog/+/97\nReviewed-by: Arthur Heymans \u003carthur@aheymans.xyz\u003e\nReviewed-by: Nico Huber \u003cnico.h@gmx.de\u003e\nTested-by: Nico Huber \u003cnico.h@gmx.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6c0efc43659d9aa81634bc240f6477ca0650541f",
      "old_mode": 33188,
      "old_path": "udelay.c",
      "new_id": "c25d243831d4be0ff119efeef81650b703d948e0",
      "new_mode": 33188,
      "new_path": "udelay.c"
    }
  ]
}
