This is an automated email from the ASF dual-hosted git repository.

nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/celeborn.git


The following commit(s) were added to refs/heads/main by this push:
     new 67f7c4b59 [CELEBORN-2185] Support native kqueue transport on BSD/MacOS
67f7c4b59 is described below

commit 67f7c4b59154c7822fec7c300e93b1231f92f365
Author: SteNicholas <[email protected]>
AuthorDate: Wed Oct 29 14:07:52 2025 +0800

    [CELEBORN-2185] Support native kqueue transport on BSD/MacOS
    
    ### What changes were proposed in this pull request?
    
    Support native kqueue transport on BSD/MacOS for 
`celeborn.<module>.io.mode`.
    
    Backport:
    
    - https://github.com/apache/spark/pull/52703
    - https://github.com/apache/spark/pull/52724
    
    ### Why are the changes needed?
    
    Netty provides the following platform specific JNI transports for [native 
transports](https://netty.io/wiki/native-transports.html):
    
    - Linux (since 4.0.16)
    - MacOS/BSD (since 4.1.11)
    
    These JNI transports add features specific to a particular platform, 
generate less garbage, and generally improve performance when compared to the 
NIO based transport.
    
    ### Does this PR introduce _any_ user-facing change?
    
    Change the default value of `celeborn.<module>.io.mode` from `NIO` to 
`EPOLL` if epoll mode is available, from `NIO` to `KQUEUE` if kqueue mode is 
available, falling back to `NIO` otherwise.
    
    ### How was this patch tested?
    
    CI.
    
    Closes #3518 from SteNicholas/CELEBORN-2185.
    
    Authored-by: SteNicholas <[email protected]>
    Signed-off-by: SteNicholas <[email protected]>
---
 client-flink/flink-1.16-shaded/pom.xml             | 23 +++++++++++++++++-----
 client-flink/flink-1.17-shaded/pom.xml             | 23 +++++++++++++++++-----
 client-flink/flink-1.18-shaded/pom.xml             | 23 +++++++++++++++++-----
 client-flink/flink-1.19-shaded/pom.xml             | 23 +++++++++++++++++-----
 client-flink/flink-1.20-shaded/pom.xml             | 23 +++++++++++++++++-----
 client-flink/flink-2.0-shaded/pom.xml              | 23 +++++++++++++++++-----
 client-flink/flink-2.1-shaded/pom.xml              | 23 +++++++++++++++++-----
 client-mr/mr-shaded/pom.xml                        | 23 +++++++++++++++++-----
 client-spark/spark-2-shaded/pom.xml                | 23 +++++++++++++++++-----
 client-spark/spark-3-shaded/pom.xml                | 23 +++++++++++++++++-----
 client-spark/spark-4-shaded/pom.xml                | 23 +++++++++++++++++-----
 client-tez/tez-shaded/pom.xml                      | 23 +++++++++++++++++-----
 .../celeborn/common/network/util/IOMode.java       | 11 ++++++-----
 .../celeborn/common/network/util/NettyUtils.java   | 14 ++++++++++++-
 .../common/network/util/TransportConf.java         |  7 +++++--
 .../org/apache/celeborn/common/CelebornConf.scala  | 11 ++++++++---
 docs/configuration/network.md                      |  2 +-
 docs/migration.md                                  |  2 ++
 18 files changed, 251 insertions(+), 72 deletions(-)

diff --git a/client-flink/flink-1.16-shaded/pom.xml 
b/client-flink/flink-1.16-shaded/pom.xml
index 4eb0fbfb5..c856b1108 100644
--- a/client-flink/flink-1.16-shaded/pom.xml
+++ b/client-flink/flink-1.16-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-1.17-shaded/pom.xml 
b/client-flink/flink-1.17-shaded/pom.xml
index 83223ae60..fd8512fe7 100644
--- a/client-flink/flink-1.17-shaded/pom.xml
+++ b/client-flink/flink-1.17-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-1.18-shaded/pom.xml 
b/client-flink/flink-1.18-shaded/pom.xml
index 4dbb4b9a6..04d5b9651 100644
--- a/client-flink/flink-1.18-shaded/pom.xml
+++ b/client-flink/flink-1.18-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-1.19-shaded/pom.xml 
b/client-flink/flink-1.19-shaded/pom.xml
index 7f1070c41..060ce1644 100644
--- a/client-flink/flink-1.19-shaded/pom.xml
+++ b/client-flink/flink-1.19-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-1.20-shaded/pom.xml 
b/client-flink/flink-1.20-shaded/pom.xml
index d215d6eef..3b004cbed 100644
--- a/client-flink/flink-1.20-shaded/pom.xml
+++ b/client-flink/flink-1.20-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-2.0-shaded/pom.xml 
b/client-flink/flink-2.0-shaded/pom.xml
index 7be10544b..020728018 100644
--- a/client-flink/flink-2.0-shaded/pom.xml
+++ b/client-flink/flink-2.0-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-flink/flink-2.1-shaded/pom.xml 
b/client-flink/flink-2.1-shaded/pom.xml
index 0faa1f651..d2c874ba5 100644
--- a/client-flink/flink-2.1-shaded/pom.xml
+++ b/client-flink/flink-2.1-shaded/pom.xml
@@ -120,11 +120,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-mr/mr-shaded/pom.xml b/client-mr/mr-shaded/pom.xml
index 089d83019..2ffa40e1a 100644
--- a/client-mr/mr-shaded/pom.xml
+++ b/client-mr/mr-shaded/pom.xml
@@ -131,11 +131,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-spark/spark-2-shaded/pom.xml 
b/client-spark/spark-2-shaded/pom.xml
index cfbc02079..9db62b423 100644
--- a/client-spark/spark-2-shaded/pom.xml
+++ b/client-spark/spark-2-shaded/pom.xml
@@ -121,11 +121,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git a/client-spark/spark-3-shaded/pom.xml 
b/client-spark/spark-3-shaded/pom.xml
index 8cce8577a..bc8c2065e 100644
--- a/client-spark/spark-3-shaded/pom.xml
+++ b/client-spark/spark-3-shaded/pom.xml
@@ -125,11 +125,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="deleting META-INF/native-image folder"></echo>
                 <delete 
dir="${project.build.directory}/unpacked/META-INF/native-image"></delete>
                 <echo message="repackaging netty jar"></echo>
diff --git a/client-spark/spark-4-shaded/pom.xml 
b/client-spark/spark-4-shaded/pom.xml
index 633eabbec..5e741d601 100644
--- a/client-spark/spark-4-shaded/pom.xml
+++ b/client-spark/spark-4-shaded/pom.xml
@@ -125,11 +125,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="deleting META-INF/native-image folder"></echo>
                 <delete 
dir="${project.build.directory}/unpacked/META-INF/native-image"></delete>
                 <echo message="repackaging netty jar"></echo>
diff --git a/client-tez/tez-shaded/pom.xml b/client-tez/tez-shaded/pom.xml
index e192d3bdb..e8060d95a 100644
--- a/client-tez/tez-shaded/pom.xml
+++ b/client-tez/tez-shaded/pom.xml
@@ -145,11 +145,24 @@
                   <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
                   <mapper from="libnetty_transport_native_epoll_aarch_64.so" 
to="liborg_apache_celeborn_shaded_netty_transport_native_epoll_aarch_64.so" 
type="glob"></mapper>
                 </move>
-                <echo message="deleting native kqueue library"></echo>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_transport_native_kqueue_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib"></delete>
-                <delete 
file="${project.build.directory}/unpacked/META-INF/native/libnetty_resolver_dns_native_macos_x86_64.jnilib"></delete>
+                <echo message="renaming native kqueue library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_x86_64.jnilib" 
type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_transport_native_kqueue_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_transport_native_kqueue_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <echo message="renaming native dns resolver library"></echo>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_aarch_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_aarch_64.jnilib"
 type="glob"></mapper>
+                </move>
+                <move includeemptydirs="false" 
todir="${project.build.directory}/unpacked/META-INF/native">
+                  <fileset 
dir="${project.build.directory}/unpacked/META-INF/native"></fileset>
+                  <mapper 
from="libnetty_resolver_dns_native_macos_x86_64.jnilib" 
to="liborg_apache_celeborn_shaded_netty_resolver_dns_native_macos_x86_64.jnilib"
 type="glob"></mapper>
+                </move>
                 <echo message="repackaging netty jar"></echo>
                 <jar basedir="${project.build.directory}/unpacked" 
destfile="${project.build.directory}/${artifactId}-${version}.jar"></jar>
               </target>
diff --git 
a/common/src/main/java/org/apache/celeborn/common/network/util/IOMode.java 
b/common/src/main/java/org/apache/celeborn/common/network/util/IOMode.java
index 7d2ddd895..ed66464c6 100644
--- a/common/src/main/java/org/apache/celeborn/common/network/util/IOMode.java
+++ b/common/src/main/java/org/apache/celeborn/common/network/util/IOMode.java
@@ -17,11 +17,12 @@
 
 package org.apache.celeborn.common.network.util;
 
-/**
- * Selector for which form of low-level IO we should use. NIO is always 
available, while EPOLL is
- * only available on Linux. AUTO is used to select EPOLL if it's available, or 
NIO otherwise.
- */
+/** Selector for which form of low-level IO we should use. */
 public enum IOMode {
+  /** Java NIO (Selector), cross-platform portable */
   NIO,
-  EPOLL
+  /** Native EPOLL via JNI, Linux only */
+  EPOLL,
+  /** Native KQUEUE via JNI, MacOS/BSD only */
+  KQUEUE
 }
diff --git 
a/common/src/main/java/org/apache/celeborn/common/network/util/NettyUtils.java 
b/common/src/main/java/org/apache/celeborn/common/network/util/NettyUtils.java
index 2f04179d7..109328233 100644
--- 
a/common/src/main/java/org/apache/celeborn/common/network/util/NettyUtils.java
+++ 
b/common/src/main/java/org/apache/celeborn/common/network/util/NettyUtils.java
@@ -36,6 +36,9 @@ import io.netty.channel.ServerChannel;
 import io.netty.channel.epoll.EpollEventLoopGroup;
 import io.netty.channel.epoll.EpollServerSocketChannel;
 import io.netty.channel.epoll.EpollSocketChannel;
+import io.netty.channel.kqueue.KQueueEventLoopGroup;
+import io.netty.channel.kqueue.KQueueServerSocketChannel;
+import io.netty.channel.kqueue.KQueueSocketChannel;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.channel.socket.nio.NioSocketChannel;
@@ -47,7 +50,10 @@ import org.apache.celeborn.common.CelebornConf;
 import org.apache.celeborn.common.metrics.source.AbstractSource;
 import org.apache.celeborn.common.util.JavaUtils;
 
-/** Utilities for creating various Netty constructs based on whether we're 
using EPOLL or NIO. */
+/**
+ * Utilities for creating various Netty constructs based on whether we're 
using NIO, EPOLL, or
+ * KQUEUE.
+ */
 public class NettyUtils {
   private static final ByteBufAllocator[] _sharedByteBufAllocator = new 
ByteBufAllocator[2];
   private static final ConcurrentHashMap<String, Integer> allocatorsIndex =
@@ -80,6 +86,8 @@ public class NettyUtils {
             : new NioEventLoopGroup(numThreads, threadFactory);
       case EPOLL:
         return new EpollEventLoopGroup(numThreads, threadFactory);
+      case KQUEUE:
+        return new KQueueEventLoopGroup(numThreads, threadFactory);
       default:
         throw new IllegalArgumentException("Unknown io mode: " + mode);
     }
@@ -92,6 +100,8 @@ public class NettyUtils {
         return NioSocketChannel.class;
       case EPOLL:
         return EpollSocketChannel.class;
+      case KQUEUE:
+        return KQueueSocketChannel.class;
       default:
         throw new IllegalArgumentException("Unknown io mode: " + mode);
     }
@@ -104,6 +114,8 @@ public class NettyUtils {
         return NioServerSocketChannel.class;
       case EPOLL:
         return EpollServerSocketChannel.class;
+      case KQUEUE:
+        return KQueueServerSocketChannel.class;
       default:
         throw new IllegalArgumentException("Unknown io mode: " + mode);
     }
diff --git 
a/common/src/main/java/org/apache/celeborn/common/network/util/TransportConf.java
 
b/common/src/main/java/org/apache/celeborn/common/network/util/TransportConf.java
index 55b22306d..26a0ce25e 100644
--- 
a/common/src/main/java/org/apache/celeborn/common/network/util/TransportConf.java
+++ 
b/common/src/main/java/org/apache/celeborn/common/network/util/TransportConf.java
@@ -20,6 +20,7 @@ package org.apache.celeborn.common.network.util;
 import java.io.File;
 
 import io.netty.channel.epoll.Epoll;
+import io.netty.channel.kqueue.KQueue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -44,9 +45,11 @@ public class TransportConf {
     return module;
   }
 
-  /** IO mode: nio or epoll */
+  /** IO mode: NIO, EPOLL, or KQUEUE */
   public String ioMode() {
-    return Epoll.isAvailable() ? celebornConf.networkIoMode(module) : 
IOMode.NIO.name();
+    return Epoll.isAvailable() || KQueue.isAvailable()
+        ? celebornConf.networkIoMode(module)
+        : IOMode.NIO.name();
   }
 
   /** If true, we will prefer allocating off-heap byte buffers within Netty. */
diff --git 
a/common/src/main/scala/org/apache/celeborn/common/CelebornConf.scala 
b/common/src/main/scala/org/apache/celeborn/common/CelebornConf.scala
index 2fa19f5e3..010cd57a4 100644
--- a/common/src/main/scala/org/apache/celeborn/common/CelebornConf.scala
+++ b/common/src/main/scala/org/apache/celeborn/common/CelebornConf.scala
@@ -28,6 +28,7 @@ import scala.util.Try
 import scala.util.matching.Regex
 
 import io.netty.channel.epoll.Epoll
+import io.netty.channel.kqueue.KQueue
 
 import 
org.apache.celeborn.common.authentication.AnonymousAuthenticationProviderImpl
 import org.apache.celeborn.common.client.{ApplicationInfoProvider, 
DefaultApplicationInfoProvider}
@@ -543,7 +544,9 @@ class CelebornConf(loadDefaults: Boolean) extends Cloneable 
with Logging with Se
   def networkIoMode(module: String): String = {
     get(
       NETWORK_IO_MODE.key.replace("<module>", module),
-      if (Epoll.isAvailable) IOMode.EPOLL.name() else IOMode.NIO.name())
+      if (Epoll.isAvailable) { IOMode.EPOLL.name() }
+      else if (KQueue.isAvailable) { IOMode.KQUEUE.name() }
+      else { IOMode.NIO.name() })
   }
 
   def networkIoPreferDirectBufs(module: String): Boolean = {
@@ -2089,10 +2092,12 @@ object CelebornConf extends Logging {
   val NETWORK_IO_MODE: OptionalConfigEntry[String] =
     buildConf("celeborn.<module>.io.mode")
       .categories("network")
-      .doc("Netty EventLoopGroup backend, available options: NIO, EPOLL. If 
epoll mode is available, the default IO mode is EPOLL; otherwise, the default 
is NIO.")
+      .doc("Netty EventLoopGroup backend, available options: NIO, EPOLL, 
KQUEUE. " +
+        "For Linux environments, EPOLL is used if available before using NIO. 
" +
+        "For MacOS/BSD environments, KQUEUE is used if available before using 
NIO.")
       .stringConf
       .transform(_.toUpperCase)
-      .checkValues(Set(IOMode.NIO.name(), IOMode.EPOLL.name()))
+      .checkValues(Set(IOMode.NIO.name(), IOMode.EPOLL.name(), 
IOMode.KQUEUE.name()))
       .createOptional
 
   val NETWORK_IO_PREFER_DIRECT_BUFS: ConfigEntry[Boolean] =
diff --git a/docs/configuration/network.md b/docs/configuration/network.md
index ec809f57d..2cdad5aa0 100644
--- a/docs/configuration/network.md
+++ b/docs/configuration/network.md
@@ -29,7 +29,7 @@ license: |
 | celeborn.&lt;module&gt;.io.connectionTimeout | &lt;value of 
celeborn.network.timeout&gt; | false | Connection active timeout. If setting 
<module> to `rpc_app`, works for shuffle client. If setting <module> to 
`rpc_service`, works for master or worker. If setting <module> to `data`, it 
works for shuffle client push and fetch data. If setting <module> to `push`, it 
works for worker receiving push data. If setting <module> to `replicate`, it 
works for replicate server or client of worker  [...]
 | celeborn.&lt;module&gt;.io.lazyFD | true | false | Whether to initialize 
FileDescriptor lazily or not. If true, file descriptors are created only when 
data is going to be transferred. This can reduce the number of open files. If 
setting <module> to `fetch`, it works for worker fetch server. |  |  | 
 | celeborn.&lt;module&gt;.io.maxRetries | 3 | false | Max number of times we 
will try IO exceptions (such as connection timeouts) per request. If set to 0, 
we will not do any retries. If setting <module> to `data`, it works for shuffle 
client push and fetch data. If setting <module> to `replicate`, it works for 
replicate client of worker replicating data to peer worker. If setting <module> 
to `push`, it works for Flink shuffle client push data. |  |  | 
-| celeborn.&lt;module&gt;.io.mode | &lt;undefined&gt; | false | Netty 
EventLoopGroup backend, available options: NIO, EPOLL. If epoll mode is 
available, the default IO mode is EPOLL; otherwise, the default is NIO. |  |  | 
+| celeborn.&lt;module&gt;.io.mode | &lt;undefined&gt; | false | Netty 
EventLoopGroup backend, available options: NIO, EPOLL, KQUEUE. For Linux 
environments, EPOLL is used if available before using NIO. For MacOS/BSD 
environments, KQUEUE is used if available before using NIO. |  |  | 
 | celeborn.&lt;module&gt;.io.numConnectionsPerPeer | 1 | false | Number of 
concurrent connections between two nodes. If setting <module> to `rpc_app`, 
works for shuffle client. If setting <module> to `rpc_service`, works for 
master or worker. If setting <module> to `data`, it works for shuffle client 
push and fetch data. If setting <module> to `replicate`, it works for replicate 
client of worker replicating data to peer worker. |  |  | 
 | celeborn.&lt;module&gt;.io.preferDirectBufs | true | false | If true, we 
will prefer allocating off-heap byte buffers within Netty. If setting <module> 
to `rpc_app`, works for shuffle client. If setting <module> to `rpc_service`, 
works for master or worker. If setting <module> to `data`, it works for shuffle 
client push and fetch data. If setting <module> to `push`, it works for worker 
receiving push data. If setting <module> to `replicate`, it works for replicate 
server or client of w [...]
 | celeborn.&lt;module&gt;.io.receiveBuffer | 0b | false | Receive buffer size 
(SO_RCVBUF). Note: the optimal size for receive buffer and send buffer should 
be latency * network_bandwidth. Assuming latency = 1ms, network_bandwidth = 
10Gbps buffer size should be ~ 1.25MB. If setting <module> to `rpc_app`, works 
for shuffle client. If setting <module> to `rpc_service`, works for master or 
worker. If setting <module> to `data`, it works for shuffle client push and 
fetch data. If setting <mod [...]
diff --git a/docs/migration.md b/docs/migration.md
index 81babe0ab..2c302a534 100644
--- a/docs/migration.md
+++ b/docs/migration.md
@@ -29,6 +29,8 @@ license: |
 
 - Since 0.7.0, Celeborn worker metrics `FlushDataTime` is renamed as 
`FlushLocalDataTime`.
 
+- Since 0.7.0, Celeborn changed the default value of 
`celeborn.<module>.io.mode` from `NIO` to `KQUEUE` if kqueue mode is available, 
falling back to `NIO` otherwise.
+
 # Upgrading from 0.5 to 0.6
 
 - Since 0.6.0, Celeborn deprecate 
`celeborn.client.spark.fetch.throwsFetchFailure`. Please use 
`celeborn.client.spark.stageRerun.enabled` instead.

Reply via email to