文档章节

【原创】CPU 隔离之任务分析

摩云飞
 摩云飞
发布于 2017/04/06 18:13
字数 968
阅读 313
收藏 9
点赞 0
评论 0

最近被分配了一个任务,任务描述很简单,就一句话:如何基于 packetbeat 分析 redis 的网路通信情况,而不对 redis 本身(CPU/Memory/Network)产生影响;

首先,需要回答一个问题:会产生什么影响?

通常来讲,运行抓包系统会占用 CPU 和 Memory 等资源,而 redis 本身对 CPU 和 Memory 使用也有较高要求,即希望资源都是自己的才好;

那也问题就变成了:redis 是怎么部署在服务器上运行的?对于 24 核或 32 核服务器,redis 是怎么使用的?

经过确认,我们会在一台 24 核的物理机上跑 8~10 个 redis 实例(分属不同 cluster),但没有对 cpu 和内存使用进行任何限制;换句话说,24 个 CPU 核心和 Memory 都处于“任君多采撷”状态;

由于 packetbeat 的内存占用相对 redis 来说基本可以忽略,因为后文只讨论 CPU ;

因此,我们可以得到的结论是:无论将 packetbeat 跑在哪个核心上,都会“占用一定的 redis 的资源”;

那么问题就变成了:允许百分之多少的 CPU 被 packetbeat 占用?

粗略估算结果如下:

  • 24 核心 CPU ,单核跑满相当于占用了 4.17% 的 CPU 资源;若占用两个 CPU 核心,则对应 8.34% ;
  • 我们的报警系统对 redis 的 CPU 报警设置为:单核占用达到 90% ,总体占用达到 40% ;
  • 对于业务比较繁忙的 redis 来说,CPU 占用能够达到整体 30% 左右;
  • 由此看来,即使跑满 2 个 CPU 核心也没什么大问题;

另外还有一个疑问:从 redis 的视角来看 24 个核心真的是完全等同的么?是否存在某种优先选择策略?

似乎这个问题又和 CPU 的硬件架构扯上了关系,即 SMPNUMA 都是怎么玩的;

经确认:我们线上机器的 CPU 架构都是 NUMA(由两个 node 构成),并且 redis 会倾向于使用 NUMA node1 中的 cpusets ,那么将 packetbeat 绑定到 NUMA node2 上运行应该是相对更合理的方式;

谈及绑定问题,原则上讲会涉及 CPU 绑定Memroy 绑定IRQ 绑定等等;因此,它们之前的关系及影响,以及部署考量都需要研究确认;

针对 CPU 绑定,即 CPU 亲缘性问题,存在多种处理方式:

  • taskset
  • numactl
  • isolcpus
  • cgroups

需要确认这些方式有何不同,应该使用哪种,为什么?

选定 CPU 绑定方式后,Memory 和 IRQ 绑定如何处理?IRQ 处理是否应该绑定到 CPU 亲缘性选择的相同 CPU 上么?

上述情况还只是一般性的讨论,对于基于 go 语言实现的 packetbeat 来说,由于 OS thread 的创建数量是由 runtime 自行决定的,而 goroutine 跑在哪个 OS thread 上则是由 go 运行时调度器决定的;packetbeat 的功能至少可以拆分为网络抓包功能抓包分析功能,而这两者基于多少 goroutine 实现,以及两者之间的相互影响(例如 CPU 跑高导致抓包时的丢包行为)都是应该考虑考虑的;总之,一般情况下,我们认为将 packetbeat 绑定到一组 cpu 上运行似乎是更好的选择;

现状如下:

  • redis 实例的运行尚未考虑 CPU 亲缘性问题;
  • 基于 taskset 控制 packetbeat 的 CPU 绑定,但理论上讲,无论如何绑定,总归会对 redis 产生一定影响;
  • 由于 redis 的网络流量非常大,万兆网卡跑满状态下,每秒大概要保存 1.2GB 数据,通常我们会抓取 10s 数据包,因为 12GB 的数据对于硬盘和带宽的影响都需要考虑;

© 著作权归作者所有

共有 人打赏支持
摩云飞
粉丝 367
博文 534
码字总数 952690
作品 0
徐汇
程序员
Hadoop YARN中内存和CPU两种资源的调度和隔离

Hadoop YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍YARN是如何对这些资源进行调度和隔离的。 在YARN中,资源管理由Res...

2k10
2015/03/21
0
0
hadoop、yarn和vcpu资源的配置

转载自:https://www.cnblogs.com/S-tec-songjian/p/5740691.html Hadoop YARN同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍...

李金泽
03/09
0
0
Hadoop YARN中内存和CPU两种资源的调度和隔离

同时支持内存和CPU两种资源的调度(默认只支持内存,如果想进一步调度CPU,需要自己进行一些配置),本文将介绍Hadoop YARN是如何对这些资源进行调度和隔离的。 在YARN中,资源管理由Resourc...

闵开慧
2014/07/09
440
0
阿里巴巴 Sigma 调度和集群管理系统架构详解

划重点 阿里巴巴 9 年双 11 经历下来,交易额增长了 280 倍、交易峰值增长 800 多倍、系统数呈现爆发式增长。系统在支撑双 11 过程中的复杂度和支撑难度以指数级形式上升。双 11 峰值的本质是...

阿里系统软件技术
04/19
0
0
颠覆大数据分析之Mesos:集群调度及管理系统

正如前面“Mesos:动机”一节中所述,Mesos的主要目标就是去帮助管理不同框架(或者应用栈)间的集群资源。比如说,有一个业务需要在同一个物理集群上同时运行Hadoop,Storm及Spark。这种情况...

douxn
2015/10/26
0
0
cgroup在ceph中的应用(1)

一、 Cgroup介绍1. Cgroup是什么Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最...

秦牧羊
2015/04/16
0
0
docker隔离与cgrep

研究cgroup的作用和基本用法: yum install libcgroup #控制cpu,内存,io示例 blkio : 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。 cpu : 这个子系统使用调...

青春掌柜
2016/06/01
0
0
YARN/MRv2 Resource Manager深入剖析—资源调度器

在YARN中,资源调度器(ResourceScheduler)是一个非常核心的部件,它负责将各个节点上的资源封装成container,并按照一定的约束条件(按队列分配,每个队列有一定的资源分配上限等)分配给各...

2k10
2015/03/21
0
0
线程?进程?-----该停下来思考一下了

多线程,当今在IT圈子内部最普遍的概念。有多少人理解它的实质,它的精髓?(我不甚懂,这篇文章只是在使劲往前冲的时候让我停下了,吃点有营养的东西,然后继续冲)甚至在多线程还没有完全吃...

晨曦之光
2012/04/10
86
0
MaxCompute预付费资源监控工具-CU管家使用教程

摘要: MaxCompute管家使用前提 1、用户购买了 MaxCompute 预付费CU资源,60CU以上的用户(备注:CU过小无法发挥计算资源及管家的优势)。 2、支持区域,MaxCompute 华北2北京、华东2上海、华...

阿里云云栖社区
02/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sparkstreaming and Kafka

简介 Kafka 0.10的Spark Streaming集成设计与0.8 Direct Stream方法类似。 它提供了简单的并行性,Kafka分区和Spark分区之间的1:1对应关系,以及对偏移量和元数据的访问。 但是,由于较新的...

舒运
10分钟前
0
0
java获取当前时间所在一周的周一和周日日期

/** * 当前时间所在一周的周一和周日时间 * @param time 当前时间 * @return */ public static Map getWeekDate(String time) { Map map = new HashedMap(); SimpleDateFormat sdf = new Si......

小弱鸡
38分钟前
0
0
Redis数据的导出和导入(dump和load方式)

网上有些文章已经不再适用,本人也是踩了些坑,在此记录下。 迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式...

iplusx
42分钟前
1
0
ElasticSearch 高亮显示大文档搜索结果

2016年12月,我们开始研究Ambar——一个文档搜索系统。Ambar使用ElasticSearch作为核心搜索引擎。 在Ambar开发的过程中,我们处理了很多与ES相关的问题,我们想分享我们得到的宝贵经验。让我...

九州暮云
今天
1
0
Python 使用 pywifi 模块 破解wifi密码

git https://github.com/awkman/pywifi 常见常量 from pywifi import const# Define interface status.IFACE_DISCONNECTED = 0IFACE_SCANNING = 1IFACE_INACTIVE = 2IFACE_CONNEC......

阿豪boy
今天
1
0
phpstorm使用Iedis

phpstorm的redis插件Iedis是真好用 看了网上挺多的文章,但是由于我系统还是ubuntu,就有点尴尬了,现在破解之后,留个笔记,即使自己之后有需要也可以很快翻阅 先下载资源 资源下载 zip压缩...

贤郎--均灵
今天
0
0
第三章 spring-bean之FactoryBeanRegistrySupport(4)

前言 从FactoryBeanRegistrySupport类的名字可以看出FactoryBeanRegistrySupport负责FactoryBean的注册与支持。如果想知道FactoryBean相关的资料,请阅读spring-bean中关于FactoryBean的解读...

鸟菜啊
今天
0
0
CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
今天
0
0
CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
今天
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部