Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-24270

Misuse of io_getevents() causes wake-ups at least twice per second

Details

    Description

      In the asynchronous I/O interface, InnoDB is invoking io_getevents() with a timeout value of half a second, and requesting exactly 1 event at a time.

      Apparently, the reason to have such a short timeout is to facilitate shutdown.

      We can do better: Use an infinite timeout, wait for a larger maximum number of events. For shutdown, submit a dummy request that informs the io_getevents() caller thread to terminate.

      Attachments

        Issue Links

          Activity

            I ended up implementing my own wrapper of the io_getevents system call, because the one in libaio includes some code that would attempt to elide the system call, causing it to return 0 immediately without blocking. That would not only cause 100% CPU usage in our use case, but also cause SIGSEGV on shutdown, because every now and then, that extra user-mode code would be dereferencing what io_destroy() is destroying in another thread.

            Based on buildbot.askmonty.org (running various Linux kernel versions in virtual machines), executing io_destroy() while io_getevents is blocking in another thread appears to be safe, causing an EINVAL result.

            marko Marko Mäkelä added a comment - I ended up implementing my own wrapper of the io_getevents system call, because the one in libaio includes some code that would attempt to elide the system call, causing it to return 0 immediately without blocking. That would not only cause 100% CPU usage in our use case, but also cause SIGSEGV on shutdown, because every now and then, that extra user-mode code would be dereferencing what io_destroy() is destroying in another thread. Based on buildbot.askmonty.org (running various Linux kernel versions in virtual machines), executing io_destroy() while io_getevents is blocking in another thread appears to be safe, causing an EINVAL result.

            People

              marko Marko Mäkelä
              marko Marko Mäkelä
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.