TGT服务器的优化connection,在单线程里做event loop多路复用。 • 多个target时,如果挂的设备多,一旦客户端请求量大,就会忙不过来。 • 开源界有尝试修改 • 例如sheepdog的开发者提交过一个patch,但是测试效果不理想,分析 原因,event loop依然是瓶颈对TGT的性能优化 • IO是使用多个epoll 线程,充分发挥多CPU能力 • 当前策略是每个target一个epoll线程,负责Initiator发过来的I/O • 管理平面不变。主线程里的事件循环及问题: 管理面是主线程,登录,增、删、改target,lun,session,connection,params 都在主线程,而target epoll 线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 • 不需要target list lock • 因为TEL线程只存取自己负责的target,不存取别的target,所以TEL线程 不需要target list lock。 • 管理面是单线程,只有它遍历target list,没有需要互斥的情况。FIO性能测试(配置)0 码力 | 15 页 | 637.11 KB | 6 月前3
Curve核心组件之Client - 网易数帆将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io task并放入任务队列 3. 放入任务队列后,异步请求发起成功,返回用户 IO拆分线程 4. 从任务队列取出任务后进行拆分 5. 拆分过程依赖元数据,可能会通过MDSClient向 MDS获取 6. 拆分成的子请求放入队列CLIENT IO线程模型 IO分发线程 7. 从队列中取出子请求准备发送 Chunkserver查询复制组leader 9. 发送写请求给Chunkserver BRPC线程 10.Chunkserver处理完成后返回RPC Response 11.用户请求的所有子请求完成后,调用 IOTracker::Done 12.调用异步请求回调,返回用户CLIENT IO请求重试 IO分发线程将拆分后的子请求通过RPC请求发往指定的Chunkserver上,RPC有可能会失败,一般情况下 Client接收到IO请求后,直接发送 异步RPC(在用户线程) 发送异步4K RPC的平均延迟在11.26us, 这种情况下单线程只有 89055 iops 发送RPC阻塞了用户线程,导致iops下降 优化点: 增加队列,用户请求放入队列,由后台线 程负责发送 86.4K -> 130KCLIENT性能优化 发送RPC耗时较长 增加发送线程个数 在bthread协程中使用std:0 码力 | 27 页 | 1.57 MB | 6 月前3
openEuler 22.03-LTS 技术白皮书copy_from_user 读操作时,发生内存多 bit 错误,系统不复位。可以通过杀掉受影响 的进程,而避免内核复位。 d) 支持 osnoise tracer:osnoise tracer 支持分析系统噪声对业务线程的干扰,可以清晰的找出干扰源。 内存分级扩展 当前内存制造工艺已经达到瓶颈,生态发展让每个 CPU 核的成本越来越低。数据库、虚拟机、大数据、人工智能、深 度学习场景同时需要算力和内存的支持。内存容量成为了制约业务和算力的问题。 的支持,以帮助用户提升在鲲鹏 AArch64 服务器加解密业务的竞争力,较 JDK 原生加解密性能提升 90%。 • 支持 JMap 并行扫描(毕昇 JDK8 和 毕昇 JDK11 ):OpenJDK JMap 工具默认是单线程执行 Java 程序的 dump 操作,毕昇 JDK8 & JDK11 实现其并行化、增量式扫描,有效提升 JMap 在大堆场景的扫描速度,已支持 G1GC & ParallelGC & CMS。 • 支持应用线程绑核:支持应用读写线程与协议栈线程绑定到同一 numa,加速读写效率。 • 支持网卡多队列:支持使用网卡多队列分发报文,同一连接报文固定 CPU 处理,增加 Cache 命中率,提高读写速度。 • 支持 checksum 卸载:支持报文 checksum 卸载到网卡,降低 CPU 负载,加快报文处理速度。 • 支持 TCP 跨线程:协议栈线程与应用线程解耦,支持应用任意网络模型。0 码力 | 17 页 | 6.52 MB | 1 年前3
openEuler 24.03 LTS 技术白皮书最近的任务,从而保障任 务的调度时延, 解决了原有的 CFS 调度器只能公平分配任务运行时间,不能满足任务时延要求的问题。 • cgroup v2 特性:cgroup v2 相比 v1,具有统一的层级结构、更完善的线程模式管理、更安全的子树委派以及更丰富的特性支持。 1)统一层级结构: 简化 cgroup 的层级管理,用户不需要为不同的资源管理配置多个独立的 cgroup 树,降低多个控制器协同工作控制难度。提 资源竞争:cgroup v2 新增只有父 cgroup 内部无进程时才能启用子 cgroup 控制器的限制。 2)更完善的线程模式管理: cgroup-v2 引入线程模式(threaded),对可线程化管理的子系统进行限制。线程可以被独立于进程其他线程分配到不同的 cgroup 中,对单个线程的资源使用进行更精细的控制。 3)更安全的子树委派: 通过委派机制允许非特权用户创建和管理自己的 cgroup multi-buffer 支持:允许 Jumbo frame 场景下使用 XDP 提升性能。 • Thread-based NAPI polling 支持:允许网卡 NAPI polling 移到内核线程处理,使 CPU 调度器可以合理调度提升性能。 • bpf新增kfunc特性:允许bpf通过符号方式直接调用内核和ko提供的函数,ko可以通过注册kfunc的方式来动态提供bpf接口。 • bpf0 码力 | 45 页 | 6.18 MB | 1 年前3
Curve支持S3 数据缓存方案of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon 要提供truncate接口,可以由client直接修改inode的len,由metaserver的碎片整 理(马杰负责)模块进行truncate的无效数据清理 后台刷数据线程© XXX Page 4 of 9 启动后台线程,将写Cache定时刷到S3上,同时通过inodeManager更新inode缓存中的s3InfoList。具体细节见 本地磁盘缓存 如果有配置writeBack dev fileCacheManager,如果没有则生成新的fileCacheManager,解锁,调用fileCacheManager的Write函数。 2.考虑到同一个client同一个文件同时只能一个线程进行文件写,所以在Write函数中加写锁。 3.根据请求offset,计算出对应的chunk index和chunkPos。将请求拆分成多个chunk的WriteChunk调用。 4.在WriteC0 码力 | 9 页 | 179.72 KB | 6 月前3
Zabbix 7.0 中文手册机将立即被分配到组内的其他 proxy,实现 proxy 负载均衡和高可用。 了解更多信息, 参阅proxy 负载均衡和高可用。 多线程 在过渡到多线程架构的过程中,进行了以下一些更改: • 添加了一个新的配置参数:--with-stacksize。该参数允许覆盖系统使用的默认线程堆栈大小(以 kb 为单位)。 9 • 用户宏解析已从预处理管理器移至预处理工作进程。 在运行时检测 cURL 库特性 之前,每个网络发现规则都由一个发现进程处理。因此,规则内的所有服务检查只能按顺序执行。 在新版本中,网络发现进程已重新设计,以允许服务检查之间的并发性。已添加一个新的发现管理器进程,以及可配置数量的发现工作进 程(或线程)。 发现管理器处理发现规则,并为每个规则创建一个包含任务(服务检查)的发现作业。服务检查由发现工作进程接收并执行。只有那些具 有相同 IP 和端口的检查才会按顺序进行调度,因为某些设备可能不允许在相同端口上进行并发连接。 的详细信息,请查阅配置文件 章节。 启动脚本 这些脚本用于在系统启动和关闭期间自动启动和停止 Zabbix 进程。此脚本位于 misc/init.d 目录下。 服务器进程类型和线程 • agent poller - 用工作线程进行被动检查的异步轮询器 • alert manager - 告警队列管理器 • alert syncer - 告警的数据同步器 • alerter - - 发送通知的进程0 码力 | 1951 页 | 33.43 MB | 1 年前3
BRPC与UCX集成指南典型的RDMA栈28 UCX 编程的一些基本概念 ●Context –收集机器资源(内存,网卡等),在应用的各个部分共享 ●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 ●Tag –MPI使用 ●Stream –官方不推荐30 WORKER ●worker是UCX通讯中的核心概念,它是一个进度引擎(progress engine) ●worker既不是协程也不是线程,而是一个状态机,可以通过不停地调用 ucp_worker_progress(worker)完成功能。如果你用过libuv或者libevent的evbuffer,它们有点 像 proactor,使用 UCX作为选项38 Ucp Context ●只有一个全局对象,使用下列函数获取 ●UCP_Context* get_or_create_ucp_ctx() ●指定了FEATURE_AM, 多线程共享39 命令行参数控制context的属性 ●--brpc_ucp_error_mode缺省是none,是的本地通讯使用shared memory成为可能 ●--brpc_set_cpu_latency0 码力 | 66 页 | 16.29 MB | 6 月前3
Linux命令大全搜索工具 v1.8在指定时间执行一个任务 atop 监控Linux系统资源与进程的工具 atq 列出当前用户的at任务列表 atrm 删除待执行任务队列中的指定任务 awk 文本和数据进行处理的编程语言 axel 多线程下载工具 B badblocks 查找磁盘中损坏的区块 base64 base64 编码/解码文件或标准输入输出 basename 打印目录或者文件的基本名称 batch 在系统不繁忙的时候执行定时任务 在指定时间执行一个任务 atop 监控Linux系统资源与进程的工具 atq 列出当前用户的at任务列表 atrm 删除待执行任务队列中的指定任务 awk 文本和数据进行处理的编程语言 axel 多线程下载工具 A - 29 - 本文档使用 书栈网 · BookStack.CN 构建 Apache服务器的性能测试工具 ab命令 是一个测试你 Apache http 服务器的工具,你可以通过这个工具,指定一个单位时间内向 文本和数据进行处理的编程语言 - 99 - 本文档使用 书栈网 · BookStack.CN 构建 多线程下载工具 axel 是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地 址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。比如在 国内VPS或服务器上下载lnmp一键安装包用Axel就比wget快。 CentOS安装Axel:0 码力 | 1347 页 | 8.79 MB | 1 年前3
openEuler 22.03 LTS SP2 技术白皮书30 openEuler 22.03 LTS SP2 技术白皮书 特性增强 sysmonitor 功能 sysmonitor 是一款系统运维监控软件,支持监控系统磁盘、CPU、内存、进程 / 线程数量、句柄数量等系统资源使用 情况,支持监控关键进程并在其异常时将其恢复,支持监控文件系统异常,支持监控记录系统网卡和文件被操作日志,支 持自定义监控,执行用户监控动作。 适用于操作系统运维监 记录网卡的启停、增加和删除 ip 事件,并记录对应操作者。运维人员可以通过日志快速定位网卡变化的时间点、 操作者。 系统资源监控场景,sysmonitor 支持监控系统磁盘、CPU、内存、进程 / 线程数量、句柄数量等系统资源使用情况, 系统资源使用率超过配置阈值时,记录日志方便运维人员定位系统资源异常类问题。 关键进程监控场景,业务中关键进程的正常运行至关重要,进程难免因为系统或人为的原因导致异常奔溃,此时 自定义监控 文件系统监控 网卡状态监控 系统句柄数监控 关键进程监控 CPU 监控 磁盘 inode 监控 文件监控 内存监控 磁盘 io 延时监控 磁盘分区监控 进程数 / 线程数监控 僵尸进程监控 31 openEuler 22.03 LTS SP2 技术白皮书 特性增强 Gazelle 特性增强 Gazelle 是一款高性能用户态协议栈。它基于 DPDK 在用0 码力 | 48 页 | 5.62 MB | 1 年前3
Zabbix 3.4 中文手册inactive, wired, cached 被认为是使用的内存,因为他们存储一些有用的信息。 同样,inactive, cached, free 也被认为是可用内存,因为这些内存可以立即被分配给需要更多内存的线程。 所 以 不 活 动 的 内 存 是 同 时 可 以 是 使 用 和 可 用 的。 正 因 为 如 此, item vm.memory.size[used] 只 用 来 获 得 信 息, 监 控 项 监控项使用 name and cmdline 参数前, 你应该使用 proc.num[] 监控项和 ps 命令测试该参数。 Linux 内核线程 proc.mem[] 和 proc.num[] 监控项中的 cmdline 参数不可以使用线程 让我们以内核线程为例: $ ps -ef| grep kthreadd root 2 0 0 09:33 ? 00:00:00 [kthreadd] 可以用进程 “cmdline” 参数中指定的正则表达式,并将其应用于进程的内容 /proc//cmdline. 对于内核线程的 /proc/ /cmdline 文件是空的,所以, cmdline 参数不会匹配到。 proc.mem[] 和 proc.num[] 监控项中的线程计数 Linux 内核线程通过 proc.num[] 监控项计数,但是 proc.mem[] 监控项并不报告内存。例如: $ ps 0 码力 | 1757 页 | 12.63 MB | 1 年前3
共 54 条
- 1
- 2
- 3
- 4
- 5
- 6













