)]}'
{
  "commit": "fbe3fc5cb3cd9f9064e98c549684e821c353fe41",
  "tree": "8a43f761c73026ab222b1793e81cc8596cb217c4",
  "parents": [
    "37fcee5d1154b7a03c13582e128bcc31ad43e954"
  ],
  "author": {
    "name": "Fam Zheng",
    "email": "famz@redhat.com",
    "time": "Fri Oct 30 12:06:29 2015 +0800"
  },
  "committer": {
    "name": "Stefan Hajnoczi",
    "email": "stefanha@redhat.com",
    "time": "Mon Nov 09 09:59:47 2015 +0000"
  },
  "message": "aio: Introduce aio-epoll.c\n\nTo minimize code duplication, epoll is hooked into aio-posix\u0027s\naio_poll() instead of rolling its own. This approach also has both\ncompile-time and run-time switchability.\n\n1) When QEMU starts with a small number of fds in the event loop, ppoll\nis used.\n\n2) When QEMU starts with a big number of fds, or when more devices are\nhot plugged, epoll kicks in when the number of fds hits the threshold.\n\n3) Some fds may not support epoll, such as tty based stdio. In this\ncase, it falls back to ppoll.\n\nA rough benchmark with scsi-disk on virtio-scsi dataplane (epoll gets\nenabled from 64 onward). Numbers are in MB/s.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n             |     master     |     epoll\n             |                |\nscsi disks # | read    randrw | read    randrw\n-------------|----------------|----------------\n1            | 86      36     | 92      45\n8            | 87      43     | 86      41\n64           | 71      32     | 70      38\n128          | 48      24     | 58      31\n256          | 37      19     | 57      28\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nTo comply with aio_{disable,enable}_external, we always use ppoll when\naio_external_disabled() is true.\n\n[Removed #ifdef CONFIG_EPOLL around AioContext epollfd field declaration\nsince the field is also referenced outside CONFIG_EPOLL code.\n--Stefan]\n\nSigned-off-by: Fam Zheng \u003cfamz@redhat.com\u003e\nMessage-id: 1446177989-6702-4-git-send-email-famz@redhat.com\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5bff3cd670b32437b807457d7fc19a739cf4bbc7",
      "old_mode": 33188,
      "old_path": "aio-posix.c",
      "new_id": "06148a9ba3673f6ec20a08285615e61b7248b171",
      "new_mode": 33188,
      "new_path": "aio-posix.c"
    },
    {
      "type": "modify",
      "old_id": "9ffecf7977be29ac225c86e590096b00a062af82",
      "old_mode": 33188,
      "old_path": "include/block/aio.h",
      "new_id": "e086e3b4eeec96ad573a8ecb69dd0054c866714a",
      "new_mode": 33188,
      "new_path": "include/block/aio.h"
    }
  ]
}
