当前位置: 首页 > news >正文

使用io_uring

目录

升级内核以支持io_uring

Io_uring 关注点

有序性

IOPOLL

SQPOLL

环大小

wrk线程数量


升级内核以支持io_uring

#!/bin/bash#内核源码压缩包
kernel_targz="linux-5.14.21.tar.xz"#内核源码解压后的目录
kernel_source="linux-5.14.21"echo "解压${kernel_targz}中..."
xz -d -k ${kernel_targz}cd ${kernel_source}dnf -y install bison bc elfutils-devel make gcc-c++ flex openssl-devel dwarves rpmdevtools rsynccp -v /boot/config-$(uname -r) .configecho "CONFIG_IO_URING=y" >> .config
echo "CONFIG_TCM_QLA2XXX=y" >> .config
sed -ri 's,(CONFIG_SYSTEM_TRUSTED_KEYS=).*,\1"",' .config#make
make binrpm-pkg -j 10

Io_uring 关注点

通常sqe是独立使用的,这意味着一个sqe的执行不会影响环中后续sqe项的执行或排序, 使它们能够并行执行和完成,以获得最大的效率和性能

有序性

io_uring支持排出提交端队列,直到之前的所有完成都完成为止。这允许应用程序将上述同步操作排入队列,并知道在之前的所有命令都完成之前,它不会启动。这是通过在sqe标志字段中设置IOSQUE_IO_DRAIN来实现的

虽然IOSQUE_IO_DRAIN包括一个完整的管道屏障,但IO_uring还支持更细粒度的sqe序列控制, 其中每个sqe的执行取决于前一个sqe的成功完成, 要使用此功能,如果前一个sqe没有完全完成,则链将断开,链接的sqe将被取消应用程序必须在sqe标志字段中设置IOSQUE_IO_LINK, 如果设置,则在上一个sqe成功完成之前,不会启动下一个sqe。

IOPOLL

Polling

•主要节省来自于避免执行上下文切换

        –成本可能有所不同,但通常为0.5~2us或更多。。。

•与IRQ相比,延迟的相对改善取决于设备的典型命令执行时间

        –对于命令服务时间为毫秒或更长的磁盘驱动器,轮询毫无意义

•显然,对于速度极快的闪存SSD和新兴的NVM设备,轮询变得非常有趣

        –设备访问延迟接近或低于上下文切换成本这取决于您的系统和存储设备

要使用IO轮询,必须在传递给io_uring_setup(2)系统调用或传递给io_uring_queue_init(3)库帮助程序的标志中设置IORING_SETUP_IOPOLL。当使用轮询时,应用程序不能再检查CQ环尾是否有完成,因为不会有自动触发的异步硬件端完成事件。相反,应用程序必须通过调用io_uring_enter(2)来主动查找和获取这些事件,其中IORING_ENTER_GETEVENTS集和min_complete集为所需的事件数。IORING_ENTER_GETEVENTS设置和min_complete设置为0是合法的。对于轮询IO,这要求内核简单地检查驱动程序端的完成事件,而不是不断地循环这样做。

SQPOLL

要使用内核轮询功能,必须向io_uring_params标志成员特定的IORING_SETUP_SQPOLL注册io_uring实例,或者将其传递给io_uring_queue_init(3)。此外,如果应用程序希望将此线程限制为特定的CPU,也可以通过标记IORING_SETUP_SQ_AFF默认情况下,io_uring创建的异步工作进程将继承其父进程的CPU掩码。这通常是系统中的所有CPU,除非父CPU使用有限的集合运行。如果这不是期望的结果,那么应用程序可能会明确地告诉io_uring异步工作程序可以在哪些CPU上运行并将io_uring_params SQ_thread_CPU设置为所需的CPU来实现。请注意,使用IORING_SETUP_SQPOLL设置io_uring实例是一项特权操作。如果用户没有足够的权限,io_uring_queue_init3)将以-EPERM失败。

为了避免在io_uring实例处于非活动状态时浪费太多CPU,内核端线程将在空闲一段时间后自动进入睡眠状态。当这种情况发生时,线程将在SQ环标志成员中设置IORING_SQ_NEED_WAKEUP。设置好后,应用程序不能依赖内核自动查找新条目,然后必须使用IORING_ENTER_SQ_WAKEUP集调用io_uring_enter(2)。应用程序端逻辑通常如下所示:

/*
* need to call io_uring_enter() to make the kernel notice the new IO
* if polled and the thread is now sleeping.
*/
if ((*sqring→flags) & IORING_SQ_NEED_WAKEUP)
{io_uring_enter(ring_fd, to_submit, to_wait, IORING_ENTER_SQ_WAKEUP);
}

只要应用程序继续驱动IO,IORING_SQ_NEED_WAKEUP就永远不会被设置,我们可以在不执行单个系统调用的情况下有效地执行IO。然而,重要的是在应用程序中始终保持与上述类似的逻辑,以防线程进入睡眠状态。空闲前的特定宽限期可以通过设置io_uring_params sq_thread_idle成员来配置。该值以毫秒为单位。如果未设置此成员,内核将默认为线程进入睡眠状态之前的一秒钟空闲时间。

环大小

默认情况下,io_uring将创建的无边界工作者限制为 RLIMIT_NPROC(6)设置的最大处理器计数,并且有边界工作者是SQ环大小和系统中CPU数量的函数。有时,这可能会过多(或过少,对于有界),而此命令提供了一种更改每个环(每个NUMA节点)计数的方法。

arg必须设置为指向两个值的数组的无符号int指针,其中数组中的值设置为每个NUMA节点的最大工作者数。索引0包含有界工作者计数,索引1包含无界工作者计数。成功返回时,传入的数组将包含每个类型以前的最大valyes。如果传入的计数为0,则该命令返回当前最大值,并且不修改当前设置。nr_args必须设置为2,因为该命令有两个值。

wrk线程数量

存在多个工作线程的情况下,将创建多少个工作线程?

这取决于程序是单线程还是多线程。

io_urings在单线程情况下,如果主线程创建两个io_urings,并将每个io_uring配置为最多有两个未绑定的工作线程,则总共将生成两个工作线程

而在多线程程序的情况下,两个线程每创建一个io_uring,每个环最多有两个未绑定的工作线程总共将生成四个工作线程 - 每个程序线程两个。这反映在辅助角色名称 () 中的所有者线程 ID

每个线程都有自己的专用 I/O 工作线程池,为该线程操作的所有实例提供服务

设置会失败

相关文章:

使用io_uring

目录 升级内核以支持io_uring Io_uring 关注点 有序性 IOPOLL SQPOLL 环大小 wrk线程数量 升级内核以支持io_uring #!/bin/bash#内核源码压缩包 kernel_targz"linux-5.14.21.tar.xz"#内核源码解压后的目录 kernel_source"linux-5.14.21"echo "…...

LeetCode算法题解(回溯)|LeetCode93. 复原 IP 地址、LeetCode78. 子集、LeetCode90. 子集 II

一、LeetCode93. 复原 IP 地址 题目链接:93. 复原 IP 地址 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.…...

vue、react数据绑定的区别?

Vue 和 React 是两个流行的前端框架,它们在数据绑定方面有一些区别。 Vue 的数据绑定: Vue 使用双向数据绑定(two-way data binding)的概念。这意味着当数据发生变化时,视图会自动更新;同时,当…...

前端Vue 页面滑动监听 拿到滑动的坐标值

前言 前端Vue 页面滑动监听 拿到滑动的坐标值 实现 Vue2写法 mounted() {// 监听页面滚动事件window.addEventListener("scroll", this.scrolling);}, methods: { scrolling() {// 滚动条距文档顶部的距离let scrollTop window.pageYOffset ||document.documentE…...

CSS实现鼠标移至图片上显示遮罩层及文字效果

效果图&#xff1a; 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…...

【OpenCV实现图像:图像处理技巧之空间滤波】

文章目录 概要导入库空间过滤器模板展示效果分析与总结 概要 空间滤波器是数字图像处理中的基本工具之一。它通过在图像的每个像素位置上应用一个特定的滤波模板&#xff0c;根据该位置周围的相邻像素值进行加权操作&#xff0c;从而修改该像素的值。这种加权操作能够突出或模…...

载波通讯电表的使用年限是多久?

随着科技的飞速发展&#xff0c;智能家居、物联网等概念逐渐深入人心&#xff0c;载波通讯电表作为一种新型的智能电表&#xff0c;凭借其低功耗、高可靠性、远程通讯等优点&#xff0c;广泛应用于居民用电、工业生产等领域。那么&#xff0c;载波通讯电表的使用年限是多久呢&a…...

微信小程序多端应用 Donut 多端编译

目前支持 wxml、wxs、js/ts、json&#xff0c;less/sass 等文件类型&#xff0c;资源支持通过配置区分不同平台 wxml中使用 <!-- #if MP --><view class"test-view">wechat</view><!-- #elif IOS --><view class"test-view"…...

调试 Mahony 滤波算法的思考 10

调试 Mahony 滤波算法的思考 1. 说在前面的2.Mahony滤波算法的核心思想3. 易懂的理解 Mahony 滤波算法的过程4. 其他的一些思考5. 民间 9轴评估板 1. 说在前面的 之前调试基于QMI8658 6轴姿态解算的时候&#xff0c;我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让…...

Bean——IOC(Github上有代码)

源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中&#xff0c;需要用到Json的消息转换器&#xff0c;这是第三方的Bean对象&#xff0c;所以不能用Component&#xff0c;而要用Bean …...

功能更新|Leangoo领歌免费敏捷工具支持SAFe大规模敏捷框架

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo可以支持敏捷研发管理全流程&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xf…...

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…...

交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装

DX系列信号继电器由矩形脉冲激磁&#xff0c;磁钢保持。本继电器为双绕组。工作线圈可为电压型&#xff0c;亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲&#xff0c;亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…...

SpringCloudAlibaba系列之Nacos配置管理

目录 说明 认识配置中心 Nacos架构图 Nacos配置管理实现原理 核心源码分析-客户端 核心源码分析-服务端 配置修改的实时通知 主流配置中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos配置中心的一些实现&#xff0c;很多细节没有涉及&#…...

Kyligence Copilot 亮相第六届进博会,增添数智新活力

11月5日&#xff0c;第六届中国国际进口博览会&#xff08;以下简称“进博会”&#xff09;在上海国家会展中心盛大启幕&#xff0c;众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康&#xff08;AstraZeneca&#xff09;合作伙伴&#xff0c;跬智信息&#xff08;Kyli…...

MySQL 批量修改表的列名为小写

1、获取脚本 SELECT concat( alter table , TABLE_NAME, change column , COLUMN_NAME, , lower( COLUMN_NAME ), , COLUMN_TYPE, comment \, COLUMN_COMMENT, \; ) AS 脚本 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA 数据库名 and TABLE_NAME表名-- 大写是up…...

ElasticSearch 查询方法示例 java

public List<PricePolicyConditionDTO> queryEs(OrderPriceOutDTO param, List<String> materialCodeList, List<String> categoryCodeList) {BoolQueryBuilder mainQueryBoolBuilder new BoolQueryBuilder();//销售组织if (CharSequenceUtil.isNotEmpty(pa…...

5G毫米波通信中的关键技术

随着5G技术的快速发展&#xff0c;毫米波通信作为其中的一项重要技术&#xff0c;在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术&#xff0c;包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…...

2.3.3 交换机的RSTP技术

实验2.3.3 交换机的RSTP技术 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.交换机的基本配置。2.开启交换机的STP。3.配置SW3A和SW3B上STP的优先级。将SW3A配置为根交换机&#xff0c;SW3B配置为备用根交换机。4.配置SW2A和SW2B的边缘接口 六、任务验收七、…...

国外访问学者/博士后留学人员反诈骗指南

访问学者/博士后/联合培养博士人员出国后&#xff0c;对当地环境及政策不熟悉&#xff0c;需要提高防范意识&#xff0c;为此&#xff0c;知识人网小编特整理这篇反诈骗指南&#xff0c;提醒留学人员防微杜渐、未雨绸缪。 近日&#xff0c;多国使馆发布相关提醒&#xff1a;不法…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...