计算机基础&思想
文章平均质量分 87
废言Pro
时间加努力
展开
-
CPU使用率到100%了?
以下文章来源于涛歌依旧,作者点击关注????????最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器CPU的使用率达100%了。我心想不可能啊,CPU有那么多核,怎会跑满?于是看了一眼,结果虚惊一场。这位同事看到的100%,并非指整个CPU使用率到了100%,而是指CPU某些核的使用率到了100%.趁此机会,我来聊聊与CPU相关的概念,对很多软件开发和运维人员来说,这些概念是必须要掌握的: CPU主频 多个CPU 多核CPU 逻辑核(超线程) 大转载 2021-07-13 09:11:45 · 271 阅读 · 0 评论 -
字节序(byte order)和位序(bit order)
https://blog.csdn.net/aflyeaglenku/article/details/76209236最近在阅读 ipc发送音视频流的代码,偶然发现如果用到了位域,那么发送和接收的“字节”的值不一样!!所以在想是不是除了字节序之后,比特位的顺序也有大端小端之分。带着疑问查阅了度娘,看到如下一篇博客。作者也遇到了和笔者我相同的问题。感谢原作者的分享!博客地址如下:http://blog.csdn.net/liuxingen/article/details/45420455/字节序(byt转载 2021-06-10 11:10:29 · 528 阅读 · 0 评论 -
深度报告:CPU研究框架(115页PPT)
来源:半导体风向标转载自:架构师技术联盟CPU是IT系统最基础的核心硬件,又是最复杂的芯片。CPU因研发门槛高、生态构建难,被称作IC半导体的“珠峰”。报告主要从以下四个方面建立国产CPU的框架:1、从指令集架构看CPU市场格局:精简指令集ARM通过构筑与Android的生态合作,占据了全球95%的移动芯片授权市场,CPU国产化率极低。2、CPU产业链:先进制程数字芯片产业链。3、当前国产CPU发展的三大路线:X86内核授权的厂商,Arm指令集授权厂商和自研架构厂...转载 2021-02-01 19:07:37 · 1194 阅读 · 0 评论 -
Linux 进程热升级 共享库的动态替换
背景用户总是希望服务进程能保持稳定。如果可以 7*24 小时的工作,那就永远不要重启它。但是,软件产品的功能总是在不断的丰富。当用户发现一些新的功能正是他所需要的,他也许会主动要求进行一次升级。而当严重的安全问题出现时,用户就不得不接受强制的升级了。不停机升级,也被称为热升级。通常实现热升级,需要用户部署两套业务系统。至少,被升级的关键模块是两块以上的。这一般是通过硬件方式支持的。由此而产生的成本压力,不是每个用户都可以接受的。对于小型业务系统,频繁的升级总是不可避免的。如果升级过程中,业务进程转载 2021-01-27 09:56:46 · 789 阅读 · 0 评论 -
libco协程库上下文切换原理详解
缘起libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦腰斩断”,这种在函数任意位置 “切出——恢复” 的功能是如何实现的呢? 本文从libco 代码层面对协程的切换进行了剖析,希望能让初次接触 libco 的同学能快速了解其背后的运行机理。函数调用转载 2021-01-27 09:55:05 · 334 阅读 · 0 评论 -
x86-64 下函数调用及栈帧原理
缘起在 C/C++ 程序中,函数调用是十分常见的操作。那么,这一操作的底层原理是怎样的?编译器帮我们做了哪些操作?CPU 中各寄存器及内存堆栈在函数调用时是如何被使用的?栈帧的创建和恢复是如何完成的?针对上述问题,本本文进行了探索和研究。通用寄存器使用惯例函数调用时,在硬件层面我们需要关注的通常是cpu 的通用寄存器。在所有 cpu 体系架构中,每个寄存器通常都是有建议的使用方法的,而编译器也通常依照CPU架构的建议来使用这些寄存器,因而我们可以认为这些建议是强制性的。对于 x86-64 架转载 2021-01-27 09:53:36 · 1072 阅读 · 0 评论 -
应用程序热补丁(三):完整的设计与实现
前言在前两篇文章介绍了应用程序热补丁的关键技术:修复运行时进程的函数 加载热补丁到进程中 自动生成热补丁等等这些是组成应用程序热补丁技术框架的关键部分,但是在生产环境中使用热补丁技术还需要考虑适应现代软件的属性、热补丁的安全性、以及在运营中对热补丁的管理等等。通过介绍UCloud应用程序热补丁框架的设计理念和框架中各个组件,我们会解决以下实践中遇到的问题:热补丁的管理(加载、卸载、激活、回滚热补丁等) 打入热补丁时的安全检查(简单说是什么时候打入热补丁是安全的) 热补丁对.转载 2021-01-27 00:26:05 · 883 阅读 · 0 评论 -
应用程序热补丁(二):自动生成热补丁
前言在《如何用几行代码打造应用程序热补丁?(一)》中,我们介绍了应用程序热补丁技术的基本原理,同时实现了一个简单的热补丁。但是无法对本地函数打热补丁,同时手动编写热补丁比较麻烦、可能非常复杂容易出错。为了解决这些问题,本文将会介绍一种自动生成应用程序热补丁技术,可以生成应用程序和动态链接库中任意函数的热补丁。自动生成热补丁综述自动生成热补丁是利用热补丁生成工具,对现有的源代码和补丁文件进行处理,自动输出热补丁的技术。我们知道,热补丁的基本原理是新函数替换旧函数,也就是完整的函数.转载 2021-01-27 00:24:06 · 1462 阅读 · 0 评论 -
应用程序热补丁(一):如何用几行代码打造应用程序热补丁
引言千呼万唤始出来,从今天起,《UCloud技术大观园》系列正式开张,撒花╭(●`∀´●)╯!UCloud生而为云,一直专注在云计算的泥潭里摸爬滚打,踩过数不清的坑,写过数不清的BUG。所幸,在不断的试错中,也锤炼出一些能在江湖傍身的大杀器。这些经过千锤百炼的大杀器和宝贵的踩坑经验,一起成为今天UCloud的核心科技。现在,我们将在《UCloud技术大观园》系列里,把这些核心科技全部开放出来,毫无保留,逐一为大家讲解,哪些坑是我们已经踩过的,引以为诫,哪些是优质的技术实践经验,值得借...转载 2021-01-27 00:22:08 · 1432 阅读 · 3 评论 -
Linux 进程热升级
http://www.ibm.com/developerworks/cn/linux/l-cn-prcss-hotupgrd/为了实现 Linux 系统进程热升级,本文提供了一种底层的实现方法,即在不重启进程的条件下,升级进程的共享库模块。背景用户总是希望服务进程能保持稳定。如果可以 7*24 小时的工作,那就永远不要重启它。但是,软件产品的功能总是在不断的丰富。当用户发现一些新的功能正是他所需要的,他也许会主动要求进行一次升级。而当严重的安全问题出现时,用户就不得不接受强制的升级了。.转载 2021-01-27 00:20:41 · 1091 阅读 · 1 评论 -
自己动手实现一个malloc内存分配器 | 30图
对内存分配器透彻理解是编程高手的标志之一。如果你不能理解malloc之类内存分配器实现原理的话,那你可能写不出高性能程序,写不出高性能程序就很难参与核心项目,参与不了核心项目那么很难升职加薪,很难升级加薪就无法走向人生巅峰,没想到内存分配竟如此关键,为了走上人生巅峰你也要势必读完本文现在我们知道了,对内存分配器透彻的理解是写出高性能程序的关键所在,那么我们该怎样透彻理解内存分配器呢?还有什么能比你自己动手实现一个理解的更透彻吗?接下来,我们就自己实现一个malloc内存分配器。读完本文.转载 2021-01-12 09:31:57 · 311 阅读 · 0 评论 -
如何写出让 CPU 跑得更快的代码?
前言代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache(高速缓存),它的存储容量很小,但是离 CPU 核心很近,所以缓存的读写速度是极快的,那么如果 CPU 运算时,直接从 CPU Cache 读取数据,而不是从内存的话,运算速度就会很快。但是,大多数人不知道 CPU Cache 的运行机制,以至于不知道如何才能够写出能够配合 CPU Cache转载 2020-12-10 10:07:08 · 142 阅读 · 0 评论 -
要搞懂 volatile 关键字,就靠这 26 张图
小故事小艾吃饭路上碰上小牛,忙问:你昨天面大厂面的咋样了?听说他们最喜欢问多线程相关知识。小牛说:对啊,第一个问题我就讲了20分钟,直接把面试官讲服了。小艾忙问:什么问题能讲这么久?是不是问你情感经历了?小牛说:…问的volatile关键字。小艾说:volatile关键词的作用一般有如下两个: 可见性:当一个线程修改了由volatile关键字修饰的变量的值时,其它线程能够立即得知这个修改。 有序性:禁止编译器关于操作volatile关键词修饰的变量的指令重排序。 你说转载 2020-11-27 13:10:48 · 164 阅读 · 0 评论 -
ARM64体系结构与编程之cache必修课(下)
自从2019年3月Linus宣布Linux 5.0正式发布那天开始,笨叔就致力于把蓝色奔跑吧Linux内核这本书重新更新到Linux 5.0。大家也许无法想象更新一本快1000页的书,要付出多少精力。这是一次全面和全新的修订,90%的内容和第一版不一样,90%的内容重新编写和编排,各中的汗水只有笨叔自己知道。和Linux相关的工程师,不要吝啬你的钱包,可以买一本看看,最新Linux 5.x内核全新、全面、深刻的解读。预计2020年双十二出版!想提前看奔跑吧第二版目录的,可以点这里。奔2修订版 目录!爱在转载 2020-11-27 13:11:46 · 1576 阅读 · 0 评论 -
ARM64体系结构与编程之cache必修课(中)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系统软件人员,下面几个常常疑惑的问题: cache的内部组织架构是怎么样的?能否画出一个.转载 2020-11-27 13:07:45 · 2099 阅读 · 2 评论 -
ARM64体系结构与编程之cache必修课(上)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系统软件人员,下面几个常常疑惑的问题: cache的内部组织架构是怎么样的?能否画出一个.转载 2020-11-27 13:06:24 · 1704 阅读 · 0 评论 -
10 张图打开 CPU 缓存一致性的大门
前言直接上,不多 BB 了。正文CPU Cache 的数据写入随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的离 CPU 核心越近,访问速度也快,但是存储容量相对就会越小。其中,在多核心的 CPU 里,每转载 2020-11-27 13:02:37 · 203 阅读 · 0 评论 -
CPU 执行程序的秘密,藏在了这 15 张图里
前言代码写了那么多,你知道a = 1 + 2这条代码是怎么被 CPU 执行的吗?软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么?CPU 看了那么多,我们都知道 CPU 通常分为 32 位和 64 位,你知道 64 位相比 32 位 CPU 的优势在哪吗?64 位 CPU 的计算性能一定比 32 位 CPU 高很多吗?不知道也不用慌张,接下来就...转载 2020-10-23 09:36:00 · 162 阅读 · 0 评论 -
值得推荐的C/C++框架和库
转载理由: 在研发成员水平有限时 or 产品压力较大时 or 工期较紧时 or 初创,如何利用开源去拼装一个系统,利用前人的成果? 假如给你一个初创团队,成员不多,能否找出可行方案?转载于: http://www.ezlippi.com/blog/2014/12/c-open-project.html值得学习的C语言开源项目Libeventlibev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它...转载 2020-05-09 17:43:21 · 1025 阅读 · 0 评论 -
用UNIX的设计思想来应对多变的需求
之前,@风枫峰在“这是谁的错?”中说过开发团队对需求来者不拒,而@weidagang也在“需求变更和IoC”中说过用IoC来最大程度地解决需求变更。今天我也想从Unix设计思想的角度来说说什么是好的软件设计,什么样的设计可以把需求变更对开发的影响降低。(注意:这并不能解决用户或是PM的无理需求,面对无理需求,需要仔细分析需求,而用技术的手段无法搞定这个事,但是可以减轻需求变更带来的痛苦) 我曾...转载 2020-04-25 16:06:22 · 197 阅读 · 0 评论 -
缓存更新的套路
看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻...转载 2020-04-21 15:19:11 · 189 阅读 · 0 评论 -
Gallery of Processor Cache Effects
Most of my readers will understand that cache is a fast but small type of memory that stores recently accessed memory locations. This description is reasonably accurate, but the “boring” details of h...原创 2019-09-11 11:02:21 · 141 阅读 · 0 评论 -
Gallery of Processor Cache Effects
CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫,浩瀚繁星,阅之如临深渊,味同嚼蜡,三言两语难以入门。正好网上有人推荐了微软大牛Igor Ostrovsky一篇博文《漫游处理器缓存效应》,文章不仅仅用7个最简单的源码示例就将CPU cache的原理娓娓道来,还附加图表量化分析做数学上的佐证Gallery of Proces...原创 2019-04-30 14:05:43 · 236 阅读 · 0 评论 -
7个示例科普CPU Cache
CPU cache一直是理解计算机体系架构的重要知识点,也是并发编程设计中的技术难点,而且相关参考资料如同过江之鲫,浩瀚繁星,阅之如临深渊,味同嚼蜡,三言两语难以入门。正好网上有人推荐了微软大牛Igor Ostrovsky一篇博文《漫游处理器缓存效应》,文章不仅仅用7个最简单的源码示例就将CPU cache的原理娓娓道来,还附加图表量化分析做数学上的佐证,个人感觉这种案例教学的切入方式绝对是俺的菜...转载 2019-09-11 11:16:04 · 168 阅读 · 0 评论 -
与程序员相关的CPU缓存知识
好久没有写一些微观方面的文章了,今天写一篇关于CPU Cache相关的文章,这篇文章比较长,主要分成这么几个部分:基础知识、缓存的命中、缓存的一致性、相关的代码示例和延伸阅读。其中会讲述一些多核 CPU 的系统架构以及其原理,包括对程序性能上的影响,以及在进行并发编程的时候需要注意到的一些问题。这篇文章我会尽量地写简单和通俗易懂一些,主要是讲清楚相关的原理和问题,而对于一些细节和延伸阅读我会在文章...转载 2020-04-21 13:53:46 · 322 阅读 · 0 评论 -
讲讲亿级PV的负载均衡架构
引言本来没想写这个题材的,为了某某童鞋能够更好的茁壮成长,临时写一篇负载均衡的。负载均衡,大家可能听过什么3层负载均衡、4层负载均衡、7层负载均衡什么的?那这是怎么分的呢,ok,是根据osi七层网络模型来分的,例如nginx是工作在应用层,应用层刚好是在第7层,因此nginx又可以称为7层负载均衡。 我本来想一层层慢慢讲,从最基础的网络协议开始讲起,想了想又觉得这种讲法不适合速成。因此我改变思...转载 2020-04-17 21:52:32 · 178 阅读 · 0 评论 -
开发内功修炼CPU篇
最近网络在爆炒一篇标题为《互联网不需要中年人》,疯狂渲染35岁的码农的前程问题,制造焦虑。本来我觉得这个事情应该只是媒体博眼球的一个炒作而已。不过恰恰最近面试了有70多人,其中有很多工作7,8年以上的的同学。这些人里基本上可以非常明确地划分成两类。第一类是虽然工作了7,8年以上了,但是所有的经验都集中在业务层。换句话说,并不是有7-8年经验,而是工作了7-8年而已。稍微深入问一点性能相关的问题都没...转载 2020-04-17 21:30:55 · 1357 阅读 · 1 评论 -
多核Cache一致性 && 伪共享 && atomic的实现和cache相关的部分
经过这么多篇文章的介绍,我们应该已经对Cache有一个比较清晰的认识。Cache会面临哪些问题,我们该怎么处理这些问题。现在我们讨论多核Cache一致性问题。在摩尔定律不太适用的今天,人们试图增加CPU核数以提升系统整体性能。这类系统称之为多核系统(简称MP,Multi-Processor)。我们知道每个CPU都有一个私有的L1 Cache(不细分iCache和dCache)。假设一个2核的系统,...转载 2020-04-17 17:27:34 · 1618 阅读 · 0 评论 -
Cache和DMA一致性 && iCache和dCache一致性
DMA应该多多少少知道点吧。DMA(Direct Memory Access)是指在外接可以不用CPU干预,直接把数据传输到内存的技术。这个过程中可以把CPU解放出来,可以很好的提升系统性能。那么DMA和Cache有什么关系呢?这也需要我们关注?需要解决什么问题我们知道DMA可以帮我们在I/O和主存之间搬运数据,且不需要CPU参与。高速缓存是CPU和主存之间的数据交互的桥梁。而DMA如果和...转载 2020-04-17 16:13:59 · 2058 阅读 · 1 评论 -
TLB cache 原理
TLB是translation lookaside buffer的简称。首先,我们知道MMU的作用是把虚拟地址转换成物理地址。虚拟地址和物理地址的映射关系存储在页表中,而现在页表又是分级的。64位系统一般都是3~5级。常见的配置是4级页表,就以4级页表为例说明。分别是PGD、PUD、PMD、PTE四级页表。在硬件上会有一个叫做页表基地址寄存器,它存储PGD页表的首地址。MMU就是根据页表基地址寄存...转载 2020-04-17 15:53:47 · 2676 阅读 · 0 评论 -
Cache组织方式
我们一直避开了一个关键问题。我们都知道cache控制器根据地址查找判断是否命中,这里的地址究竟是虚拟地址(virtual address,VA)还是物理地址(physical address,PA)?我们应该清楚CPU发出对某个地址的数据访问,这个地址其实是虚拟地址,虚拟地址经过MMU转换成物理地址,最终从这个物理地址读取数据。因此cache的硬件设计既可以采用虚拟地址也可以采用物理地址甚至是取两...转载 2020-04-17 15:30:57 · 995 阅读 · 0 评论 -
Cache的基本原理
对于没有接触过底层技术的朋友来说,或许从未听说过cache。毕竟cache的存在对程序员来说是透明的。在接触cache之前,先为你准备段code分析。int arr[10][128];for (i = 0; i < 10; i++) for (j = 0; j < 128; j++); arr[i][j] = 1;如果你曾经...转载 2020-04-17 14:45:29 · 468 阅读 · 0 评论 -
理解内存屏障
参考文献列表:http://en.wikipedia.org/wiki/Memory_barrierhttp://en.wikipedia.org/wiki/Out-of-order_executionhttps://www.kernel.org/doc/Documentation/memory-barriers.txt内存屏障主要解决了两个问题:单处理器下的乱序问题和多处理器下的内存同步问题...原创 2020-04-15 10:59:20 · 560 阅读 · 0 评论 -
What Every Programmer Should Know About Memory
What Every Programmer Should Know About Memory 阅读学习原创 2020-04-10 17:18:50 · 359 阅读 · 0 评论 -
X86-64和ARM64用户栈的结构 (1) ---背景介绍
背景主要基于Linux,介绍X86-64和ARM64的用户栈结构。断断续续的学了很多和栈相关的知识,今天打算整理用户栈相关的知识,废话少说,下面进入正题。栈的定义和类别栈有时也称堆栈,是一种受限的线性表,只能在线性表的一端按序进行插入(进栈)和删除(出栈),因此先进栈的数据会后出栈。为了便于描述,我们习惯将在线性表进行插入和删除的一端称为栈顶,另一端称为栈底。栈顶会随着插入和删除而发生...转载 2020-03-30 14:16:39 · 933 阅读 · 0 评论 -
Stack frame layout on x86-64
A few months ago I've written an article namedWhere the top of the stack is on x86, which aimed to clear some misunderstandings regarding stack usage on the x86 architecture. The article concluded wi...转载 2020-03-30 13:53:41 · 432 阅读 · 1 评论 -
这个网站还不错,可以多看看(这个是学习的网站,没有广告)
https://www.liaoxuefeng.com/wiki/896043488029600原创 2020-03-23 09:15:43 · 4593 阅读 · 0 评论 -
挺好的一个参考文档,包含了算法,linux,网络,C,C++等等等等
http://wiki.dreamrunner.org/public_html/index.htmlAlgorithms Algorithms Advanced Data Structures BackTracking Algorithms Data Structures Dynamic Programming Geometrical and Network...原创 2020-03-20 15:06:02 · 502 阅读 · 0 评论 -
如何超过大多数人
当你看到这篇文章的标题,你一定对这篇文章产生了巨大的兴趣,因为你的潜意识在告诉你,这是一本人生的“武林秘籍”,而且还是左耳朵写的,一定有干货满满,只要读完,一定可以练就神功并找到超过大多数人的快车道和捷径……然而…… 当你看到我这样开篇时,你一定会觉得我马上就要有个转折,告诉你这是不可能的,一切都需要付出和努力……然而,你错了,这篇文章还真就是一篇“秘籍”,只要你把这些“秘籍”用起来,你就一定可以...转载 2019-10-24 10:27:53 · 403 阅读 · 1 评论 -
转发技术风雨三十年,你经历过……
前言记得刚到大学报道的那天,为了给家人报个平安,我在电话亭里足足等了两个小时,而我的父亲为了接这个电话也赶到近百米的土豪家。作为我人生第一个通信工具Motorola BP机在我大学毕业使用两个月后迅速下岗,换了第一台GSM数字移动电话飞利浦989,从此满足了随时随地沟通和被沟通的需求;那个年代最蛋疼的莫过于双向收费,朋友为了测试通话质量是否OK浪费我六角钱让我至今还难以忘怀,因此成...转载 2019-07-25 12:50:17 · 1237 阅读 · 1 评论