)]}'
{
  "commit": "69a6dc1d97a590230b634da7e92fb1acbefa53f2",
  "tree": "b454e77c7442eefe101bb946394259b0e6697182",
  "parents": [
    "66a9d366feaf88927f039b4e949ea85d5a92e7ec"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Tue Dec 10 14:52:52 2019 -0500"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Tue Mar 03 15:13:30 2020 -0500"
  },
  "message": "Add a benchmark for TLB flushes and shootdowns\n\nTo use, make sure you set the C-state to 0, so processors don\u0027t sleep\ndeeply:\n\n\t$ echo 0 \u003e \\#arch/c-state\n\nThen issue the various commands.  To run all 7 tests, between core 0\n(where the shell runs) and core 7:\n\n\t$ for i in `seq 1 7`; do echo tlb 7 $i \u003e \\#regress/monctl; done\n\nTo run the POKE test, you\u0027ll need to manually change the ASM handler.\n\nOne note on concurrency: this assumes that send_ipi() and\nsend_kernel_message() provide the appropriate memory barriers.\nSpecifically, that the main thread\u0027s write to __tlb_bench_x appears\nbefore the message is sent (or at least that the handler\u0027s clobber\nhappens after).  Safe to say that\u0027s a guarantee of those functions, at\nleast conceptually and in their x86 implementations.  (wrmsr and LOCK\nxchg).\n\nAlso, using both READ_ONCE() and cpu_relax() is overkill.  The newer\nLinux style would be to use READ_ONCE(), I think.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1565d57a0401d32bdd67c571af026dad754facd8",
      "old_mode": 33188,
      "old_path": "kern/drivers/dev/regress.c",
      "new_id": "c4330000e40e0cca45db28b566ea1da0da88c5a0",
      "new_mode": 33188,
      "new_path": "kern/drivers/dev/regress.c"
    }
  ]
}
