其他
io_uring vs epoll ,谁在网络编程领域更胜一筹?
本文作者:王小光,「高性能存储技术SIG」核心成员。
背景
https://github.com/axboe/liburing/issues/189
评估模型
io_uring 版 echo server 开销度量
实际度量
用户态内核态系统调用上下文切换开销
epoll 模型下 send(2)/recv(2) 内核侧开销
BEGIN
{
@start = 0;
@send_time = 0;
@send_count = 0;
}
kprobe:__sys_sendto
/comm == "epoll_echo_serv"/
{
@start = nsecs;
}
kprobe:__sys_recvfrom
/comm == "epoll_echo_serv"/
{
@start = nsecs;
}
kretprobe:__sys_sendto
/comm == "epoll_echo_serv"/
{
if (@start > 0) {
@delay = nsecs - @start;
@send_time = @delay + @send_time;
@send_count = @send_count + 1;
}
}
kretprobe:__sys_recvfrom
/comm == "epoll_echo_serv"/
{
if (@start > 0) {
@delay = nsecs - @start;
@send_time = @delay + @send_time;
@send_count = @send_count + 1;
}
}
interval:s:5
{
printf("time: %llu\n", @send_time / @send_count);
@send_time = 0;
@send_count = 0;
}
io_uring 模型下 io_uring_enter(2) 内核侧开销
BEGIN
{
@start = 0;
@send_time = 0;
@send_count = 0;
}
kprobe:io_submit_sqes
/comm == "io_uring_echo_s"/
{
@start = nsecs;
@send_count = @send_count + arg1;
}
kretprobe:io_submit_sqes
/comm == "io_uring_echo_s"/
{
if (@start > 0) {
@delay = nsecs - @start;
@send_time = @delay + @send_time;
}
}
interval:s:5
{
printf("time: %llu\n", @send_time / @send_count);
@send_time = 0;
@send_count = 0;
}
数据量化分析
cpu 漏洞缓解未使能
cpu 漏洞缓解使能
结论
高性能存储技术SIG :致力于存储栈性能挖掘化,打造标准的高性能存储技术软件栈,推动软硬件协同发展。
欢迎更多开发者加入SIG:
网址:https://openanolis.cn/sig/high-perf-storage
邮件列表:storage@lists.openanolis.cn
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】拉你入群;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!
龙蜥社区(OpenAnolis)是由企事业单位、高等院校、科研单位、非营利性组织、个人等按照自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux上游发行版社区及创新平台。
短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 替代版,重新构建一个兼容国际 Linux 主流厂商发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。
龙蜥OS 8.4已发布,支持 x86_64 、ARM64、LoongArch 架构,完善适配 Intel、飞腾、海光、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。
欢迎下载:
https://openanolis.cn/download
加入我们,一起打造面向未来的开源操作系统!
https://openanolis.cn