Skip to content

Add experimental support for io_uring #34388

Description

@puzpuzpuz

Recent Linux kernel (5.1+) includes io_uring, a new non-blocking I/O subsystem, which might serve as a more efficient alternative to epoll. We could benefit from it and get a performance improvement in network I/O scenarios with high volume of concurrent connections and/or for fs operations.

Of course, in Node.js case we need changes made in libuv. There is an ongoing experiment aimed to add support for io_uring in libuv: libuv/libuv#2322

As this feature should be experimental (at least initially), io_uring mode could be activated under a new flag.

The goal of this issue is to improve visibility of the libuv experiment and gather some feedback.

Activity

  1. added
    linuxIssues and PRs related to the Linux platform.
    libuvIssues and PRs related to the libuv dependency or the uv binding.
    performanceIssues and PRs related to the performance of Node.js.
    on Jul 16, 2020
  2. added
    discussIssues opened for discussion and feedback.
    feature requestIssues requesting new Node.js features.
    on Jul 16, 2020
  3. mcollina commented on Jul 16, 2020

    @mcollina
    SponsorMember

    I’m happy to benchmark this if we have a matching Node PR. It’s very interesting!

  4. puzpuzpuz commented on Jul 16, 2020

    @puzpuzpuz
    MemberAuthor

    @mcollina no, we don't have a Node.js counterpart PR yet. But I hope to submit one once I find out status of the libuv PR. Will post any updates here.

  5. github-actions commented on Mar 22, 2022

    @github-actions
    Contributor

    There has been no activity on this feature request for 5 months and it is unlikely to be implemented. It will be closed 6 months after the last non-automated comment.

    For more information on how the project manages feature requests, please consult the feature request management document.

  6. added
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on Mar 22, 2022
  7. removed
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on Mar 22, 2022
  8. github-actions commented on Sep 19, 2022

    @github-actions
    Contributor

    There has been no activity on this feature request for 5 months and it is unlikely to be implemented. It will be closed 6 months after the last non-automated comment.

    For more information on how the project manages feature requests, please consult the feature request management document.

  9. added
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on Sep 19, 2022
  10. removed
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on Sep 23, 2022
  11. 1 remaining item

  12. added
    never-staleIssues and PRs exempt from automated stale handling.
    on Oct 10, 2022
  13. espoal commented on Oct 12, 2022

    @espoal

    For the future engineer who will have to implement this, I created awesome io_uring as a collection of articles, tutorials, libraries and examples to help implement this interface.

  14. moved this from Stale to Pending Triage in Node.js feature requestson Apr 4, 2023
  15. github-actions commented on Apr 11, 2023

    @github-actions
    Contributor

    There has been no activity on this feature request for 5 months and it is unlikely to be implemented. It will be closed 6 months after the last non-automated comment.

    For more information on how the project manages feature requests, please consult the feature request management document.

  16. added
    staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.
    on Apr 11, 2023
  17. bnoordhuis commented on Apr 11, 2023

    @bnoordhuis
    Member

    I'm going to close this because it's not actionable for node. io_uring support will likely come to libuv soon (I'm working on it) but it will be a transparent change to node.

  18. espoal commented on Apr 19, 2023

    @espoal

    io_uring support has been merged into node libuv!!! Thanks @bnoordhuis for your work

  19. mcollina commented on Apr 19, 2023

    @mcollina
    SponsorMember

    @espoal it was not merged into node.js just yet I guess. We'll need to wait for a libuv update here.

  20. espoal commented on Apr 19, 2023

    @espoal

    @mcollina yes you're right :) Is there anything I can do to help with the process of integrating io_uring?

  21. mcollina commented on Apr 19, 2023

    @mcollina
    SponsorMember

    Once there is a new release of libuv, this will be updated

  22. adityapatadia commented on Jun 6, 2023

    @adityapatadia

    https://github.com/libuv/libuv/releases/tag/v1.45.0 New version released! Hope we will get nodejs support soon.

  23. SebJansen commented on Aug 5, 2023

    @SebJansen

    Node v20 released with libuv 1.46 if I'm not mistaken, will we see support in v21?

    * \[[`6199e1946c`](https://github.com/nodejs/node/commit/6199e1946c)] - **deps**: upgrade to libuv 1.46.0 (Santiago Gimeno) [#48618](https://github.com/nodejs/node/pull/48618)

  24. jdmarshall commented on Nov 20, 2023

    @jdmarshall

    @bnoordhuis The commentary around this functionality in libuv implies that libuv users will need to rework their code to take full advantage of the io_uring support. So unless I'm reading that wrong, "there's nothing for us to do" is not correct. You might get some benefit without doing anything, but there's more to be had.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussIssues opened for discussion and feedback.feature requestIssues requesting new Node.js features.libuvIssues and PRs related to the libuv dependency or the uv binding.linuxIssues and PRs related to the Linux platform.never-staleIssues and PRs exempt from automated stale handling.performanceIssues and PRs related to the performance of Node.js.staleIssues and PRs marked stale due to inactivity and scheduled for automatic closure.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions