三星固态硬盘evo和pro的区别
这个就简单啦,虽然使用上感觉的差距不是很明显,
不过,
就好像普通硬盘与服务器硬盘的对比:
一个是普通产品,一个是高端旗舰型号!
三星固态硬盘PRO和EVO简单来说定位有所区别,PRO定位高端旗舰型号,EVO定位亲民大众型号。我从官方客服得到答案是,EVO用的是闪存颗粒是Samsung V-NAND 3bit MLC,PRO用的闪存颗粒是Samsung V-NAND 2bit MLC,而实际Samsung V-NAND 3bit MLC就是3D TLC颗粒。-Pro
所以可以总结为:PRO主要采用的是可靠性和性能非常出色的MLC NAND颗粒,EVO而采用的是性价比且可靠性也非常高的3D TLC NAND颗粒。
到底啥是MLC啥是TLC,大家可能有些晕,我先给大家简单普及下。
颗粒的传统分类:SLC、MLC、TLC
简单来说,NAND闪存中存储的数据是以电荷的方式存储在每个NAND存储单元内的,SLC、MLC及TLC就是存储的位数不同。
SLC(Single-Level Cell)单层式存储每个存储单元仅能储存1bit数据,同样,MLC(Multi-Level Cell)可储存2bit数据,TLC(Trinary-Level)可储存3bit数据。一个存储单元上,一次存储的位数越多,该单元拥有的容量就越大,这样能节约闪存的成本,提高NAND的生产量。-pro
MLC的优势在于,TLC需要识别8种信号,而MLC只需要识别4种信号,可以花更少时间来读取数据。因此,3D NAND出现之前,MLC在性能和可靠性上,是高于TLC的。但是,随着三星的3D TLC的出现,TLC与MLC的性能和可靠性逐渐拉小差距。-Pro
3D NAND闪存:三星的杀手锏级产品
刚介绍的NAND闪存不仅有SLC、MLC和TLC类型之分,为了进一步提高容量、降低成本,NAND的制程工艺也在不断进步,从早期的50nm一路狂奔到目前的15/16nm。虽然先进工艺虽然带来了更大的容量,但是NAND闪存的制程工艺是双刃剑,容量提升、成本降低的同时可靠性及性能都在下降,因为工艺越先进,NAND的硅基越薄,可靠性也越差,厂商就需要采取额外的手段来弥补,但这又会提高成本,以致于达到某个点之后制程工艺已经无法带来优势了。-pro
相比之下,3D NAND解决问题的思路就不一样了,想要提高NAND的容量、降低成本,厂商不需要费劲心思去提高制程工艺了,转而堆叠更多的层数就可以了,这样一来3D NAND闪存的容量、性能、可靠性都有了保证了。-Pro
由于已经向垂直方向扩展NAND密度,那就没有继续缩小晶体管的压力了,所以三星可以使用相对更旧的工艺来生产3D NAND闪存,做成3D V-NAND MLC或者3D V-NAND TLC。现在三星已经就这样做了,Pro是3D MLC,Evo是3D TLC。使用旧工艺的好处就是P/E擦写次数大幅提升,而且电荷干扰的情况也因为使用旧工艺而大幅减少。-pro
三星闪存颗粒
过去房子基本都是一层平房,要想在固定大小的房子里隔出更多的房间,就需要压缩每个房间的空间。随着租客越来越多,房间空间越来越小了,只能放一张床了,再继续压缩的话,人都住不了。怎么办?聪明的建筑师想到了可以在房子上再盖房子,拓展垂直空间。现在好了,有人可以搬到楼上去,大家再也不用挤在那么小的房间。3D NAND闪存思想就是这样的,不是一味的在一个平面提升闪存密度,而是堆积多个平面,达到提升闪存容量的目的。将平房增加楼层盖成高楼,单位面积内可容纳的人就会更多,这点是同理的。-Pro
由此我们也可以得出结论3D MLC》3D TLC》2D MLC》2D TLC,现在不管购买三星PRO还是EVO都不用过分考虑SSD闪存寿命问题,可能电脑主机完全淘汰了SSD还健在,而从正常使用考虑三星EVO采用3D TLC技术也足以应对日常数据处理,追求更高性能的用户则可以考虑三星PRO系列产品,性能更为出色!-pro
如何删除Project2013中无效的资源
按以上操作就会进入【资源工作表】了,里面可以删除、编辑资源内容。
asan对程序性能的影响
address sanitizer(简称asan)是一个用来检测c/c++程序的快速内存检测工具。相比valgrind的优点就是速度快,官方文档介绍对程序性能的降低2倍。
对Asan原理有兴趣的同学可以参考asan的算法这篇文章,它的实现原理就是在程序代码中插入一些自定义代码,如下:
编译前:
*address = ...; // or: ... = *address;
编译后:
if (IsPoisoned(address)) {undefined
ReportError(address, kAccessSize, kIsWrite);
}
*address = ...; // or: ... = *address;`
和valgrind明显不同的是,asan需要添加编译开关重新编译程序,好在不需要自己修改代码。而valgrind不需要编程程序就能直接运行。
address sanitizer集成在了clang编译器中,GCC 4.8版本以上才支持。我们线上程序默认都是使用gcc4.3编译,于是我测试时直接使用clang重新编译nginx:
--with-cc=“clang“ \
--with-cc-opt=“-g -fPIC -fsanitize=address -fno-omit-frame-pointer“
其中with-cc是指定编译器,with-cc-opt指定编译选项, -fsanitize=address就是开启AddressSanitizer功能。
由于AddressSanitizer对nginx的影响较小,所以大压力测试时也能达到上万的并发,内存泄漏的问题很容易就定位了。
这里就不详细介绍内存泄漏的原因了,因为跟openssl的错误处理逻辑有关,是我自己实现的,没有普遍的参考意义。
最重要的是,知道valgrind和asan的使用场景和方法,遇到内存方面的问题能够快速修复。
性能热点分析
到此,经过改造的nginx程序没有core dump和内存泄漏方面的风险了。但这显然不是我们最关心的结果(因为代码本该如此),我们最关心的问题是:
1. 代码优化前,程序的瓶颈在哪里?能够优化到什么程度?
2. 代码优化后,优化是否彻底?会出现哪些新的性能热点和瓶颈?
这个时候我们就需要一些工具来检测程序的性能热点。
perf,oprofile,gprof,systemtap
-Pro