使用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_init(3)将以-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实现鼠标移至图片上显示遮罩层及文字效果
效果图: 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…...

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

载波通讯电表的使用年限是多久?
随着科技的飞速发展,智能家居、物联网等概念逐渐深入人心,载波通讯电表作为一种新型的智能电表,凭借其低功耗、高可靠性、远程通讯等优点,广泛应用于居民用电、工业生产等领域。那么,载波通讯电表的使用年限是多久呢&a…...
微信小程序多端应用 Donut 多端编译
目前支持 wxml、wxs、js/ts、json,less/sass 等文件类型,资源支持通过配置区分不同平台 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轴姿态解算的时候,我对Mahony滤波的认识还比较浅薄。初次的学习和代码的移植让…...

Bean——IOC(Github上有代码)
源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中,需要用到Json的消息转换器,这是第三方的Bean对象,所以不能用Component,而要用Bean …...

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

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

交流信号继电器 DX-31BJ/AC220V JOSEF约瑟 电压启动 面板嵌入式安装
DX系列信号继电器由矩形脉冲激磁,磁钢保持。本继电器为双绕组。工作线圈可为电压型,亦可为电流型。复归线圈为电压型。继电器的工作电流或工作电压为长脉冲,亦可为脉冲不小于20mS的短脉冲。 系列型号 DX-31B信号继电器DX-31BJ信号继电器 D…...

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

Kyligence Copilot 亮相第六届进博会,增添数智新活力
11月5日,第六届中国国际进口博览会(以下简称“进博会”)在上海国家会展中心盛大启幕,众多新科技、新成果、新展品亮相本届进博会。作为阿斯利康(AstraZeneca)合作伙伴,跬智信息(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技术的快速发展,毫米波通信作为其中的一项重要技术,在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术,包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…...

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

国外访问学者/博士后留学人员反诈骗指南
访问学者/博士后/联合培养博士人员出国后,对当地环境及政策不熟悉,需要提高防范意识,为此,知识人网小编特整理这篇反诈骗指南,提醒留学人员防微杜渐、未雨绸缪。 近日,多国使馆发布相关提醒:不法…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...