6 天前 / 云水木石
全球的缺芯风潮愈演愈烈,也让很多中国人开始关注起芯片。谈到中国的国产 CPU,很多人都恨铁不成钢,“泱泱大国,怎么小小的芯片也做不好?人家的芯片都做到 i9 了,你们怎么还只有 i5 的水平?” 细细品味这些批评,是否有中国家长埋汰孩子的那种味道? 隔壁的 xxx,回回考试得第一,你怎么连前十都进不了? 我同事的儿子都考上清华了,你才考一个普通一本,以后怎么办啊? 大可不必这样,连普通的老百姓都认识到芯片的重要,国家会不知道吗?你以为国家智囊团都是吃白饭的吗? 其实,中国在多年前就已经开始布局 CPU 芯片,历经跌宕曲折...
16 天前 / Hollis
GitHub 19k Star 的 Java 工程师成神之路,不来了解一下吗!前段时间我们新上了一个新的应用,因为流量一直不大,集群 QPS 大概只有 5 左右,写接口的 rt 在 30ms 左右。 因为最近接入了新的业务,业务方给出的数据是日常 QPS 可以达到 2000,大促峰值 QPS 可能会达到 1 万。 所以,为了评估水位,我们进行了一次压测。压测在预发布环境执行。压测过程中发现,当单机 QPS 达到 200 左右时,接口的 rt 没有明显变化,但是 CPU 利用率急剧升高,直到被打满。 压测停止后,CPU 利用率立刻降了下来。 于是开始排查是什么导致了 CPU 的飙高。
46 天前 / sjf0115
本文属于 Flink 在生产环境的大规模 CPU 优化实战,大并发任务预计节省 30~50% 的 CPU 消耗。下文会详细分析优化相关的实现原理、问题定位以及优化过程。往往在做性能优化时就会发现:当已经定位到性能瓶颈时,很容易想到优化思路去解决或优化。但定位问题的过程其实是最难的,也就是找性能瓶颈的这个过程更具有意义。本文问题定位的过程以及用到的性能分析工具、命令可能对于广大的技术同学更有收益。 0、 结论 Flink 大并发任务(超过 500 并发)在使用 keyBy 或者 rebalance 的情况下,将 bufferTimeout 设置为 1s 可以节省 30~50% 的 CPU 消耗。
48 天前 / 横云断岭
一、背景大早上 线上 k8s 机子 某个机子 cpu 飙高,导致 k8s 健康检查失败,线上环境会自动执行 jstack,上传到 oss 通知到 钉钉告警群,直接分析锁、cpu 高的线程。 二、过程分析 2.1 排查 cpu 占用最高的线程使用 jstack分析: 发现占用 CPU 最高的线程栈是:org.apache.commons.beanutils.MethodUtils#getMatchingAccessibleMethod。 当然也可以使用 arthas 的thread -n 10命令 ,由于自动监控抓取的,省去了这一步了。
55 天前 / 果冻虾仁
首发于后台公论写文章并发吹剑录(一):CPU 缓存一致性协议 MESI 果冻虾仁百度 高级研发工程师 31 人赞同了该文章吹剑出自《庄子》:“夫吹管也,犹有也;吹剑首者,而已矣。” 吹剑只能发出小声,以示自谦。“并发吹剑录”,表达的是笔者斗胆讲一些并发编程有关的知识,由于涉及计算机体系架构,笔者才疏学浅,恐有错漏,望诸位不吝赐教,吾定当改之。 CPU 架构缓存与主存解读缓存一致性(Cache Coherency),先看一下 CPU 的架构 图示一个 4 核 CPU,有三个级别的缓存...
125 天前 / coredump
什么是 NUMA?早期的计算机,内存控制器还没有整合进 CPU,所有的内存访问都需要经过北桥芯片来完成。如下图所示,CPU 通过前端总线(FSB,Front Side Bus)连接到北桥芯片,然后北桥芯片连接到内存——内存控制器集成在北桥芯片里面。 这种架构被称为 UMA1(Uniform Memory Access, 一致性内存访问 ):总线模型保证了 CPU 的所有内存访问都是一致的,不必考虑不同内存地址之间的差异。 在 UMA 架构下,CPU 和内存之间的通信全部都要通过前端总线。而提高性能的方式,就是不断地提高 CPU、前端总线和内存的工作频率。
154 天前 / 哈扣
上一篇对 CPU 内部结构、CPU 指令集、SMP 和 NUMA 这三个方面做了简单介绍,这篇接着对如下两个知识点做介绍。 超线程与超频 CPU 缓存 1.超线程和超频 很多同学应该听说过超线程这个概念,注意:它与多线程不是一个东西哈。那什么是超线程呢? 通常情况下,一个 CPU 核心同一时刻只能处理一个线程,但是厂商为了能更好的利用 CPU 资源,充分的压榨 CPU 的能力,于是利用核心的寄存器给 CPU 核心多设置了一个上下文,每个上下文就可以运行一个线程,那么在逻辑上就相当于多了一个 CPU 核心,这就是超线程技术的原理。
172 天前 / reesunhuang
前言直接上,不多 BB 了。 正文 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。 CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的离 CPU 核心越近,访问速度也快,但是存储容量相对就会越小。其中,在多核心的 CPU 里,每个核心都有各自的 L1/L2 Cache,而 L3 Cache 是所有核心共享使用的。
181 天前 / 钟子敬07
前言代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。 CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的,那么如果 CPU 运算时,直接从 CPU Cache 读取数据,而不是从内存的话,运算速度就会很快。 但是,大多数人不知道 CPU Cache 的运行机制,以至于不知道如何才能够写出能够配合 CPU Cache 工作机制的代码,一旦你掌握了它,你写代码的时候,就有新的优化思路了。
184 天前 / openio
作者:jasonzxpan,腾讯 IEG 运营开发工程师 本文排查一个 Linux 机器 CPU 毛刺问题,排查过程中不变更进程状态、也不会影响线上服务,最后还对 CPU 毛刺带来的风险进行了分析和验证。 本文中提到 CPU 统计和产生 core 文件的工具详见 simple-perf-tools 仓库。 问题描述某服务所在机器统计显示,其 CPU 使用率在高峰时段出现毛刺。 暂时未收服务调用方的不良反馈。 初步排查查看 CPU 1 分钟平均负载,发现 1 分钟平均负载有高有低,波动明显。说明机器上有些进程使用 CPU 波动很大。 登录机器排查进程,使用 top 指令。
185 天前 / 钟子敬07
怎么排查 CPU 飙升线上有些系统,本来跑的好好的,突然有一天就会出现报警,CPU 使用率飙升,然后重启之后就好了。例如,多线程操作一个线程不安全的 list 往往就会出现这种现象。那么怎么定位到具体的代码范围呢?今天笔者就教大家一个小技巧 代码准备这次,笔者准备了一个 demo 代码,大致线程模型是这样的: 代码下所示: publicclassCpuHighExample{ publicstaticvoidcpuHigh(){ finalListlist=newLinkedList(); Threadthread1=newThread(newRunnable(){ @Override publicvoidrun(){ intcount=1; while(true){ //构造 thread1 为消耗很高 cpu 的线程 c...
186 天前 / 钟子敬07
前言代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么? CPU 看了那么多,我们都知道 CPU 通常分为 32 位和 64 位,你知道 64 位相比 32 位 CPU 的优势在哪吗?64 位 CPU 的计算性能一定比 32 位 CPU 高很多吗? 不知道也不用慌张,接下来就循序渐进的、一层一层的攻破这些问题。
197 天前 / xiispace
阿里妹导读:压测时或多或少都收到过 CPU 或者 Load 高的告警,如果是单机偶发性的,经常会认为是“宿主机抢占导致的”,那事实是否真是如此呢?是什么引起了这些指标的飙高?网络、磁盘还是高并发?有什么工具可以定位?TOP、PS 还是 vmstat?CPU 高 &Load 高和 CPU 低 &Load 高,不同的表征又代表着什么? 文末福利:免费下载《ECS 运维指南之 Linux 系统诊断》电子书。 一 背景知识 LINUX 进程状态 LINUX 2.6 以后的内核中,进程一般存在 7 种基础状态:D- 不可中断睡眠、R- 可执行、S- 可中断睡眠、T- 暂停态、t- 跟踪态、X- 死亡态、Z- 僵尸态...
212 天前 / yes的练级攻略
每个时代,都不会亏待会学习的人。 大家好,我是 yes。 这次本来是打算写一篇 RocketMQ 相关文章的,但是被插队了,我也是没想到的,对了本号也有留言了哟。 说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪的代码,于是就有了这篇文章,让我们来看一下这段代码,它属于 ChannelEventRunnable,这个 runnable 是 Dubbo IO 线程创建,将此任务扔到业务线程池中处理。 看到没,把 state == ChannelState.RECEIVED 拎出来独立一个 if,而其他的 state 还是放在 switch 里面判断。
212 天前 / itfanr
总述 最近一位朋友问我,开发的代码是怎么在芯片运行起来的,我就开始给他介绍代码的预编译、汇编、编译、链接然后到一般的文件属性,再到代码运行。但是大佬问了我一句,CPU 到底是怎么执行到每一个逻辑的,就讲了哈 CPU 的架构。这是时候真的有些迷了,虽然有模电数电的底子,但是自己都说迷糊了,汇编怎么对应到机器码再到怎么执行每一个逻辑。 所以我想了想,我自己也重新学习整理一下,写一篇文章分享给自己也分享给大家。虽然网上也有很多人讲这个过程,我也想用自己的视角去介绍一下。