wireshark时序图怎么打开

wireshark时序图怎么打开,第1张

Wireshark 可以用时序图的方式显示数据包交互的过程,从菜单栏中,点击 统计 (Statistics) -> 流量图 (Flow Graph),然后,在d出的界面中的「流量类型」选择 「TCP Flows」,你可以更清晰的看到,整个过程中 TCP 流的执行过程:
TCP 流量图
你可能会好奇,为什么三次握手连接过程的 Seq 是 0 ?
实际上是因为 Wireshark 工具帮我们做了优化,它默认显示的是序列号 seq 是相对值,而不是真实值。
如果你想看到实际的序列号的值,可以右键菜单, 然后找到「协议首选项」,接着找到「Relative Seq」后,把它给取消, *** 作如下:
取消序列号相对值显示
取消后,Seq 显示的就是真实值了:
TCP 流量图
可见,客户端和服务端的序列号实际上是不同的,序列号是一个随机值。
这其实跟我们书上看到的 TCP 三次握手和四次挥手很类似,作为对比,你通常看到的 TCP 三次握手和四次挥手的流程,基本是这样的:
TCP 三次握手和四次挥手的流程
为什么抓到的 TCP 挥手是三次,而不是书上说的四次?
因为服务器端收到客户端的 FIN 后,服务器端同时也要关闭连接,这样就可以把 ACK 和 FIN 合并到一起发送,节省了一个包,变成了“三次挥手”。
而通常情况下,服务器端收到客户端的 FIN 后,很可能还没发送完数据,所以就会先回复客户端一个 ACK 包,稍等一会儿,完成所有数据包的发送后,才会发送 FIN 包,这也就是四次挥手了。
如下图,就是四次挥手的过程:
四次挥手
2 TCP三次握手异常
TCP 三次握手的过程相信大家都背的滚瓜烂熟,那么你有没有想过这三个异常情况:
TCP 第一次握手的 SYN 丢包了,会发生了什么?
TCP 第二次握手的 SYN、ACK 丢包了,会发生什么?
TCP 第三次握手的 ACK 包丢了,会发生什么?
有的小伙伴可能说:“很简单呀,包丢了就会重传嘛。”
那我在继续问你:
那会重传几次?
超时重传的时间 RTO 会如何变化?
在 Linux 下如何设置重传次数?

是不是哑口无言,无法回答?
不知道没关系,接下里我用三个实验案例,带大家一起探究探究这三种异常。
实验场景
本次实验用了两台虚拟机,一台作为服务端,一台作为客户端,它们的关系如下:
实验环境
客户端和服务端都是 CentOs 65 Linux,Linux 内核版本 2632
服务端 1921681236,apache web 服务
客户端 1921681237
实验一:TCP 第一次握手 SYN 丢包
为了模拟 TCP 第一次握手 SYN 丢包的情况,我是在拔掉服务器的网线后,立刻在客户端执行 curl 命令:
其间 tcpdump 抓包的命令如下:
过了一会, curl 返回了超时连接的错误:
从 date 返回的时间,可以发现在超时接近 1 分钟的时间后,curl 返回了错误。
接着,把 tcp_sys_timeoutpcap 文件用 Wireshark 打开分析,显示如下图:
SYN 超时重传五次
从上图可以发现, 客户端发起了 SYN 包后,一直没有收到服务端的 ACK ,所以一直超时重传了 5 次,并且每次 RTO 超时时间是不同的:
第一次是在 1 秒超时重传
第二次是在 3 秒超时重传
第三次是在 7 秒超时重传
第四次是在 15 秒超时重传
第五次是在 31 秒超时重传
可以发现,每次超时时间 RTO 是指数(翻倍)上涨的,当超过最大重传次数后,客户端不再发送 SYN 包。
在 Linux 中,第一次握手的 SYN 超时重传次数,是如下内核参数指定的(我自己的服务器是6次,与作者实验中的略有差异):
[root@192 ~]# cat /proc/sys/net/ipv4/tcp_syn_retries
6
[root@192 ~]#
tcp_syn_retries 默认值为 5,也就是 SYN 最大重传次数是 5 次。
接下来,我们继续做实验,把 tcp_syn_retries 设置为 2 次:
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
重传抓包后,用 Wireshark 打开分析,显示如下图:
SYN 超时重传两次
实验一的实验小结
通过实验一的实验结果,我们可以得知,当客户端发起的 TCP 第一次握手 SYN 包,在超时时间内没收到服务端的 ACK,就会在超时重传 SYN 数据包,每次超时重传的 RTO 是翻倍上涨的,直到 SYN 包的重传次数到达 tcp_syn_retries 值后,客户端不再发送 SYN 包。
实验二:TCP 第二次握手 SYN、ACK 丢包
为了模拟客户端收不到服务端第二次握手 SYN、ACK 包,我的做法是在客户端加上防火墙限制,直接粗暴的把来自服务端的数据都丢弃,防火墙的配置如下:
接着,在客户端执行 curl 命令:
从 date 返回的时间前后,可以算出大概 1 分钟后,curl 报错退出了。
客户端在这其间抓取的数据包,用 Wireshark 打开分析,显示的时序图如下:
从图中可以发现:
客户端发起 SYN 后,由于防火墙屏蔽了服务端的所有数据包,所以 curl 是无法收到服务端的 SYN、ACK 包,当发生超时后,就会重传 SYN 包
服务端收到客户的 SYN 包后,就会回 SYN、ACK 包,但是客户端一直没有回 ACK,服务端在超时后,重传了 SYN、ACK 包,接着一会,客户端超时重传的 SYN 包又抵达了服务端,服务端收到后,超时定时器就重新计时,然后回了 SYN、ACK 包,所以相当于服务端的超时定时器只触发了一次,又被重置了。
最后,客户端 SYN 超时重传次数达到了 5 次(tcp_syn_retries 默认值 5 次),就不再继续发送 SYN 包了。
所以,我们可以发现,当第二次握手的 SYN、ACK 丢包时,客户端会超时重发 SYN 包,服务端也会超时重传 SYN、ACK 包。
咦?客户端设置了防火墙,屏蔽了服务端的网络包,为什么 tcpdump 还能抓到服务端的网络包?
添加 iptables 限制后, tcpdump 是否能抓到包 ,这要看添加的 iptables 限制条件:
如果添加的是 INPUT 规则,则可以抓得到包
如果添加的是 OUTPUT 规则,则抓不到包
网络包进入主机后的顺序如下:
进来的顺序 Wire -> NIC -> tcpdump -> netfilter/iptables
出去的顺序 iptables -> tcpdump -> NIC -> Wire
tcp_syn_retries 是限制 SYN 重传次数,那第二次握手 SYN、ACK 限制最大重传次数是多少?
TCP 第二次握手 SYN、ACK 包的最大重传次数是通过 tcp_synack_retries 内核参数限制的,其默认值如下:
[root@192 ~]# cat /proc/sys/net/ipv4/tcp_synack_retries
5
[root@192 ~]#
是的,TCP 第二次握手 SYN、ACK 包的最大重传次数默认值是 5 次。
为了验证 SYN、ACK 包最大重传次数是 5 次,我们继续做下实验,我们先把客户端的 tcp_syn_retries 设置为 1,表示客户端 SYN 最大超时次数是 1 次,目的是为了防止多次重传 SYN,把服务端 SYN、ACK 超时定时器重置。
接着,还是如上面的步骤:
客户端配置防火墙屏蔽服务端的数据包
客户端 tcpdump 抓取 curl 执行时的数据包
把抓取的数据包,用 Wireshark 打开分析,显示的时序图如下:
从上图,我们可以分析出:
客户端的 SYN 只超时重传了 1 次,因为 tcp_syn_retries 值为 1
服务端应答了客户端超时重传的 SYN 包后,由于一直收不到客户端的 ACK 包,所以服务端一直在超时重传 SYN、ACK 包,每次的 RTO 也是指数上涨的,一共超时重传了 5 次,因为 tcp_synack_retries 值为 5
接着,我把 tcp_synack_retries 设置为 2,tcp_syn_retries 依然设置为 1:
$ echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
$ echo 1 > /proc/sys/net/ipv4/tcp_syn_retries
依然保持一样的实验步骤进行 *** 作,接着把抓取的数据包,用 Wireshark 打开分析,显示的时序图如下:
可见:
客户端的 SYN 包只超时重传了 1 次,符合 tcp_syn_retries 设置的值;
服务端的 SYN、ACK 超时重传了 2 次,符合 tcp_synack_retries 设置的值
实验二的实验小结
通过实验二的实验结果,我们可以得知,当 TCP 第二次握手 SYN、ACK 包丢了后,客户端 SYN 包会发生超时重传,服务端 SYN、ACK 也会发生超时重传。
客户端 SYN 包超时重传的最大次数,是由 tcp_syn_retries 决定的,默认值是 5 次;服务端 SYN、ACK 包时重传的最大次数,是由 tcp_synack_retries 决定的,默认值是 5 次。
实验三:TCP 第三次握手 ACK 丢包
为了模拟 TCP 第三次握手 ACK 包丢,我的实验方法是在服务端配置防火墙,屏蔽客户端 TCP 报文中标志位是 ACK 的包,也就是当服务端收到客户端的 TCP ACK 的报文时就会丢弃,iptables 配置命令如下:
接着,在客户端执行如下 tcpdump 命令:
然后,客户端向服务端发起 telnet,因为 telnet 命令是会发起 TCP 连接,所以用此命令做测试:
此时,由于服务端收不到第三次握手的 ACK 包,所以一直处于 SYN_RECV 状态:
而客户端是已完成 TCP 连接建立,处于 ESTABLISHED 状态:
过了 1 分钟后,观察发现服务端的 TCP 连接不见了:
过了 30 分钟,客户端依然还是处于 ESTABLISHED 状态:
接着,在刚才客户端建立的 telnet 会话,输入 123456 字符,进行发送:
持续「好长」一段时间,客户端的 telnet 才断开连接:
以上就是本次的实现三的现象,这里存在两个疑点:
为什么服务端原本处于 SYN_RECV 状态的连接,过 1 分钟后就消失了?
为什么客户端 telnet 输入 123456 字符后,过了好长一段时间,telnet 才断开连接?
不着急,我们把刚抓的数据包,用 Wireshark 打开分析,显示的时序图如下:
上图的流程:
客户端发送 SYN 包给服务端,服务端收到后,回了个 SYN、ACK 包给客户端,此时服务端的 TCP 连接处于 SYN_RECV 状态;
客户端收到服务端的 SYN、ACK 包后,给服务端回了个 ACK 包,此时客户端的 TCP 连接处于 ESTABLISHED 状态;
由于服务端配置了防火墙,屏蔽了客户端的 ACK 包,所以服务端一直处于 SYN_RECV 状态,没有进入 ESTABLISHED 状态,tcpdump 之所以能抓到客户端的 ACK 包,是因为数据包进入系统的顺序是先进入 tcpudmp,后经过 iptables;
接着,服务端超时重传了 SYN、ACK 包,重传了 5 次后,也就是超过 tcp_synack_retries 的值(默认值是 5),然后就没有继续重传了,此时服务端的 TCP 连接主动中止了,所以刚才处于 SYN_RECV 状态的 TCP 连接断开了,而客户端依然处于ESTABLISHED 状态;
虽然服务端 TCP 断开了,但过了一段时间,发现客户端依然处于ESTABLISHED 状态,于是就在客户端的 telnet 会话输入了 123456 字符;
此时由于服务端已经断开连接,客户端发送的数据报文,一直在超时重传,每一次重传,RTO 的值是指数增长的,所以持续了好长一段时间,客户端的 telnet 才报错退出了,此时共重传了 15 次。
通过这一波分析,刚才的两个疑点已经解除了:
服务端在重传 SYN、ACK 包时,超过了最大重传次数 tcp_synack_retries,于是服务端的 TCP 连接主动断开了。
客户端向服务端发送数据包时,由于服务端的 TCP 连接已经退出了,所以数据包一直在超时重传,共重传了 15 次, telnet 就断开了连接。
TCP 第一次握手的 SYN 包超时重传最大次数是由 tcp_syn_retries 指定,TCP 第二次握手的 SYN、ACK 包超时重传最大次数是由 tcp_synack_retries 指定,那 TCP 建立连接后的数据包最大超时重传次数是由什么参数指定呢?
TCP 建立连接后的数据包传输,最大超时重传次数是由 tcp_retries2 指定,默认值是 15 次,如下:
[root@192 ~]# cat /proc/sys/net/ipv4/tcp_retries2
15
[root@192 ~]#
如果 15 次重传都做完了,TCP 就会告诉应用层说:“搞不定了,包怎么都传不过去!”
那如果客户端不发送数据,什么时候才会断开处于 ESTABLISHED 状态的连接?
这里就需要提到 TCP 的 保活机制。这个机制的原理是这样的:
定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个「探测报文」,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

序数据库英文全称为Time Series Database,简称TSDB,是以时间为索引的规律性时间间隔记录的数据库。时序数据库采用特殊数据存储方式,极大提高了时间相关数据的处理能力,相对于关系型数据库它的存储空间减半,查询速度极大的提高。
一、时序数据库是什么
时序数据库全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
时间序列数据主要由电力行业、化工行业、气象行业、地理信息等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。

二、时序数据库的特点
1、有效处理庞大数据。
2、对重复的部分,Informix TimeSeries只保持一份数据。
3、节省空间50%,有效降低I/O。
4、主键索引更有效。
5、时间序列表头分离的特性不浪费空间。
三、时序数据库和关系型数据库的区别
1、数据压缩情况
关系型数据库将它们的数据按行存储在磁盘上,不同的数据类型彼此相邻,这限制了可以使用什么类型的压缩算法以及可以压缩多少数据。
而时序数据库通常以相同类型的数据点彼此相邻的方式存储数据,这样的话可以使用最佳压缩算法,大大节省了存储成本。
2、数据库架构
关系型数据库底层是定义好模式的,所以对于表本身,不管是修改还是删除某一列,都会影响到数据库的模式,在底层相当于要进行”数据库迁移“。
而时序数据库往往是无模式的,允许快速轻松地添加新字段。
3、可用性和冗余
关系型数据库可以通过集群存储的方式提供高可用性,但它们容易受到网络可用性的影响,如果连接断开,数据收集将停止。
而时序数据库通过收集器的冗余可以确保良好的可用性,时序数据库一般带有存储转发技术,如果发生中断,该技术会在收集器处缓冲数据,当服务器自动重连时,缓冲区最终会同步上传,确保不会丢失数据。
4、数据安全
数据库被黑客和病毒攻击的事件频繁发生,中q的大多数是知名的关系数据库,常见的攻击比如有:SQL注入。
而时序数据库一般不允许通过标准接口插入、更新或删除数据,此外,时序数据库会跟踪所有更改,包括使用访问、配置、安全违规和系统警报。

时序电源有什么品牌推荐?
PROBASSCO时序电源,PROBASSCO是一个值得信赖的国际音响系统品牌,每一款产品从线路设计、元器件的选用、功能上的实现均凝聚著资深工程师的心血。本产品应用非常广泛,可用于专业音响工程,舞台音响工程,会议音响工程,背景音乐工程,公共广播工程,监控监视工程,弱点系统工程等等。
电源时序器的作用
用于控制用电设备的开启/关闭的时序器,是各类音响工程、电视广播系统、电脑网络系统及其它电气工程不可缺少的设备之一。一般前面板设置总电源开关及两组的指示灯,一组是系统电源指示,一组是八路供电接口给电与否的状态指示,方便在现场使用。背板配有八组受开关控制的AC电源插座,每组电源自动延时15秒动作,对受控的设备起保护作用,确保整个系统的稳定工作每个独立的分组插座允许最大的电流是30A。
请问下电源时序器是用来干什么的?
是用来控制设备延时开关的,主要用来多设备同时启动瞬时电压过大,延时启动可以保护设备正常运行
电源时序器哪个牌子好?
PROBASSCO电源时序器还不错,质量好,性能优异,价格也不贵
简述pc电源的时序逻辑关系
电脑电源是电脑各部件供电的枢纽,是电脑的重要组成部分。

把220V交流电,转换成直流电,分别输送到各个元件。

PC电源 (11张)

电源分类

编辑

1 PC/XT电源

IBM最先推出个人PC/XT机时制定的标准。

2AT电源

也是由IBM早期推出PC/AT机时所提出的标准,当时能够提供192W的电力供应。

3ATX 电源

ATX规范是Intel公司于1995年提出的一个工业标准,时至今日,ATX架构电源已经称为业界的主流标准。ATX是英文AT Extend的缩写,可以翻译为“AT扩展”标准,而ATX 电源就是根据这一规格设计的电源。目前市面上销售的家用电脑电源,一般都遵循ATX 规范。标准尺寸为150x140x86mm。

4BTX 电源

BTX(Balanced Technology eXtended)电源是也就遵从BTX 标准设计的PC 电源。可以理解为是intel为了品牌机厂商生产便利的一个变通。BTX 电源兼容了ATX 技术,其工作原理与内部结构基本同ATX相同,输出标准与目前的ATX12V 20 规范一样,电源输出要求、接口等支持ATX12V、SFX12V、CFX12V和LFX12V。这种电源与以前的电源虽然在技术上没有变化,但为了适应尺寸的要求,采用了不规则的外型。目前定义了220W、240W、275W 三种规格,其中275W 的电源采用相互独立的双路+12V输出。BTX相对于ATX并不是一个革新性的电源标准。

5EPS电源

EPS电源和紧急供电系统(UPS)是完全不同的概念。2002年开始随着数字化时代的发展,出现了为新生的工作组(WorkStation)和服务器机箱供电的SSI EPS标准。ATX电源的标准ATX203规定的主板电源是20pin,CPU电源为4pin。而EPS的特点是主板电源24pin,CPU电源8pin。所以现在经常看到的主板电源为20+4pin,CPU电源为4+4pin的ATX电源其实是ATX电源的扩展,正确名称应该为“ATX/EPS”。

现在流行的家用机主板CPU电源经常会有8pin的接口,普通的ATX电源上的4pin就可以完全满足其用电量(剩下4pin)。ATX电源上会有8pin接口这样的出现是因为intel的至强系列CPU被要求必须有8pin的供电——现行普通CPU的耗电量已经达到了70W以上,这样服务器双CPU就会超过140W,用12V换算的话就是超过12A以上的电流,4pin的四根细线线很明显对主板供电会不稳定,而且这也会造成安全隐患。ATX的20pin也是一样的道理,考虑到向更远的未来发展,主板厂商在普通家用主板上首先推出了24pin主板,而后ATX的单CPU上也出现了8pin接口,完全兼容了EPS标准。而这样的主板使用标准ATX电源也是完全可以的,不过出于安全考虑,最好把所有的线都接上。
时序电源报警是代表什么意思
那可能是出现问题了。一禾企业供应时序电源,稳定,可靠
电源时序器
整个广播系统会由很多设备构成,如前置放大器、CD播放器、功放机、分区器等等,而这些机器的电源线会全部连接到电源时序器上。由于设备电源稳定需要短暂时间等问题这里面就有先开后开,先关后关的学问了。一般先开音源设备,等起稳定,再开下级设备。

是否可以解决您的问题?
请问下电源时序器是用来干什么的?
电源时序器能够按照由前级设备到后级设备逐个顺序启动电源,关闭供电电源时则由后级到前级的顺序关闭各类用电设备。这样就能有效的统一管理和控制各类用电设备,避免了人为的失误 *** 作,同时又可减低用电设备在开关瞬间对供电电网的冲击,也避免了感生电流对设备的冲击,确保了整个用电系统的稳定。
时序电源到中控的线怎么连
PROBASSCO时序电源控制器、带RS232控制接口可用中控控制 可扩展级联 万能插座。

Websocket保证时序。
当前Web应用中较常见的一种持续通信方式,通常采取setInterval或者setTimeout实现。
每隔10秒向服务器请求一次数据,并在数据到达后存储。这个实现方法通常可以满足简单的需求,然而同时也存在着很大的缺陷。在网络情况不稳定的情况下,服务器从接收请求、发送请求到客户端接收请求的总时间有可能超过10秒,而请求是以10秒间隔发送的,这样会导致接收的数据到达先后顺序与发送顺序不一致。

CPU又叫中央处理器,是英文单词Central Processing Unit的缩写,负责对信息和数据进行运算和处理,并实现本身运行过程的自动化。在早期的计算机当中,CPU被分成了运算器和控 制器两个部分,后来由于电路集成度的提高,在微处理器问世时,就将它们都集成在一个芯片中了。需要智能控制、大量信息处理的地方就会 用到CPU。
CPU有通用CPU和嵌入式CPU,通用和嵌入式的分别,主要是根据应用模式的不同而划分的。通用CPU芯片的功能一般比较强,能运 行复杂的 *** 作系统和大型应用软件。嵌入式CPU在功能和性能上有很大的变化范围。随着集成度的提高,在嵌入式应用中,人们倾向于把CPU、 存储器和一些外围电路集成到一个芯片上,构成所谓的系统芯片(简称为SOC),而把SOC上的那个CPU成为CPU芯核。
现在,指令系统的优化设计有两个截然相反的方向。一个是增强指令的功能,设置一些功能复杂的指令,把一些原来有软件实现的常用功能 改用硬件的指令系统来实现,这种计算机成为复杂指令系统计算机。早期Intel的X86指令体系就是一种CISC指令结构。
RISC是Reduced Instruction Set Computer的缩写中文翻译成精简指令系统计算机,是八十年代发展起来的,尽量简化指令功能,只保留那些功能简单,能在 一个节拍内执行完成的指令,较复杂的功能用一段子程序来实现,这种计算机系统成为精简指令系统计算机。目前采用RISC体系结构的处理器 的芯片厂商有SUN、SGI、IBM的Power PC系列、DEC公司的Alpha系列、Motorola公司的龙珠和Power PC等等。
介绍一下 MIPS体系。
MIPS是世界上很流行的一种RISC处理器。MIPS的意思是"无内部互锁流水级的微处理器"(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。他最早是在80年代初期由斯坦福(Stanford)大学 Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品以为很多打计算机 公司采用构成各种工作站和计算机系统。
指令系统
要讲CPU,就必须先讲一下指令系统。 指令系统指的是一个CPU所能够处理的全部指
令的集合,是一个CPU的根本属性。比如我们现在所用的CPU都是采用x86指令集的,他们都是 同一类型的CPU,不管是PIII、Athlon或Joshua。我们也知道,世界上还有比PIII和Athlon快得多的CPU,比如Alpha,但它们不是用x86指令集 ,不能使用数量庞大的基于x86指令集的程序,如Windows98。之所以说指令系统是一个CPU的根本属性,是因为指令系统决定了一个CPU能够运 行什么样的程序。
所有采用高级语言编出的程序,都需要翻译(编译或解释)成为机器语言后才能运行,这些机器语言中 所包含的就是一条条的指令。
1、 指令的格式
一条指令一般包括两个部分: *** 作码和地址码。 *** 作码其实就是指令序列号,用来告诉CPU需要执行的是那一条指令。地址码则复杂一些,主要包括源 *** 作数地址、目的地址和下一条指令的地址 。在某些指令中,地址码可以部分或全部省略,比如一条空指令就只有 *** 作码而没有地址码。
举个例子吧,某个指令系统 的指令长度为32位, *** 作码长度为8位,地址长度也为8位,且第一条指令是加,第二条指令是减。当它收到一个 “00000010000001000000000100000110”的指令时,先取出它的前8位 *** 作码,即00000010,分析得出这是一个减法 *** 作,有3个地址,分别是 两个源 *** 作数地址和一个目的地址。于是,CPU就到内存地址00000100处取出被减数,到00000001处取出减数,送到ALU中进行减法运算,然后 把结果送到00000110处。
这只是一个相当简单化的例子,实际情况要复杂的多
2、 指令的分类与寻址 方式
一般说来,现在的指令系统有以下几种类型的指令:
(1)算术逻辑运算指令
算术逻辑运算 指令包括加减乘除等算术运算指令,以及与或非异或等逻辑运算指令。现在的指令系统还加入了一些十进制运算指令以及字符串运算指令等。
(2)浮点运算指令
用于对浮点数进行运算。浮点运算要大大复杂于整数运算,所以CPU中一般还会有专门负责浮点运 算的浮点运算单元。现在的浮点指令中一般还加入了向量指令,用于直接对矩阵进行运算,对于现在的多媒体和3D处理很有用。
(3)位 *** 作指令
学过C的人应该都知道C语言中有一组位 *** 作语句,相对应的,指令系统中也有一组位 *** 作指令,如左移一位右移 一位等。对于计算机内部以二进制不码表示的数据来说,这种 *** 作是非常简单快捷的。
(4)其他指令
上面三种都是 运算型指令,除此之外还有许多非运算的其他指令。这些指令包括:数据传送指令、堆栈 *** 作指令、转移类指令、输入输出指令和一些比较特 殊的指令,如特权指令、多处理器控制指令和等待、停机、空 *** 作等指令。
对于指令中的地址码,也会有许多不同的寻址 (编址)方式,主要有直接寻址,间接寻址,寄存器寻址,基址寻址,变址寻址等,某些复杂的指令系统会有几十种甚至更多的寻址方式。
3、 CISC与RISC
CISC,Complex Instruction Set Computer,复杂指令系统计算机。RISC,Reduced Instruction Set Computer,精简指令系统计算机。虽然这两个名词是针对计算机的,但下文我们仍然只对指令集进行研究。
(1)CISC 的产生、发展和现状
一开始,计算机的指令系统只有很少一些基本指令,而其他的复杂指令全靠软件编译时通过简单指令 的组合来实现。举个最简单的例子,一个a乘以b的 *** 作就可以转换为a个b相加来做,这样就用不着乘法指令了。当然,最早的指令系统就已经 有乘法指令了,这是为什么呢?因为用硬件实现乘法比加法组合来得快得多。
由于那时的计算机部件相当昂贵,而且速度 很慢,为了提高速度,越来越多的复杂指令被加入了指令系统中。但是,很快又有一个问题:一个指令系统的指令数是受指令 *** 作码的位数所 限制的,如果 *** 作码为8位,那么指令数最多为256条(2的8次方)。
那么怎么办呢?指令的宽度是很难增加的,聪明的设计师们又想出了 一种方案: *** 作码扩展。前面说过, *** 作码的后面跟的是地址码,而有些指令是用不着地址码或只用少量的地址码的。那么,就可以把 *** 作码 扩展到这些位置。
举个简单的例子,如果一个指令系统的 *** 作码为2位,那么可以有00、01、10、11四条不同的指令。现在 把11作为保留,把 *** 作码扩展到4位,那么就可以有00、01、10、1100、1101、1110、1111七条指令。其中1100、1101、1110、1111这四条指令 的地址码必须少两位。
然后,为了达到 *** 作码扩展的先决条件:减少地址码,设计师们又动足了脑筋,发明了各种各样的寻址方式,如基 址寻址、相对寻址等,用以最大限度的压缩地址码长度,为 *** 作码留出空间。
就这样,慢慢地,CISC指令系统就形成了, 大量的复杂指令、可变的指令长度、多种的寻址方式是CISC的特点,也是CISC的缺点:因为这些都大大增加了解码的难度,而在现在的高速硬 件发展下,复杂指令所带来的速度提升早已不及在解码上浪费点的时间。除了个人PC市场还在用x86指令集外,服务器以及更大的系统都早已不 用CISC了。x86仍然存在的唯一理由就是为了兼容大量的x86平台上的软件。
]:(2)RISC的产生、发展和现状
1975年,IBM的设计师John Cocke研究了当时的IBM370CISC系统,发现其中占总指令数仅20%的简单指令却在程序调用中占了80% ,而占指令数80%的复杂指令却只有20%的机会用到。由此,他提出了RISC的概念。
事实证明,RISC是成功的。80年代末,各公司的RISC CPU如雨后春笋般大量出现,占据了大量的市场。到了90年代,x86的CPU如pentium和k5也开始使用先进的RISC核心。
RISC 的最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线 ,寄存器数量多,大量 *** 作在寄存器之间进行。由于下文所讲的CPU核心大部分是讲RISC核心,所以这里就不多介绍了,对于RISC核心的设计下 面会详细谈到。
RISC目前正如日中天,Intel的Itanium也将最终抛弃x86而转向RISC结构。
二、CPU内核结构
好吧 ,下面来看看CPU。CPU内核主要分为两部分:运算器和控制器。
(一) 运算器
1、 算术逻辑运算单元ALU(Arithmetic and Logic Unit)
ALU主要完成对二进制数据的定点算术运算(加减乘除)、逻辑运算(与或非异或)以及移位 *** 作。在某些CPU中还 有专门用于处理移位 *** 作的移位器。
通常ALU由两个输入端和一个输出端。整数单元有时也称为IEU(Integer Execution Unit)。我们通常所说的“CPU是XX位的”就是指ALU所能处理的数据的位数。
2、 浮点运算单元FPU(Floating Point Unit)
FPU主要负责浮点运算和高精度整数运算。有些FPU还具有向量运算的功能,另外一些则有专门的向量处理单元。
3、通用寄存器组
通用寄存器组是一组最快的存储器,用来保存参加运算的 *** 作数和中间结果。
在通用寄存器的设计上,RISC与CISC有 着很大的不同。CISC的寄存器通常很少,主要是受了当时硬件成本所限。比如x86指令集只有8个通用寄存器。所以,CISC的CPU执行是大多数时 间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。而RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存 器窗口和寄存器堆等技术使寄存器资源得到充分的利用。
对于x86指令集只支持8个通用寄存器的缺点,Intel和AMD的最新 CPU都采用了一种叫做“寄存器重命名”的技术,这种技术使x86CPU的寄存器可以突破8个的限制,达到32个甚至更多。不过,相对于RISC来说 ,这种技术的寄存器 *** 作要多出一个时钟周期,用来对寄存器进行重命名。
4、 专用寄存器
专用寄存器通常是一些状 态寄存器,不能通过程序改变,由CPU自己控制,表明某种状态。
(二) 控制器
运算器只能完成运算,而控 制器用于控制着整个CPU的工作。
1、 指令控制器
指令控制器是控制器中相当重要的部分,它要完成取指令、分析指令等 *** 作,然 后交给执行单元(ALU或FPU)来执行,同时还要形成下一条指令的地址。
2、 时序控制器
时序控制器的作用是为每条 指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就 是CPU的主频;而倍频定义单元则定义了CPU主频是存储器频率(总线频率)的几倍。
3、 总线控制器
总线控制器主要用于控制CPU 的内外部总线,包括地址总线、数据总线、控制总线等等。
4、中断控制器
中断控制器用于控制各种各样的中断请求,并根据优先 级的高低对中断请求进行排队,逐个交给CPU处理。
(三) CPU核心的设计
CPU的性能是由什么决定的呢?单纯的一个ALU速度在一个CPU中并不起决定性作用,因为ALU的速度都差不多。而一个CPU的性能表现的决 定性因素就在于CPU内核的设计。
1、超标量(Superscalar)
既然无法大幅提高ALU的速度,有什么替代的方法呢?并行处理的方 法又一次产生了强大的作用。所谓的超标量CPU,就是只集成了多个ALU、多个FPU、多个译码器和多条流水线的CPU,以并行处理的方式来提高 性能。
超标量技术应该是很容易理解的,不过有一点需要注意,就是不要去管“超标量”之前的那个数字,比如“9路超标量”,不同 的厂商对于这个数字有着不同的定义,更多的这只是一种商业上的宣传手段。
2、流水线(Pipeline)
流水线是现代RISC核心的一 个重要设计,它极大地提高了性能。
对于一条具体的指令执行过程,通常可以分为五个部分:取指令,指令译码,取 *** 作数,运算 (ALU),写结果。其中前三步一般由指令控制器完成,后两步则由运算器完成。按照传统的方式,所有指令顺序执行,那么先是指令控制器工 作,完成第一条指令的前三步,然后运算器工作,完成后两步,在指令控制器工作,完成第二条指令的前三步,在是运算器,完成第二条指令 的后两部……很明显,当指令控制器工作是运算器基本上在休息,而当运算器在工作时指令控制器却在休息,造成了相当大的资源浪费。解决 方法很容易想到,当指令控制器完成了第一条指令的前三步后,直接开始第二条指令的 *** 作,运算单元也是。这样就形成了流水线系统,这是 一条2级流水线。
如果是一个超标量系统,假设有三个指令控制单元和两个运算单元,那么就可以在完成了第一条指令的取址工作后直 接开始第二条指令的取址,这时第一条指令在进行译码,然后第三条指令取址,第二条指令译码,第一条指令取 *** 作数……这样就是一个5级流 水线。很显然,5级流水线的平均理论速度是不用流水线的4倍。
流水线系统最大限度地利用了CPU资源,使每个部件在每个时钟周期都 工作,大大提高了效率。但是,流水线有两个非常大的问题:相关和转移。
在一个流水线系统中,如果第二条指令需要用到第一条指 令的结果,这种情况叫做相关。以上面哪个5级流水线为例,当第二条指令需要取 *** 作数时,第一条指令的运算还没有完成,如果这时第二条指 令就去取 *** 作数,就会得到错误的结果。所以,这时整条流水线不得不停顿下来,等待第一条指令的完成。这是很讨厌的问题,特别是对于比 较长的流水线,比如20级,这种停顿通常要损失十几个时钟周期。目前解决这个问题的方法是乱序执行。乱序执行的原理是在两条相关指令中 插入不相关的指令,使整条流水线顺畅。比如上面的例子中,开始执行第一条指令后直接开始执行第三条指令(假设第三条指令不相关),然 后才开始执行第二条指令,这样当第二条指令需要取 *** 作数时第一条指令刚好完成,而且第三条指令也快要完成了,整条流水线不会停顿。当 然,流水线的阻塞现象还是不能完全避免的,尤其是当相关指令非常多的时候。
另一个大问题是条件转移。在上面的例子中,如果第 一条指令是一个条件转移指令,那么系统就会不清楚下面应该执行那一条指令?这时就必须等第一条指令的判断结果出来才能执行第二条指令 。条件转移所造成的流水线停顿甚至比相关还要严重的多。所以,现在采用分支预测技术来处理转移问题。虽然我们的程序中充满着分支,而 且哪一条分支都是有可能的,但大多数情况下总是选择某一分支。比如一个循环的末尾是一个分支,除了最后一次我们需要跳出循环外,其他 的时候我们总是选择继续循环这条分支。根据这些原理,分支预测技术可以在没有得到结果之前预测下一条指令是什么,并执行它。现在的分 支预测技术能够达到90%以上的正确率,但是,一旦预测错误,CPU仍然不得不清理整条流水线并回到分支点。这将损失大量的时钟周期。所以 ,进一步提高分支预测的准确率也是正在研究的一个课题。
越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越 长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。
1、解码器(Decode Unit)
这是x86CPU才有的东西,它的作用是把长度不定的x86指令转换为长度固定的类似于RISC的指令,并交给RISC内核。解码分为硬件解码和微解码 ,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复 杂。好在这些复杂指令很少会用到。
Athlon也好,PIII也好,老式的CISC的x86指令集严重制约了他们的性能表现。
2、一级缓存 和二级缓存(Cache)
以及缓存和二级缓存是为了缓解较快的CPU与较慢的存储器之间的矛盾而产生的,以及缓存通常集成在CPU内核, 而二级缓存则是以OnDie或OnBoard的方式以较快于存储器的速度运行。对于一些大数据交换量的工作,CPU的Cache显得尤为重要。

海盗船16g3200内存时序是16-20-20-38。根据查询相关资料信息显示,时序是描述内存性能的参数,用阿拉伯数字来表示盗船内存采用黑化加强版PCB,双面16颗特挑颗粒,超频潜力优秀,16GB3200MHz时序为16-20-20-38。时序是对内存性能的影响最明显的,数字代表着内存的延迟时间,数字越小越好。海盗船内存,国内又称海盗旗,是一家位于加利福尼亚州佛利蒙的私有公司。Corsair公司属全球最大的内存供应商之一,是全球最受尊敬的超频内存制造商,多家世界知名电脑厂商OEM合作伙伴。Corsair内存的超级性能专为极大需求的应用软件而设,也一直被应用关键的服务器及极高性能的工作站(包括游戏系统)上。

     思极有容时序数据库正是普华公司面对这一高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,它不依赖任何第三方软件,也不是优化或包装了一个开源的数据库或流式计算产品,而是在吸取众多传统关系型数据库、NoSQL数据库、流式计算引擎、消息队列等软件的优点之后自主开发的产品,在时序空间大数据处理上,有着自己独到的优势。

·        10倍以上的性能提升:定义了创新的数据存储结构,单核每秒就能处理至少2万次请求,插入数百万个数据点,读出一千万以上数据点,比现有通用数据库快了十倍以上。

·        硬件或云服务成本降至1/5:由于超强性能,计算资源不到通用大数据方案的1/5;通过列式存储和先进的压缩算法,存储空间不到通用数据库的1/10。

·        全栈时序数据处理引擎:将数据库、消息队列、缓存、流式计算等功能融合一起,应用无需再集成Kafka/Redis/HBase/HDFS等软件,大幅降低应用开发和维护的复杂度成本。

·        强大的分析功能:无论是十年前还是一秒钟前的数据,指定时间范围即可查询。数据可在时间轴上或多个设备上进行聚合。临时查询可通过Shell, Python, R, Matlab随时进行。

·        与第三方工具无缝连接:不用一行代码,即可与Telegraf, Grafana, Matlab, R等工具集成。后续将支持MQTT, OPC等工具, 与BI工具也能够无缝连接。

·        零运维成本、零学习成本:安装、集群一秒搞定,无需分库分表,实时备份。支持标准SQL语句,支持JDBC, RESTful连接, 支持Python/Java/C/C++/Go等开发语言, 与MySQL相似,零学习成本。

采用思极有容时序数据库,可将典型的物联网、车联网、工业互联网大数据平台的整体成本降至现有的1/5。同样的硬件资源,思极有容时序数据库能将系统处理能力和容量增加五倍以上。

同时,相比HBase等数据库,使用普华思极有容时序数据库来存储有以下优势:

1 存储空间大幅节省,估计不到HBase的1/10

2 服务器资源大幅节省,估计不到1/5

3 查询速度提高至少10倍

4 提供异地容灾备份方案

5 支持通过标准SQL进行即席查询

6 数据超过保留时长,自动删除

7 零管理,安装、部署、维护极其简单,一键搞定

配置完成后,由druid的query节点的8888端口提供可视化页面,可以通过nginx来反向代理103210240:8888和103210241:8888

注意:启动完成后要通过exit退出服务器连接,不能直接关闭窗口或断开连接,不然druid的后台进程也会被关闭


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10336400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存