You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Francesco Nigro (Jira)" <ji...@apache.org> on 2021/06/21 10:13:00 UTC

[jira] [Updated] (ARTEMIS-3361) ASYNCIO blocked poll can spin wait I/O completion

     [ https://issues.apache.org/jira/browse/ARTEMIS-3361?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Francesco Nigro updated ARTEMIS-3361:
-------------------------------------
    Description: 
Follow-up of https://issues.apache.org/jira/browse/ARTEMIS-1977: thanks the recent changes on Linux kernel, introducing NVMe polling-mode (see https://patchwork.kernel.org/project/linux-block/patch/1446830423-25027-5-git-send-email-axboe@fb.com/) to reduce the amount of IRQs (and context switches) with super-fast NVMe disk, this issue can save any blocking to happen during ASYNCIO poll (if not for fdatasync, that can be improved with NVMe polling mode too) setting the appropriate journal configuration.

The idea is to expose a new journal  configuration option eg {{<journal-polling-mode>true</journal-polling-mode>}} 
valid only on ASYNCIO journal, that allow {{org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory.PollerThread}} to spin poll {{LibaioContext}}.
In order to work, it needs to change {{LibaioContext}} (hence artemis native on https://github.com/apache/activemq-artemis-native/blob/master/src/main/c/org_apache_activemq_artemis_nativo_jlibaio_LibaioContext.c) to expose a spinning poll version (that's not awaiting any completion to happen, but just use the user-space reaping to spin poll the completion ring buffer in user-space)

  was:Follow-up of https://issues.apache.org/jira/browse/ARTEMIS-1977: thanks the recent changes on Linux kernel, introducing NVMe polling-mode (see https://patchwork.kernel.org/project/linux-block/patch/1446830423-25027-5-git-send-email-axboe@fb.com/) to reduce the amount of IRQs (and context switches) with super-fast NVMe disk, this issue can save any blocking to happen during ASYNCIO poll (if not for fdatasync, that can be improved with NVMe polling mode too) setting the appropriate journal configuration.


> ASYNCIO blocked poll can spin wait I/O completion
> -------------------------------------------------
>
>                 Key: ARTEMIS-3361
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3361
>             Project: ActiveMQ Artemis
>          Issue Type: New Feature
>            Reporter: Francesco Nigro
>            Assignee: Francesco Nigro
>            Priority: Major
>
> Follow-up of https://issues.apache.org/jira/browse/ARTEMIS-1977: thanks the recent changes on Linux kernel, introducing NVMe polling-mode (see https://patchwork.kernel.org/project/linux-block/patch/1446830423-25027-5-git-send-email-axboe@fb.com/) to reduce the amount of IRQs (and context switches) with super-fast NVMe disk, this issue can save any blocking to happen during ASYNCIO poll (if not for fdatasync, that can be improved with NVMe polling mode too) setting the appropriate journal configuration.
> The idea is to expose a new journal  configuration option eg {{<journal-polling-mode>true</journal-polling-mode>}} 
> valid only on ASYNCIO journal, that allow {{org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory.PollerThread}} to spin poll {{LibaioContext}}.
> In order to work, it needs to change {{LibaioContext}} (hence artemis native on https://github.com/apache/activemq-artemis-native/blob/master/src/main/c/org_apache_activemq_artemis_nativo_jlibaio_LibaioContext.c) to expose a spinning poll version (that's not awaiting any completion to happen, but just use the user-space reaping to spin poll the completion ring buffer in user-space)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)