
performance
文章平均质量分 69
shilei-luc
服务器生态技术专家
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
高级优化技巧 - 并行算法优化
并行算法优化是提高程序性能的另一个重要领域。通过设计高效的并行算法,可以更好地利用多核处理器的计算资源,显著加速计算过程。原创 2024-11-28 22:16:36 · 460 阅读 · 0 评论 -
微软定义的人机交互时间和感受的定量指标
来源:微软 Windows 博客。原创 2024-11-28 21:34:07 · 219 阅读 · 0 评论 -
对两个 4096 x 4096 矩阵相乘程序进行性能优化的速度提升
Leiserson 等人,2020] 的论文为性能差距提供了一个优秀的例子,该例子展示了“默认”与高度优化软件之间的对比。原创 2024-11-28 21:30:26 · 212 阅读 · 0 评论 -
Code Locality 和 Data Locality
如果访问的其他数据也存储在相邻的缓存位置(空间局部性),那么这些数据也很可能在缓存中,进一步加速程序执行。例如,在访问一个函数时,如果该函数会频繁访问特定的全局变量或静态变量,那么这些变量的局部性会影响函数执行的性能。是指程序在访问内存时,数据的访问模式表现出高度的局部性。具体来说,程序在访问数据时,通常会集中访问某一特定区域的数据,尤其是连续内存区域的数据。假设我们要进行矩阵乘法运算,在传统的访问方式中,我们可能会按行遍历矩阵,这会导致每次访问的元素之间存在较大的距离,导致缓存未命中。原创 2024-11-15 23:34:35 · 679 阅读 · 0 评论 -
什么是 False Sharing?
是多线程编程中的一个常见性能问题,发生在多个线程访问同一个缓存行中的不同数据时,导致不必要的缓存一致性操作,增加了程序的运行延迟。由于每个线程都在修改自己独立的数据,而这个数据与其他线程的数据处于同一个缓存行内,这会导致缓存行频繁地被标记为“脏”,并且必须从一个核心的缓存复制到另一个核心的缓存中。每当一个线程修改一个数据,处理器会将包含该数据的整个缓存行标记为“脏”的,并将该缓存行广播到其他处理器或核的缓存中,确保数据一致性。:确保每个线程访问的数据在内存中有足够的空间,避免多个线程同时访问同一个缓存行。原创 2024-11-15 23:31:50 · 782 阅读 · 0 评论 -
CHA(Cache Hierarchy/Home Agent)与缓存一致性
首先,了解缓存一致性问题之前,我们需要先了解缓存是什么。缓存是计算机中用来暂存数据的高速存储器,目的是减少CPU访问内存的延迟。原创 2024-11-15 23:27:44 · 428 阅读 · 0 评论 -
TLB Miss:详解TLB的引入、查表过程及影响
现代CPU的TLB命中率通常很高,但当程序访问模式不规则或数据集过大时,TLB miss的发生率会显著增加。如果TLB miss并且页表查找成功,访问完物理内存后,MMU会将新的映射存入TLB,便于下次访问。:MMU查看虚拟地址中的页号部分,去TLB缓存中查找是否已经存储了该虚拟页号到物理页号的映射。如果TLB中存在该映射,称为。:如果TLB中没有对应的地址映射(TLB miss),CPU会去内存中的页表查找对应的映射。:一旦页表返回映射,MMU将该映射加载到TLB中,并用新的物理地址继续进行内存访问。原创 2024-11-15 23:22:37 · 618 阅读 · 0 评论 -
TLB Miss:是什么?为什么它会影响性能?
TLB miss是影响计算机性能的一个重要因素,它会导致CPU必须更慢地查找地址映射,降低程序的执行速度。理解TLB miss的原因和影响,并采取适当的优化措施,可以大幅提高程序的运行效率。通过优化内存访问模式、使用大页内存等手段,可以有效减少TLB miss,进而提升系统性能。原创 2024-11-15 23:20:53 · 475 阅读 · 0 评论 -
Node.js 性能差异分析:探索 Node 16 与 Node 21 在基准测试中的表现
Node.js 的版本更新常常伴随着性能改进,但在某些情况下,不同版本之间的性能差异可能会令人困惑,尤其是当基准测试中的参数设置不合适时。最近,社区成员发现 Node 16.x 和 Node 21.1 在运行基准测试时表现出了显著的性能差异,特别是在n=1000的测试中,Node 16.x 的性能优于 Node 21.1,但随着n值增大,这一差异逐渐消失。原创 2024-11-15 23:17:22 · 640 阅读 · 0 评论 -
Node.js 通过 Clang 编译器启用 PGO 的过程
在 Node.js 中,启用 PGO 的目的是通过分析应用在真实负载下的性能数据,来优化编译器生成的机器代码。通过动态收集热点数据,编译器可以决定哪些函数需要更多的优化,从而提升整体性能。在 PR 中,主要做了以下几个关键步骤:PR 通过修改 Node.js 的构建配置,启用了 Clang 编译器的 PGO 功能。具体的步骤如下:使用 标志:这一步会启动 PGO 数据的收集并进行初步编译。运行程序收集数据:例如,执行以下命令来生成性能数据:这将会在运行时生成性能数据文件(通常为 文件),这些数据文件原创 2024-11-15 22:16:31 · 162 阅读 · 0 评论 -
通过调整 `max_semi_space_size` 优化 Node.js 性能
在 Node.js 的性能调优中,是一个经常被忽视的设置,但它却能显著影响应用的运行效率。该设置定义了 V8 引擎中“半空间”(semi-space)的最大大小,直接关系到垃圾回收(GC)频率和内存使用情况。通过合理的调整,我们可以在服务器环境中显著提升 Node.js 的吞吐量。原创 2024-11-02 22:40:54 · 349 阅读 · 0 评论 -
减少footprint的常见手法:通过log和bit shift来管理内存分配
这里有个例子,讲了如何利用元素大小的对数值(log 值)来高效计算数组的总字节大小。原创 2024-11-02 21:35:45 · 197 阅读 · 0 评论 -
减少footprint的常见手法:bit定义
表示是否为抽象类。is_final:表示是否为最终类。:表示是否为接口。is_enum:表示是否为枚举类型。is_static:表示方法是否是静态的。is_native:表示方法是否为本地方法。:表示方法是否是同步的。:表示是否为构造函数。原创 2024-11-02 21:17:03 · 866 阅读 · 0 评论 -
减少footprint的常见手法:使用位操作压缩数据与高效存储
在嵌入式编程中,内存总是非常紧张,所以写代码时要尽量减少内存占用。一个常用的小技巧就是通过按位操作来“压缩”数据。这种方法特别适合那些数值范围比较小的数据,比如标志位、状态、传感器的读数等。很多情况下,我们可以用一个变量存储多个数据,这样就省下了不少内存空间。原创 2024-11-02 20:00:37 · 327 阅读 · 0 评论 -
C++中快速计算包含灵活数组成员(Flexible Array Member)结构体的大小
灵活数组是C++中常用的一种表示动态大小的结构体,结构体的最后一个成员是一个大小为0的数组,便于在结构体末尾动态分配可变大小的数组。在这个例子中,extra_data是一个大小为0的数组,它不会实际占用内存,而是用来表示一个的数据块。这种结构体通常用于在堆上分配时,根据实际需求来决定extra_data的大小,比如在结构体后面留出一定的空间存储额外的数据。例如,我们可以使用malloc动态分配空间,并将extra_data看作一个实际长度的数组。假设我们要在extra_data中放置 10 个int。原创 2024-11-02 19:56:11 · 399 阅读 · 0 评论 -
Intel处理器的缓存隔离技术
缓存(Cache)一般无法像CPU核心和内存那样完全隔离。CPU缓存(如L1、L2、L3缓存)通常是由硬件管理的,属于物理资源,在大多数情况下,操作系统和容器管理工具(如Docker)无法直接控制其隔离。原创 2024-11-02 18:16:47 · 418 阅读 · 0 评论 -
Node.js 使用Large page来减少TLB miss
但对于Node.js等执行大量指令的高性能应用来说,4KB的页太小,会导致频繁的TLB(Translation Lookaside Buffer)切换,增加了性能开销。将Node.js的代码段映射到更大的内存页(例如2MB的大页)可以减少TLB缺失,提高执行速度。:避免编译器将该函数内联到其他代码中,确保函数始终作为一个独立的调用,便于控制执行流。:将函数对齐到2MB边界,确保在大页布局中位置一致,有助于减少不必要的页故障。段,需要确保该段的起始和结束地址都是2MB的倍数,这就是为什么代码中有。原创 2024-11-02 17:49:53 · 846 阅读 · 0 评论 -
WAMR 性能监控与分析工具
WAMR 的性能监控与分析工具为开发者提供了强大的支持,确保 WebAssembly 模块在执行时的高效性和稳定性。这些工具可以帮助开发者识别性能瓶颈,优化代码,并确保运行时的稳定性。除了监控,WAMR 还集成了性能分析工具,帮助开发者深入分析模块的执行效率。这些工具可以生成执行报告,指出耗时的函数和操作,帮助开发者优化代码。为了方便开发者使用,WAMR 还提供了可视化界面,直观展示性能监控和分析的结果。通过这种监控机制,开发者可以实时了解模块的性能状况,及时调整资源分配。// 使用图表库展示性能数据。原创 2024-10-31 21:06:13 · 282 阅读 · 0 评论 -
性能优化的两个思考维度
维度时间域 (Time Domain)频率域 (Frequency Domain)侧重点关注操作的执行顺序和事件的时间序列,强调操作之间的因果关系关注操作的发生频率和统计分布,强调热点的定位优势擅长找出操作发生的原因 (“为什么”),适合查找延迟和阻塞问题擅长找出性能瓶颈的具体位置 (“哪里”),适合识别资源密集型操作常用工具strace, ltrace, Intel PT,专用领域调试工具perf, vtune, emon 等性能分析工具盲点处理海量数原创 2024-10-31 21:03:09 · 323 阅读 · 0 评论 -
性能优化的思想陷阱
你可能会因为一些微小的调整而得到些许的改进,但不会从根本上解决启动时间的问题。也就是说,要专注于系统的整体启动优化,找到每个可能延迟启动的瓶颈,从根本上解决它们,而不是仅仅依赖一些细小的改进。如果只想提升 10%,你可能会在现有的步骤上做细小的改进,比如调整加载顺序或删除一些不必要的步骤,但效果可能有限。只有这样,才能真正带来显著的性能提升。追求 10 倍的提升会促使你打破思维的限制,而不仅仅是依赖现有框架的小幅优化。这种从零开始重新设计的思维可能会带来全新的解决方案,从而消除现有系统中的所有瓶颈。原创 2024-10-31 21:02:33 · 467 阅读 · 0 评论 -
看到一份服务器架构性能对比(有待证实,你觉得可信度多少?)
题注:根据英特尔发布的信息和技术预测,Granite Rapids (GNR) 将在多项性能指标上取得显著提升。原创 2024-10-31 21:01:23 · 476 阅读 · 0 评论 -
OpenEuler的简要竞争分析(2024)
竞争对手简要描述CentOS Stream / Rocky Linux / AlmaLinux继承 CentOS 的市场基础,专注于企业级稳定性和兼容性Ubuntu Server / Debian全球使用广泛的通用 Linux 发行版,用户友好,社区活跃SUSE Linux Enterprise (SLES)强调企业级稳定性、高可用性和企业支持,特别在 SAP 和 HPC 场景有优势国产发行版如中标麒麟、深度 (Deepin)强调国产自主可控,与 openEul原创 2024-10-31 19:47:47 · 654 阅读 · 0 评论