高性能计算-基准测试程序Linpack(HPL)
自通用计算机时代开始以来,就出现了各种用于评估计算机性能的基准测试程序。这些程序的性质通常反映了构建计算机的预期目的,同时还提供了可以与制造商的理论性能估计进行比较的经验性能测量。
高性能计算中最广泛使用的基准之一就是Linpack基准,它的起源是一个线性代数运算包,后来被Lapack库和其他竞争对手取代。但Linpack的基准测试程序在以后的日子里继续发挥强大的影响力。
HPL,即(High-Performance Linpack)是早期Linpack的衍生产品,其高度并行化的设计,使得它用于评估TOP500超级计算机的性能排名。
编译安装HPL环境依赖在安装HPL之前,系统上需要安装好支持C语言和Fortran77语言的编译器,我个人选择使用gcc与gfortran ,我将用他们来安装BLAS、MPICH以及HPL本体。
BLAS到BLAS官网下载好源码,使用tar指令解压。进入BLAS文件夹,执行编译指令:
12345678gfortran -c -O3 *.f # 编译所有的 .f 文件,生成 .o文件 ar rv libblas.a *.o # 链接所有的 .o文件,生成. ...
记录镜像站遭遇SYN泛洪攻击的诊断与防御
异常的连接数近日,镜像站莫名遭到多次攻击,症状表现为TCP连接数异常上升,久久得不到释放。后台监控检测到大量5XX错误,CPU负载高,正常业务受到较大影响。
通过使用netstat命令可以统计服务器当前的各种TCP状态:
1netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
我站在受攻击时的状态列表如下:
123456789TIME_WAIT 168CLOSE_WAIT 9SYN_SENT 3FIN_WAIT1 229FIN_WAIT2 113ESTABLISHED 234SYN_RECV 1272CLOSING 3LAST_ACK 97
可以明显发现SYN_RECV连接数异常增多。
仅通过这一现象就可以判断为服务器受到了SYN Flood泛洪攻击。
SYN Flood泛洪攻击什么是SYN Flood攻击SYN 泛洪(半开连接攻击)是一种拒绝服务(DDoS)攻击,旨在耗尽可用服务器资源,致使服务器无法传输合法流量。攻击者通过重复发送初始连 ...
Pytorch学习回顾--线性回归
生成数据集我们可以调用框架中现有的API来读取数据。我们将features和labels作为API的参数传递,并在实例化数据迭代器对象时指定batch_size。此外,布尔值is_train表示是否希望数据迭代器对象在每个迭代周期内打乱数据。
1234def load_array(data_arrays, batch_size, is_train=True): """构造一个PyTorch数据迭代器。""" dataset = data.TensorDataset(*data_arrays) return data.DataLoader(dataset, batch_size, shuffle=is_train)
12batch_size = 10data_iter = load_array((features, labels), batch_size)
使用data_iter的方式与我们在3.2节中使用data_iter函数的方式相同。为了验证是否正常工作,让我们读取并打印第一个小批量样本。与3.2 ...
HTTP/2带来了什么特性
QLUT镜像站在圣诞节维护中带来了HTTP/2协议的支持。新协议提供了诸多新特性。
二进制分帧HTTP/2所有性能增强的核心在于新的二进制分帧层,如下图所示,它是所有其他功能和性能优化的基础,它定义了如何封装HTTP消息并在客户端与服务器之间传输。
HTTP/2没有改动HTTP的应用语义,仍然使用HTTP的请求方法、状态码和头字段等规则,它主要修改了HTTP的报文传输格式。HTTP/1.1协议以换行符作为纯文本的分隔符,而HTTP/2将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们编码,这些帧对应着特定数据流中的消息,他们都在一个TCP连接内复用。
优先级排序将HTTP消息分解为很多独立的帧之后就可以复用多个数据流中的帧,客户端和服务器交错发送和传输这些帧的顺序就成为关键的性能决定因素。HTTP/2允许每个数据流都有一个关联的权重和依赖关系,数据流依赖关系和权重的组合明确表达了资源优先级,这是一种用于提升浏览性能的关键功能。HTTP/2协议还允许客户端随时更新这些优先级,我们可以根据用户互动和其他信号更 ...
如何在服务端启用BBR拥塞控制算法
2016 年底,Google 发表了一篇优化 TCP 传输算法的文章,极大的提高了 TCP 的 throughput(吞吐量),并且已经集成到 Linux 4.9 内核中。这个算法就是BBR(Bottleneck Bandwidth and Round-trip propagation time)。
作为一个软件源镜像站,启用BBR将显著提升服务器的带宽利用率。但由于服务器所用的CentOS内核版本过低,我们需要先升级系统内核。
更新内核包
执行以下命令,查看当前 Kernel 版本。
1uname -r
执行以下命令,更新软件包。
1yum update -y
执行以下命令,导入 ELRepo 公钥。
1rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
执行以下命令,安装 ELRepo 的 yum 源。
1yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安装新内核
执行以下命令,查看 ELRepo 仓库 ...
如何在Nginx上支持HTTP/2
HTTP/2(原名HTTP 2.0)即超文本传输协议第二版,使用于万维网。HTTP/2主要基于SPDY协议,通过对HTTP头字段进行数据压缩、对数据传输采用多路复用和增加服务端推送等举措,来减少网络延迟,提高客户端的页面加载速度。HTTP/2没有改动HTTP的应用语义,仍然使用HTTP的请求方法、状态码和头字段等规则,它主要修改了HTTP的报文传输格式,通过引入二进制分帧实现性能的提升。
编译带有HTTP/2支持的Nginx默认编译的 Nginx 并不包含 HTTP/2 模块,我们需要加入参数来编译.
我们首先记录下Nginx原先的编译配置:
1/usr/local/nginx/sbin/nginx -V
得到下面的内容:
12345nginx version: nginx/1.20.2built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigur ...
Pytorch学习回顾--数据预处理
为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始,而不是从那些准备好的张量格式数据开始。在Python中常用的数据分析工具中,通常使用pandas软件包。
读取数据集举一个例子,我们首先创建一个人工数据集,并存储在csv(逗号分隔值)文件data/house_tiny.csv中。以其他格式存储的数据也可以通过类似的方式进行处理。下面的mkdir_if_not_exist函数可确保目录data存在。
下面我们将数据集按行写入CSV文件中。
12345678910import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f: f.write('NumRooms,Alley,Price\n') # ...
QLUT镜像站的日志监控及预警方案
十分意外镜像站用户增长速度如此之快,面对日均五万左右的用户量,服务器频繁出现各种性能问题。在故障排查的过程中,我意识到服务器需要一套成熟、完整、可靠的日志监控及预警方案。
先前长期使用 goaccess 静态分析Nginx的日志,具有滞后性。只能用于单纯的分析总结一段时间内的网站流量状况,而无法做到实时监看服务状态和运行数据。
既然是开源镜像站,那么我们就需要把目光投向开源社区。
较为流行的ELK目前市面上最流行的日志处理方案莫过于“ELK”系统,“ELK”是Elasticsearch、Logstash和Kibana的组合的合称。
Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
InfluxDB&Telegraf通过自己的初步了解以及咨询使用者的使用体验,我认为ELK在使用体验和性能上都不适合我(其实是单纯的不喜欢Java)。而一个朋友推荐 ...
云场景下的网络QoS
公共的网络链路总会不可避免的产生带宽抢占的问题,我们通常使用QoS技术保障大多数用户的服务质量。
一台服务器能控制的只有出方向的QoS,通过Shaping将出站流量整形,至于入栈流量只能通过Policy决定丢弃哪一部分数据包。
队列方式控制网络QoSLinux下的TC就主要是使用队列技术控制的网络QoS。
无类别排队规则不分类(或称无类别)排队规则(classless queueing disciplines)可以对某个网络 接口(interface)上的所有流量进行无差别整形。包括对数据进行:
重新调度(reschedule)
增加延迟(delay)
丢弃(drop)
与 classless qdisc 对应的是 classful qdisc,即有类别(或称分类别)排队规则。目前最常用的classless qdisc 是pfifo_fast,这也是很多系统上的 默认排队规则。
pfifo_fast 先入先出队列如名字所示,这是一个先入先出(FIFO)队列,因此对所有的包都一视同仁。
pfifo_fast有三个所谓的 “band”(可理解为三个队列),编号分别为 0、1、2:
...
TCP状态机
一个TCP连接在它的生命周期内会有不同的状态。
下图说明了TCP连接可能会有的状态,以及基于事件的状态转换。事件中有的是应用程序的操作,有的是接收到了网络发过来的请求。
TCP状态及其描述如下表。
状态
描述
LISTEN
等待来自远程TCP应用程序的请求
SYN_SENT
发送连接请求后等待来自远程端点的确认。TCP第一次握手后客户端所处的状态
SYN-RECEIVED
该端点已经接收到连接请求并发送确认。 该端点正在等待最终确认。TCP第二次握手后服务端所处的状态
ESTABLISHED
代表连接已经建立起来了。这是连接数据传输阶段的正常状态
FIN_WAIT_1
等待来自远程TCP的终止连接请求或终止请求的确认
FIN_WAIT_2
在此端点发送终止连接请求后,等待来自远程TCP的连接终止请求
CLOSE_WAIT
该端点已经收到来自远程端点的关闭请求,此TCP正在等待本地应用程序的连接终止请求
CLOSING
等待来自远程TCP的连接终止请求确认
LAST_ACK
等待先前发送到远程TCP的连接终止请求的确认
TIME_WAIT ...