alibaba / tengine

A distribution of Nginx with some advanced features
https://tengine.taobao.org
BSD 2-Clause "Simplified" License
12.83k stars 2.52k forks source link

xudp支持哪些Anolis 系统? // Which versions of Anolis system does xudp support? #1831

Closed ff2035 closed 1 year ago

ff2035 commented 1 year ago
  1. Alibaba Cloud Linux是基于龙蜥社区(OpenAnolis) 龙蜥操作系统(Anolis OS)的阿里云发行版, 是否支持xudp? 对系统版本有什么要求?
  2. Anolis 多内核RHCK(RHEL Compatible Kernel)和ANCK(OpenAnolis Cloud Kernel),是否两个内核都支持xudp?对系统版本有什么要求?
ff2035 commented 1 year ago

目前文档并没有说清楚 http://tengine.taobao.org/document_cn/xudp_cn.html : 目前,xudp能力仅在Anolis系统上支持(注意:需要宿主机和docker都是Anolis操作系统才能支持xudp特性)。

fengidri commented 1 year ago

hello, 我是阿里云操作系统开发团队的同学。Alibaba Cloud Linux 及 OpenAnolis OS 都支持 xudp。4.19 内核及 5.10 内核都可以支持。 我们在很早之前就已经完成了这一块的工作。内核要求是 ANCK。RHCK是不支持的。另外, 我们目前只保障在阿里云上可以正常运行。

xudp 是 Express UDP 与 tengine 连接的一个模块。Expree UDP 是一个独立的 UDP 加速方案。 阿里云实践 这个文档可以参考。 如果 Expree UDP 可以正常运行, tengine + xudp 就没有问题了。

对于 docker 的情况下, 确实要求宿主机要支持才可以。

ff2035 commented 1 year ago

hello, 我是阿里云操作系统开发团队的同学。Alibaba Cloud Linux 及 OpenAnolis OS 都支持 xudp。4.19 内核及 5.10 内核都可以支持。 我们在很早之前就已经完成了这一块的工作。内核要求是 ANCK。RHCK是不支持的。另外, 我们目前只保障在阿里云上可以正常运行。

xudp 是 Express UDP 与 tengine 连接的一个模块。Expree UDP 是一个独立的 UDP 加速方案。 阿里云实践 这个文档可以参考。 如果 Expree UDP 可以正常运行, tengine + xudp 就没有问题了。

对于 docker 的情况下, 确实要求宿主机要支持才可以。

这边按照上面的文档有安装了Express UDP, 但在tengine里编译 :

./configure --prefix=/usr/local/nginx --with-xquic-inc="../xquic-1.6.0/include" --with-xquic-lib="../xquic-1.6.0/build" --with-http_v2_module --without-http_rewrite_module --add-module=modules/ngx_http_xquic_module --with-openssl="../Tongsuo-8.3.2" --with-http_realip_module --with-http_geoip_module --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-luajit-lib=/usr/local/luajit/lib/ --with-luajit-inc=/usr/local/luajit/include/luajit-2.1/ --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_geoip_module --with-stream_sni --add-module=../ngx_cache_purge-2.5.3 --add-module=../ngx_devel_kit-0.3.0 --add-module=../lua-nginx-module-0.10.12 --add-module=../headers-more-nginx-module-0.34 --add-module=../nginx-module-vts-0.2.1 --add-module=./modules/ngx_http_upstream_dynamic_module --add-module=./modules/ngx_http_upstream_check_module --add-module=./modules/ngx_http_upstream_vnswrr_module --add-module=./modules/mod_xudp

到mod_xudp 模块时提示以下内容: adding module in ./modules/mod_xudp checking for xudp ... not found ./configure: error: xudp library not found.

xudp library 文件确认是有的, 在/lib64/ 目录 和 /usr/local/lib64/ 目录下都有

[root@test tengine]# ll /lib64/libxudp.* -rw-r--r-- 1 root root 928350 Aug 3 15:40 /lib64/libxudp.a -rwxr-xr-x 1 root root 575512 Aug 3 15:40 /lib64/libxudp.so -rwxr-xr-x 1 root root 575512 Aug 3 15:40 /lib64/libxudp.so.1 -rwxr-xr-x 1 root root 575512 Aug 3 15:40 /lib64/libxudp.so.1.0.2

请问是还有什么遗漏吗?

drawing commented 1 year ago

@ff2035 config 检查的时候会尝试编译一个简单例子,编译不通过会提示这个,也可能是头文件没有找到,可以使用 --with-xudp-lib= 和 --with-xudp-inc= 显示指定一下 xudp 的库文件和头文件。

https://github.com/alibaba/tengine-ingress/blob/master/images/tengine/rootfs/build.sh#L313

上面这里有个完整的编译例子可以参考一下

ff2035 commented 1 year ago

@ff2035 config 检查的时候会尝试编译一个简单例子,编译不通过会提示这个,也可能是头文件没有找到,可以使用 --with-xudp-lib= 和 --with-xudp-inc= 显示指定一下 xudp 的库文件和头文件。

https://github.com/alibaba/tengine-ingress/blob/master/images/tengine/rootfs/build.sh#L313

上面这里有个完整的编译例子可以参考一下

加了这两个选项: --with-xudp-lib= 和 --with-xudp-inc= 还是一样的,

 ./configure --prefix=/usr/local/nginx  \
--with-xquic-inc="../xquic-1.6.0/include" \ 
--with-xquic-lib="../xquic-1.6.0/build"  \
--with-http_v2_module  \
--without-http_rewrite_module \ 
--add-module=modules/ngx_http_xquic_module  \
--with-openssl="../Tongsuo-8.3.2"  \
--with-http_realip_module  \
--with-http_geoip_module  \
--with-http_stub_status_module  \ 
--with-http_ssl_module  \
--with-http_gzip_static_module  \
--with-luajit-lib=/usr/local/luajit/lib/ \ 
--with-luajit-inc=/usr/local/luajit/include/luajit-2.1/  \
--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib \ 
--with-stream  \
--with-stream_realip_module  \
--with-stream_ssl_module  \
--with-stream_geoip_module \ 
--with-stream_sni  \
--add-module=../ngx_cache_purge-2.5.3  \
--add-module=../ngx_devel_kit-0.3.0  \
--add-module=../lua-nginx-module-0.10.12  \ 
--add-module=../headers-more-nginx-module-0.34  \ 
--add-module=../nginx-module-vts-0.2.1  \
--add-module=./modules/ngx_http_upstream_dynamic_module  \
--add-module=./modules/ngx_http_upstream_check_module  \
--add-module=./modules/ngx_http_upstream_vnswrr_module \ 
--add-module=./modules/mod_xudp \
--with-xudp-lib="/usr/local/lib64/"  \
--with-xudp-inc="/usr/local/include/" \ 
--with-xquic_xdp-inc="/usr/local/lib64/xquic_xdp/"

##到mod_xudp 模块时提示以下内容:
adding module in ./modules/mod_xudp
checking for xudp ... not found
./configure: error: xudp library not found.

有参考了上面文档这部份操作:

if [[ ${WITH_XUDP} == "1" ]]; then
    # build xudp library
    get_src_local "/source/libxudp-v$XUDP_LIB_VERSION.tar.gz"
    cd "$BUILD_PATH/libxudp-v$XUDP_LIB_VERSION"
    make
    cp "$BUILD_PATH/libxudp-v$XUDP_LIB_VERSION/objs/libxudp.so.$XUDP_LIB_VERSION" /usr/local/lib/
    cd /usr/local/lib/
    ln -s -f libxudp.so.$XUDP_LIB_VERSION libxudp.so.1
    ln -s -f libxudp.so.$XUDP_LIB_VERSION libxudp.so

    # build xquic-xdp
    cd "$BUILD_PATH/tengine-$TENGINE_VERSION/modules/mod_xudp/xquic-xdp"
    make config root="$BUILD_PATH/libxudp-v$XUDP_LIB_VERSION"
    make
    mkdir -p /usr/local/lib64/xquic_xdp/
    cp kern_xquic.o /usr/local/lib64/xquic_xdp/kern_xquic.o
    WITH_XUDP_MODULE="--with-xudp-inc=$BUILD_PATH/libxudp-v$XUDP_LIB_VERSION/objs \
        --with-xudp-lib=$BUILD_PATH/libxudp-v$XUDP_LIB_VERSION/objs \
        --with-xquic_xdp-inc=$BUILD_PATH/tengine-$TENGINE_VERSION/modules/mod_xudp/xquic-xdp \
        --add-module=modules/mod_xudp"
fi

按上面的配置,加了--with-xudp-inc --with-xudp-lib --with-xquic_xdp-inc 三个参数还是一样的结果。

阿里云ECS,操作系统是 Alibaba Cloud Linux 版本 3.2104

ff2035 commented 1 year ago

--with-xquic_xdp-inc=./modules/mod_xudp/xquic-xdp/

改成这样后,./configure 通过了,不过make 的时候会报错:

`cc -c -I/usr/local/luajit/include/luajit-2.1/ -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -DNDK_SET_VAR -I src/core -I src/event -I src/event/modules -I src/os/unix -I src/proc -I modules/ngx_http_xquic_module -I ../xquic-1.6.0/include -I ../ngx_devel_kit-0.3.0/objs -I objs/addon/ndk -I ./modules/ngx_http_upstream_check_module -I ./modules/mod_xudp -I /usr/local/include/ -I ./modules/mod_xudp/xquic-xdp/ -I modules/ngx_http_lua_module/src/api -I ../Tongsuo-8.3.2/.openssl/include -I objs -I src/http -I src/http/modules -I src/http/v2 -I ../ngx_devel_kit-0.3.0/src -I ../ngx_devel_kit-0.3.0/src -I ../ngx_devel_kit-0.3.0/objs -I objs/addon/ndk -I /usr/local/luajit/include/luajit-2.1/ -I src/stream \ -o objs/addon/ngx_http_xquic_module/ngx_xquic_intercom.o \ modules/ngx_http_xquic_module/ngx_xquic_intercom.c

_modules/ngx_http_xquic_module/ngx_http_xquic.c:24:10: fatal error: ngx_http_lua_ssl_certby.h: No such file or directory 24 | #include _ | ^~~~~~~

compilation terminated. make[1]: [objs/Makefile:1877: objs/addon/ngx_http_xquic_module/ngx_http_xquic.o] Error 1 make[1]: Waiting for unfinished jobs.... make[1]: Leaving directory '/root/source/tengine' make: *** [Makefile:10: build] Error 2`

只要不添加lua模块的时候, 就没有问题了 所以想请教一下,ngx_http_xquic 模块和 lua 模块能共存吗?

drawing commented 1 year ago

@ff2035 可以共存的,这个头文件也是存在的,可以加一下 -I 包含一下头文件就好了

CC_OPT="-I modules/ngx_http_lua_module/src"

./configure \
  ...
  --with-cc-opt="${CC_OPT}"
ff2035 commented 1 year ago

@ff2035 可以共存的,这个头文件也是存在的,可以加一下 -I 包含一下头文件就好了

CC_OPT="-I modules/ngx_http_lua_module/src"

./configure \
  ...
  --with-cc-opt="${CC_OPT}"

加了这个可以了,感谢!!!