松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
之前的文章《源代码如何被计算机执行》已经提到,对于一段源代码,计算机主要依靠编译器将源代码转化为CPU可以执行的程序。那么,CPU到底是如何工作的呢?本文将介绍现代CPU的工作原理。
在数字化时代,服务器是支撑互联网和各类科技应用的核心基石。无论是浏览网页、发送电子邮件,还是观看在线视频,背后都离不开庞大而复杂的服务器系统。然而,当我们享受着数字化便利的同时,很少有人会对服务器的硬件构成有深入了解。本文将带您进入服务器的神秘世界,探寻服务器是如何由各种硬件组件构成的。
本文通过实验论证:Unixbench的Pipe-based Context Switching用例受操作系统调度算法的影响波动很大,甚至出现了虚拟机跑分超过物理机的情况。在云计算时代,当前的Unixbench已不能真实地反映被测系统的真实性能,需要针对多核服务器和云计算环境进行完善。
系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度)。
对于第一部分,主要是Redis自身的实现原理导致的,我们暂时不去做过多讨论。第二部分是在多核心CPU场景下,多核心之间的频繁上下文调度会导致Redis变慢,今天我们更近一步的分析一下多核心CPU场景以及NUMA架构下的Redis运行机制。
传统网卡仅实现了 L1-L2 层的逻辑,而由 Host CPU 负责处理网络协议栈中更高层的逻辑。即:CPU 按照 L3-L7 的逻辑,负责数据包的封装与解封装;网卡则负责更底层的 L2 层数据帧的封装和解封装,以及 L1 层电气信号的相应处理。
在上一期,我们提到,挑选模特的一个潜规则是,想让买家秀和卖家秀基本一致,就需要挑选头身比较小的高挑妹子。类似地,想让数字电路的实际波形尽量减少畸变,上升沿和下降沿更陡峭,也需要提升数字电路的电压。
要提高新加坡服务器的CPU利用率,通常需要优化应用程序和操作系统的配置,以确保服务器资源得到更有效地利用。以下是一些方法来提高CPU利用率:
智能服务器适配器或智能网卡(SmartNIC)通过从服务器的CPU上卸载网络处理工作负载和任务,提高云端和私有数据中心中的服务器性能。将网络处理卸载到智能网卡并不是一个新的概念,例如有些网卡(NIC)可以卸载诸如校验和计算与分段等一些网络处理功能。然而,由软件定义网络(SDN)、开放虚拟交换机(OVS)和网络功能虚拟化(NFV)驱动的数据中心网络通信的快速增长,需要一种具有更强卸载能力的新型网卡:智能网卡。
生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分也就是对应了本文主题接口最大并发数。本文思维导图如下,
现代操作系统对I/O操作的改进中最为重要的就是支持异步I/O。如果充分利用操作系统提供的异步I/O支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型。Nginx就是支持异步I/O的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。用Node.js开发的服务器端程序也使用了这种工作模式,这也是当下实现多任务编程的一种趋势。
生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分就是对应了本文主题接口最大并发数。本文思维导图如下,
似乎有人不知道nodejs是支持多核的?v0.10 Cluster可以搭建nodejs多核服务。v0.12重写了Cluster,据说提升了非常大的性能。
单个 Node.js 程序的实例仅在一个线程上运行,因此无法充分利用 CPU 的多核系统。有时你可能需要启动 Node.js 进程集群来利用本地计算机或生产服务器上的每个 CPU 内核。
最近由于工作需要,在维护线上的Redis,Redis相关的原理部分看的比较多,Redis最常见的业务问题就是响应慢,今天我们来看看Redis慢在哪里?以及如何解决这些慢的现象。
根据我们之前的一贯思路,对于一个工具来说都有一定边界和基础,然而软件或者数学都是基于一定的边界的,这些边界条件的变化也会对结果产生一定的影响,但是本质上没有改变。作者将这种重要的点叫做边界。边界的改变会对结果有很大的影响,但不改变主题,所以存在最优的边界条件。寻找最优的过程就是优化。
处理器正处于多核时代。多内核是指在一枚处理器中集成两个或多个完整的计算引擎,多核处理器是单芯片。一枚多核处理器上可以承载多个内核,但只需要单一的处理器插槽即可以工作,同时,目前流行的操作系统已经可以利用这样的资源,将每个执行内核作为分离的逻辑处理器,通过在多个执行内核之间划分任务,在特定的始终周期内执行更多任务,提高并行处理任务的能力。
如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。
众所周知,随着云计算的蓬勃发展,各大IDC数据中心对服务器CPU的要求也是水涨船高。每逢有算力更强、性能更稳、成本更低的服务器CPU上市,都会引发众多数据中心用户的高度关注。 究其原因其实非常简单:不论是一个百分点的性能提升,亦或是一个百分点的成本降低,数据中心里那么多台服务器日积月累下来,也会是一笔非常惊人的数字。 想要寻找性价比更高的CPU?下面我们就来公布自己的一项发现:就在2022年的夏天,一款被AMD突然“亮剑”的服务器CPU,可能会成为许多数据中心用户眼中“最靓的仔”。 一款为高性价比而生的CP
早在2022年10月,俄罗斯国产处理器厂商贝加尔电子(Baikal Electronics)就曝光了最新推出的48核的服务器处理器——S1000的SPEC CPU 2006 Int性能测试数据,并将其与20核Intel Xeon Gold 6148、16核AMD Epyc 7351和48核华为鲲鹏920的SPEC CPU 2006 Int测试成绩进行了比较,结果显示S1000性能大约与AMD和英特尔CPU相当,同时也达到了7nm制程的华为鲲鹏920性能的85%。
平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt,其中load、cpu、mem来衡量机器性能,qps、rt来衡量应用性能。
小霸王学习机能够使用性能非常低下的硬件,运行精彩刺激的游戏,并展示多变的画面,这依赖于程序员充分考虑到硬件的软件设计,也就是最初的软硬件融合设计思维。
存取速度比较:L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓存在第一个CPU核中,L3则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。我们来看一些他们的速度:
做生信分析的人越来越多,但并不是每个人都有足够的计算资源。云计算是个好东西,但它的成本优势更多体现在大数据处理上,每天需要处理几十几百 TB 甚至 PB 级别的数据时,云计算才会比自建维护机房要划算得多。如果处理的数据不大,自己组装个服务器要划算得多。
任何的服务器的性能都是有极限的,面对海量的互联网访问需求,是不可能单靠一台服务器或者一个CPU来承担的。所以我们一般都会在运行时架构设计之初,就考虑如何能利用多个CPU、多台服务器来分担负载,这就是所
任何的服务器的性能都是有极限的,面对海量的互联网访问需求,是不可能单靠一台服务器或者一个CPU来承担的。所以我们一般都会在运行时架构设计之初,就考虑如何能利用多个 CPU、多台服务器来分担负载,这就是所谓分布的策略。分布式的服务器概念很简单,但是实现起来却比较复杂。因为我们写的程序,往往都是以一个 CPU,一块内存为基础来设计的,所以要让多个程序同时运行,并且协调运作,这需要更多的底层工作。
I/O 密集型应用、计算密集型应用应该用什么实现?进程、内核线程、用户态线程、协程它们的原理和应用场景又是什么?如何组合它们才能让机器性能达到最优?它们的死锁和竞态又是什么?如何清晰地表示它们之间的关系?希望读完本文后,能帮您解答这些疑惑!
Redis的线程模型具有高吞吐量、低延迟、高并发性和内存操作效率高的优势,但无法充分利用多核CPU、存在长时间阻塞问题、无法处理复杂的计算任务和有限的可扩展性是其相对的劣势。
在前面两篇文章《个人 CPU 的型号、代际架构与微架构》 和 《聊聊近些年 CPU 在微架构、IO 速率上的演进过程》 , 我们介绍了个人台式机电脑中的 CPU 型号规则、核设计细节,以及各代 CPU 的关键变化。在这一节中,让我们进入到和大家手头工作相关度更高的服务器 CPU 原理部分。
单进程单线程:一个人在一个桌子上吃菜。 单进程多线程:多个人在同一个桌子上一起吃菜。 多进程单线程:多个人每个人在自己的桌子上吃菜。
服务器CPU(Central Processing Unit)和家用CPU有一些区别,主要体现在以下几个方面:
(以上三个命令各有区别,top是以固定间隔显示进程的资源占用排名,w显示who and what they are doing,uptime就顾名思义)
客户现场反馈,top的检查结果中,一个CPU的占用一直是100%。实际上现场有4个CPU,而且这个服务器是MySQL专属服务器。
最近在学习.NET的并行计算技术,学到一个服务器NUMA架构,NUMA架构在中大型系统上一直非常盛行,也是高性能的解决方案,在系统延迟方面表现都很优秀。Windows一向都没有在NUMA架构上有多少表现机会,AMD的多路系统大多也会用在UNIX/Linux上。Intel如期进入了NUMA架构的怀抱,英特尔最新的服务器处理器至强5500是一项重大的结构变革。与上一代至强处理器相比,至强5500采用了非一致性存储结构(NUMA),它在一块芯片上增加了向内存控制器的并行化访问路径增加非统一内存访问。可以看这篇文章
我的毕设项目是为学院编写一个在线 SQL 考试系统,目标是支撑 300 人同时进行在线 SQL 编程考试,全栈开发。身为前端,我毫不犹豫选择 Node 作为系统后台——告别庞大的 Java,全方位拥抱灵活的 JS,我对项目前景充满信心。项目进展顺利,很快业务完工,到达了最终测试环节,是系统投入真实场景的最后一关(测试不充分,上线必挨喷)。
我们运行的每一个程序,本质都是通过CPU来执行的. CPU就像是山河锅,本来一天工作8h,结果他花4h把一天的工作干完了,剩下4h在那摸鱼,这个时候,CPU占用率,就可称为 50%.
硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。 现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。 VPSee 前天收到一位网友的邮件提到了 SMP IRQ Affinity,引发了今天的话题:D,以下操作在 SUN FIre X2100 M2 服务器+
我们现在已经搞定了 C10K并发连接问题 ,升级一下,如何支持千万级的并发连接?你可能说,这不可能。你说错了,现在的系统可以支持千万级的并发连接,只不过所使用的那些激进的技术,并不为人所熟悉。
千万级并发实现的秘密 先解释一下什么是10k问题: 什么是 10K 问题? 在 1999 年,Dan Kegel 向网络服务器提出了一个骇人听闻的难题: 是时候让网络服务器去同时应对 10000 个客户端了,你觉得呢?毕竟网络已经变得很普及了。 这就是著名的 C10K 问题。 通过改善操作系统内核和从像 Apache 那样的线程服务器迁移到像 Nginx, Node 这样的事件驱动服务器,工程师们解决了这个 C10K 问题。 但现在我们面临着一个更大的挑战,如果同时应对一千万个连接呢?要解决这个难题,需要些
高性能的服务器,不一定是多线程实现的,也就是说多线程不一定比单线程效率高,这得分具体的情况。以redis为例,核心处理请求的线程只有一个,所以我们常常理解其仅仅只有一个线程,但准确来说其实并不是单线程的,比如日志的备份需要单独的fork一个进程或者线程去做备份等,那么redis何来单线程还能达到如此10万+的qps呢?其实这取决于具体的实现,redis采用了基于高性能Reactor的IO多路复用的模式+内存数据结构+单线程处理网络请求这几块,决定了其性能高的原因。
没有出现多核之前,我们的CPU实际上是按照某种规则对线程依次进行调度的。在某一个特定的时刻,CPU执行的还是某一个特定的线程。然而,现在有了多核CPU,一切变得不一样了,因为在某一时刻很有可能确实是n个任务在n个核上运行。我们可以编写一个简单的open mp测试一下,如果还是一个核,运行的时间就应该是一样的。
Erlang应用场合 未来的计算是并发计算。现今甚至桌面CPU也是多核的,当用户给服务器购买了越来越多的CPU时,他们更期望能最大限度地利用他们的新投资,但是今天的许多软件系统并不能很好地做到这一点。 整个软件行业也在发生重大变革,由卖工具软件转向卖服务(软件免费,这也是开源软件兴起的过程),由单纯客户端向B/S或C/S转化,相应的存储和计 算向服务器端转移,由原来的PC客户端向客户端多元化(如手机、PDA、电视机顶盒等)转化。这些变革趋势,使得用户可以更方便地访问到服务的同时,服务 器也要承受越来越高的负荷,并行/分布的需求逐渐增加。 Erlang语言不是用来解决所有问题的语言,至少现在还不是。Erlang最初专门为通信应用设计的,比如控制交换机或者变换协议等,非常适合于构 建分布式,实时软并行计算系统。它是一门专注的语言,可以适应现代服务器要求高负荷、高可靠、持续服务的需求。它要解决的问题域包括:高并发、分布式、持 续服务、热升级和高可靠等问题。 Erlang应用实例 典型的Erlang应用是由很多被分配不同任务的“节点(Node)”组成的“集群 (Cluster)”。一个Erlang节点就是一个Erlang虚拟机的实例,用户可以在一台机器(服务器、台式机或者笔记本)上运行多个节点。 Erlang节点自动跟踪所有连接着的其他节点。要添加一个节点仅仅需要将其指向任何一个已建节点就可以了。只要这两个节点建立了连接,所有其他节点马上 就会感应到新加入的节点。Erlang进程使用进程ID向其他进程传递报文,进程ID包含着运行此进程的节点信息。因此进程不需要理会正在与其交流的其他 进程实际在何处运行。一组相互连接的Erlang节点可以看作是一个网格计算体或者一台超级计算机。 erlang的odbc应用程序结构图 Yaws是一个Erlang写的Web服务器。ErLang本身带有一个HTTP Server,叫做inet。Yaws对于inet,就相当于Servlet对于Http Server。Yaws也可说是一个Web开发框架,Yaws的ehtml类似于jsp、 php、ruby template。Yaws并发能力是Apache的15倍,有人利用16台集群服务器所做的显示,Yaws可以承受超八万并发活动,Apache在四千 就宕机了。 erlang和ruby的简单测试 Ejabberd也是Erlang很好的应用实例,也是目前可扩展性最好的一种 Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个集群运作。Ejabberd基于ErLang+ Mnesia构建,项目已成功发展5年,占据30%左右Jabber服务器市场。 Tsung则是多协议分布式压力测试工具,可用于测试Http、Soap、Postgresql和Jabber/XMPP服务器。而Wings则是一个3D建模程序,软件支持Windows、Mac OSX和Linux等操作系统,这两个项目都基于Erlang构建。 Erlang将会成为一个非常重要的语言。如果有了大公司的支持,它甚至可能成为下一个Java。因为它是个开源项目,非常适合多核处理、Web服务等领域。事实上,它也是编写在多核机器上运行的高可靠性系统的唯一成熟语言。 Erlang始于20年前,是一个并发性Prolog,Joe Armstrong创造了它。第一个大型Erlang项目是一个由几百人创建的电信交换系统,系统有数百万行代码。系统主要关注的就是可靠性,并且系统有 难以置信的可靠性历史。据Joe介绍,“它有99.9999999%的可靠性”。 这意味着每10亿秒才有1秒宕机时间,或者说10亿分钟有1分钟宕机时间。十亿秒大概是30年,10亿分钟大概有2000年。99.999% 的可靠性大概是每年宕机5分钟,这已经是很好的了。了解可靠性的人都知道,可靠性系统有 99.9999%的,甚至99.99999%的,但是估计没听过有99.9999999%可靠性的,可基于Erlang的系统实现了。 但这还不是令Erlang壮大的理由,因为不是什么人都关注可靠性。也不是因为 Erlang是一个函数式语言,更不是并行Erlang是个面向对象语言。其发展迅速的主要原因是唯一一个有可靠实现和完善类库的成熟的并行开发语言,在 不久的将来所有的桌面系统、笔记本电脑都将是多核的,而要让程序在多核上更快的运行就要使程序能充分利用多核处理的能力。 Erlang带有一组类库。多数类库是用于构建各类Internet服务的。 Erlang有Web服务器和数据库。Erlang社区认为它是构建可靠Web服务器和Web服务的首选语言。Erlang是一个构建可靠系统的框架/平 台,它构建的平台可以持续运行而无需关闭,可以每天更新软件,甚至可以定期的更换硬件。这些特性是电信应用所需要的,它还是在线银行、
最近在研读书籍 深入浅出nodejs , 随手写下的一些笔记, 和大家分享~ 如有错误,欢迎指正~
关于服务器我一直有个设想:未来每个人都有一个专属服务器。这个服务器是每个人在互联网的数据中枢。这个服务器:安全,只有所有者拥有管理权限;强大,可以存储数据并保护隐私。当人离开世界时,可以选择把一些数据留给家人,也可以选择把自己在互联网的记忆全部抹去……
我们生活在一个每天都会产生大量数据的数字信息时代。随着物联网设备、自动驾驶汽车、联网家庭和联网工作场所数量的不断增加,数据中心的数据愈加趋向饱和。因此,需要一种解决方案,使数据中心能够处理不断增加的进出和通过数据中心传输的数据量。 数据处理单元,通常称为DPU,是一种新型可编程的高性能处理器,优化执行和加速由数据中心服务器执行的网络和存储功能。DPU 就像 GPU 一样插在服务器的 PCIe 插槽上,它们允许服务器将网络和存储功能从 CPU 卸载到DPU上 ,从而使 CPU 专注于运行操作系统和系统应用程序
领取专属 10元无门槛券
手把手带您无忧上云