DP读书:鲲鹏处置惩罚器 架构与编程(十四)ACPI与软件架构具体调优 ...

打印 上一主题 下一主题

主题 578|帖子 578|积分 1734

操作体系内核

ACPI(Advanced Configuration and Power Interface)
是一种由英特尔、微软、惠普、索尼等公司共同开发的电源管理标准。它提供了一种通用的电源管理接口,用于管理盘算机体系的电源状态、性能和配置等方面。
在盘算机体系中,ACPI负责处置惩罚电源管理事件,例如体系启动、关机、休眠、叫醒等。它还提供了对硬件设备、散热设备、电池和其他设备的控制本领。
ACPI在盘算机体系中扮演着重要的脚色,它可以或许提高体系的能源效率和延伸电池寿命,同时提供更好的体系性能和稳固性。

ARM64平台的Device Tree定义在Linux源码的arch/arm64/boot/dts/目录下。Device Tree是用于形貌体系硬件的一种数据结构,它被用于在引导过程中初始化硬件。
下面是一个简朴的ARM64平台Device Tree的示例,这是一个虚拟设备树,只为了明确基本概念。在现实设备树中,会有更多具体的属性和配置。
对不起,我不能直接处置惩罚C语言的代码。但是我可以帮你明确一个ARM64平台设备树(Device Tree)的基本结构,并且我可以给你一个例子。
  1. git clone https://github.com/torvalds/linux.git
  2. cd linux
  3. cd scripts/dtc/
  4. make
  5. sudo make install PREFIX=/usr/local
  6. // SPDX-License-Identifier: GPL-2.0
  7. /*
  8. * Example Device Tree for ARM64 SoC
  9. *
  10. * This is a simple example showing the basic structure of a Device Tree for an ARM64 platform.
  11. */
  12. /dts-v1/;
  13. / {
  14.     compatible = "example,arm64";
  15.     model = "Example ARM64 SoC";
  16.     memory@80000000 {
  17.         device_type = "memory";
  18.         reg = <0x0 0x80000000 0x0 0x80000000>; // 2 GiB of memory starting from 0x80000000
  19.     };
  20.     chosen {
  21.         bootargs = "console=ttyAMA0,115200";
  22.     };
  23.     uart@9000000 {
  24.         compatible = "example,uart";
  25.         reg = <0x0 0x9000000 0x0 0x1000>;
  26.         interrupt-parent = <&gic>;
  27.         interrupts = <0 13 4>; // interrupt number 13, active high, level triggered
  28.     };
  29.     gic: interrupt-controller {
  30.         compatible = "example,gic-v3";
  31.         interrupt-controller;
  32.         #interrupt-cells = <3>;
  33.         interrupt-parent = <&gic_cpuif>;
  34.     };
  35.     gic_cpuif: interrupt-controller@5000 {
  36.         compatible = "example,gic-v3-cpuif";
  37.         reg = <0x0 0x5000 0x0 0x1000>;
  38.         interrupts = <0 8 1>; // interrupt number 8, active high, edge triggered
  39.         interrupt-parent = <&gic>;
  40.     };
  41. };
复制代码
鲲鹏软件移植


鲲鹏软件移植流程

鲲鹏软件移植流程包罗以下步骤:

  • 预备JDK:安装ARM版本JDK。
  • 配置环境变量:配置JDK路径等环境变量。
  • 编译:Java源码生成字节码。
  • 测试:启动Java程序,调试功能。
以上就是鲲鹏软件移植的完整流程
编译工具选择

编译工具的选择重要取决于你利用的编程语言和开发环境。以下是一些常见的编译工具:

  • Microsoft Visual Studio:这是一个完整的开发工具集,适用于C/C++/C#等编程语言,适用于微软支持的所有平台。它包罗了UML工具、代码管控工具、集成开发环境(IDE)等,是一个非常实用且强大的代码编写开发软件。
  • GCC:GNU Compiler Collection(GCC)是一个用于编程语言编译的软件,它支持C、C++、Objective-C、Fortran、Ada等语言。
  • Clang:Clang是一个基于LLVM的C/C++/Objective-C编译器,它重要用于优化编译效率和代码质量。
  • Java Development Kit (JDK):如果你正在开发Java应用程序,那么你须要JDK,它包罗了Java编译器(Javac)和其他工具。
  • Python表明器和编译器:Python是一种表明型语言,因此它不须要编译器。但是,Python有各种表明器和编译器,如CPython、Jython、IronPython等。
    这只是其中的一部分,现实上另有很多其他的编译工具可供选择。你应该根据本身的具体需求和习惯来选择适合你的编译工具。
编译参数移植案例

在编译过程中,一些特定的编译参数可能会影响到编译的结果和顺应性。以下是一些编译参数的案例,这些参数在移植过程中可能会起到关键作用:
  1. 1. -march 和 -mtune:这两个参数用于指定目标处理器架构。例如,-march=native 将使编译器优化为运行在本地硬件上,而 -march=x86_64 将优化为运行在64位x86处理器上。
  2. 2. -fPIC (Position-Independent Code):该参数用于生成位置无关的代码,这在实现共享库时非常重要。
  3. 3. -I:该参数用于指定头文件的搜索路径。在移植过程中,可能需要修改此参数以适应新的环境。
  4. 4. -L:该参数用于指定库文件的搜索路径。同样,在移植过程中,可能需要修改此参数。
  5. 5. -l:该参数用于指定要链接的库。这可能涉及到链接到不同的库文件,以适应新的环境。
  6. 6. -D:该参数用于定义宏。在移植过程中,可能需要定义新的宏以适应新的环境。
复制代码
请注意,以上只是一些常见的编译参数示例,现实上另有很多其他的编译参数可以在移植过程中利用。具体的参数选择将取决于你的需求和目的平台的具体环境。
源码修改案例

源码修改案例重要是针对特定的需求或标题,对程序源代码举行修改和优化。以下是一个简朴的源码修改案例:
假设我们有一个C语言程序,其中有一个函数名为 calculate_average,它接收一个整数数组和数组的长度作为输入,盘算数组的平均值并返回结果。
  1. double calculate_average(int* arr, int length) {
  2.     double sum = 0.0;
  3.     for (int i = 0; i < length; i++) {
  4.         sum += arr[i];
  5.     }
  6.     return sum / length;
  7. }
复制代码
如今我们想要修改这个函数,使其可以或许忽略数组中的任何负数并直接跳过盘算。我们可以添加一个简朴的判断语句来实现这个功能。
  1. double calculate_average(int* arr, int length) {
  2.     double sum = 0.0;
  3.     for (int i = 0; i < length; i++) {
  4.         if (arr[i] >= 0) {
  5.             sum += arr[i];
  6.         }
  7.     }
  8.     return sum / length;
  9. }
复制代码
通过这个修改,函数如今只会盘算数组中的非负数,并返回它们的平均值。这可以应用于任何包罗负数的数组,以忽略它们并得到更准确的结果。
请注意,这只是一个简朴的例子,现实的源码修改可能会更加复杂和涉及更多的细节。在修改源代码之前,建议举行充分的测试和备份(在虚拟机上跑没标题再上),以确保修改不会引入错误或破坏原始功能。
鲲鹏分析扫描工具 Dependency Advisor

Dependency Advisor 是一款可以简化客户应用迁移到鲲鹏服务器过程的工具。它重要安装在X86服务器上,用于分析可移植性和移植投入。该工具支持查抄用户软件资源包(RPM、JAR、TAR、zip、gzip 文件)中包罗的 SO 依赖库,并评估 SO 依赖库的可移植性;查抄指定的用户软件安装路径下的 SO 依赖库,并评估 SO 依赖库的可移植性;查抄用户软件 C/C++ 软件构建工程文件,并评估该文件的可移植性;以及查抄用户软件 C/C++ 源码,并评估软件源文件的可移植性。
此外,Dependency Advisor 会主动分析并输出指导报告,提供软件移植报告以及移植工作量评估。它还支持下令行方式和 Web 两种工作模式。
鲲鹏代码迁移工具 Porting Advisor

Porting Advisor 是一款可以资助开发者将应用从 x86 平台迁移到鲲鹏平台的代码迁移工具。具体功能包罗:

  • 分析可迁移性:Porting Advisor 可以分析用户的源代码以及相关依赖,判断其是否可以迁移到鲲鹏平台。
  • 主动分析:Porting Advisor 可以主动分析出须要修改的代码内容,并给出修改建议。
  • 提供指导:Porting Advisor 可以资助开发者解决在迁移过程中遇到的标题,提供相应的解决方案。
利用 Porting Advisor 举行代码迁移可以降低人工排查的工作量,提高团体迁移效率。
     鲲鹏软件性能调优

鲲鹏软件性能调优流程

鲲鹏软件性能调优流程包罗以下步骤:

  • 建立基准:在优化或监督开始之前,首先要建立一个基准数据和优化目的。这包罗硬件配置、组网、测试模型、体系运行数据(CPU/内存/IO/网络吞吐/响应延时等)。我们须要对体系做全面的评估和监控,才能更好的分析体系性能瓶颈,以及实施优化措施后体系的性能变化。优化目的即是基于当前的软硬件架构所渴望体系达成的性能目的。
  • 压力测试与监督瓶颈:利用峰值工作负载或专业的压力测试工具,对体系举行压力测试。利用一些性能监督工具观察体系状态。在压力测试期间,建议具体记录体系和程序的运行状态,精确的汗青记录将更有助于分析瓶颈和确认优化措施是否有效。
  • 性能分析:基于压力测试的结果,举行性能分析,找出性能瓶颈。这包罗查找CPU、内存、I/O、网络等方面的瓶颈。
  • 优化:根据性能分析的结果,接纳相应的优化措施。优化的具体方法可能因体系和应用的差别而有所差别。
  • 再测试:在实施优化措施后,须要重新举行压力测试和性能监督,确认优化效果。
  • 迭代:性能调优是一个反复迭代的过程,须要持续举行,不断优化体系的性能。
以上就是鲲鹏软件性能调优的一般流程,具体实施时可能须要根据具体环境举行调解。
     CPU与内存子体系性能调优

为了举行CPU和内存子体系的性能调优,可以接纳以下措施:

  • CPU方面:

    • 多线程优化:公道地利用多线程,将盘算使命划分为多个线程并行执行,充分利用多核CPU的性能。
    • 减少上下文切换:减少线程之间的频仍切换,避免由于上下文切换带来的开销。
    • 缓存优化:充分利用CPU缓存,避免缓存未命中带来的性能丧失。例如,利用局部性原理优化数据访问模式,减少缓存未命中。

  • 内存方面:

    • 内存分配优化:公道设置内存分配计谋,避免频仍的内存分配与释放。可以采用对象池、内存池等技术来优化内存管理。
    • 内存访问模式优化:充分利用局部性原理,优化内存的访问模式。例如,通过连续访问、对齐访问等方式减少内存访问的随机性。
    • 内存压缩与分片:对于内存占用较大的数据结构或对象,可以考虑举行内存压缩或分片,以减少内存占用和提高访问效率。

     另外,还可以通过性能监控和性能分析工具,对CPU和内存子体系举行监测和分析,找出性能瓶颈,并接纳相应的优化计谋。差别的应用场景和需求可能须要接纳差别的优化手段,因此建议联合具体环境举行调优,并举行性能测试和评估,以验证优化效果。
网络子体系性能调优

对于网络子体系的性能调优,可以接纳以下措施:

  • 减少网络延迟:

    • 利用高性能网络设备:选择高性能的网络互换机、路由器等网络设备,以减少数据包的传输延迟。
    • 利用更快速的网络协议:例如,采用更快速的传输协议(如TCP Fast Open、QUIC)来减少握手延迟和连接建立时间。
    • 优化网络拓扑结构:公道规划网络拓扑结构,减少数据包的传输距离,降低网络延迟。

  • 提高网络带宽:

    • 网络负载平衡:通过配置负载平衡设备或软件,将网络流量均匀分配到多个服务器上,提高团体网络带宽。
    • 数据压缩与加快:利用数据压缩和加快技术,减少数据传输量,从而提高可用带宽。
    • 增加带宽容量:升级网络设备,增加带宽容量,以满足高并发的网络哀求。

  • 优化网络协媾和计谋:

    • TCP/IP参数调优:根据具体应用场景,调解TCP/IP协议的参数,如窗口大小、拥塞控制算法等,以提高网络传输效率。
    • 数据包优先级管理:通过配置网络设备的QoS(Quality of Service)功能,对差别类型的数据包举行优先级管理,确保重要数据的实时传输。

  • 缓存与缓冲区管理:

    • CDN加快:利用内容分发网络(CDN)来缓存静态资源,加快数据的传输速率。
    • 缓存技术应用:根据现实需求,公道地利用缓存技术,将热门数据、查询结果等缓存在内存中,加快数据访问速率。
    • 缓冲区大小优化:针对网络设备的缓冲区大小举行优化,避免过大或过小的缓冲区导致的性能标题。

此外,还可以通过监控和分析网络流量、延迟等指标,找出网络性能瓶颈,并举行相应的调优计谋。综合考虑应用程序的特点、网络环境以及业务需求,选择符合的调优方案,并举行性能测试和评估,以验证优化效果。
     磁盘I/O子体系性能调优

对于磁盘I/O子体系的性能调优,可以接纳以下措施:
优化磁盘I/O性能的常见措施包罗:

  • 利用RAID技术:RAID技术可以提供更高的磁盘读写性能和冗余容错本领。
  • 块大小优化:根据应用程序的访问模式和数据块大小,调解磁盘块的大小以提高磁盘I/O性能。
  • 操作体系参数调优:操作体系参数调解相关参数来改善磁盘I/O性能。
  • 文件体系选择与优化:选择适合特定应用场景的文件体系,并举行相应的优化。
  • I/O缓存与缓冲区管理:I/O缓存和缓冲区管理技术来减少磁盘I/O操作次数。
  • 应用程序优化:应用程序优化,减少不须要的磁盘I/O操作。
  • 磁盘性能监控与故障诊断:磁盘性能监控磁盘的性能指标,实时发现潜在标题,并接纳相应的故障诊断和修复措施。
这些措施综合起来可以提拔磁盘I/O子体系的性能和可靠性。但须要根据具体环境举行调优,并举行性能测试和评估,以验证优化效果。
应用程序性能调优

对于应用程序的性能调优,可以接纳以下措施:
   

  • 代码优化:优化算法和数据结构和提高代码执行效率。
  • 数据库优化:数据库索引优化和提高数据检索操作。
  • 缓存技术应用:利用缓存技术和提高读取速率。
  • 网络通信优化:减少网络哀求次数和提高速率。
  • 性能监控与调试:利用性能监控工具和评估体系的性能表现。
  

  • 代码优化:

    • 优化算法和数据结构:选择高效的算法和数据结构,减少不须要的盘算和内存消耗,提高代码执行效率。
    • 减少资源占用:实时释放不再利用的资源,避免资源泄漏。公道利用内存、文件句柄、数据库连接等资源,避免资源瓶颈。
    • 并发编程优化:公道利用多线程、多进程或异步编程模型,利用多核处置惩罚器和异步操作提高并发性能。

  • 数据库优化:

    • 数据库索引优化:分析数据库查询的频率和模式,创建得当的索引来加快数据检索操作。
    • 数据库连接管理:公道维护和管理数据库连接,减少连接的建立和关闭开销。
    • 批量操作和事务管理:将多个数据库操作批量提交或利用事务举行管理,减少单次数据库交互的次数,提高效率和数据一致性。

  • 缓存技术应用:

    • 利用缓存技术:将频仍读取的数据缓存在内存中,减少对底层存储体系(如数据库)的访问,提高读取速率。
    • 公道设置缓存计谋:根据数据的更新频率和重要性,设置符合的缓存计谋,如缓存过期计谋、LRU(最近最少利用)计谋等。

  • 网络通信优化:

    • 减少网络哀求次数:归并多个网络哀求、采用批量操作,减少网络开销和延迟。
    • 压缩和加快数据传输:利用数据压缩和加快技术,减少网络传输数据量,提高速率。

  • 性能监控与调试:

    • 利用性能监控工具:通过监控工具来获取应用程序的性能指标,如CPU利用率、内存占用、数据库查询时间等,找出性能瓶颈和潜在标题。
    • 举行性能测试:模仿现实利用场景,举行负载测试和性能测试,评估体系的性能表现,实时发现和解决性能标题。

除了以上措施,还可以根据具体应用场景和需求举行针对性的优化。关注应用程序的瓶颈和低效点,不断举行测试和改进,以提高应用程序的性能和响应速率。同时,注意平衡性能调优和可维护性之间的关系,避免过度优化导致代码难以明确和维护。
     基础软件性能调优

基础软件(如操作体系、数据库、Web服务器等)的性能调优,可以接纳以下措施:

  • 增加硬件资源:

    • 增加CPU、内存和磁盘等硬件资源,以提高基础软件的执行速率和并发处置惩罚本领。
    • 利用更快的存储设备或网络传输设备,以提高数据的访问速率和传输效率。

  • 调解软件参数:

    • 根据应用的工作负载和硬件配置,调解操作体系或数据库的参数,以到达最优性能。
    • 对于Web服务器,可以调解连接池大小、缓存计谋、哀求过滤等参数,以提高并发处置惩罚和响应速率。

  • 优化软件架构和设计:

    • 应用符合的软件设计模式和开发框架,以提高代码复用性和可维护性。
    • 精良的软件架构可以提高基础软件的并发处置惩罚本领和可扩展性。

  • 资源的公道利用:

    • 对于数据库体系,可以通过利用数据库缓存、公道索引等手段,减少访问磁盘的次数,提高数据访问速率。
    • 对于Web服务器,可以利用缓存技术对常常访问的数据举行缓存,降低数据库访问的频率。

  • 举行性能测试和优化:

    • 对基础软件举行负载测试和性能测试,找出瓶颈和性能瓶颈。
    • 评估差别参数组合或优化技术的性能效果,选择最优方案。

  • 体系监控和调试:

    • 通过体系监控工具实时监控体系的性能、资源利用率等指标,在体系出现非常时实时举行调试和修复。
    • 网络日记信息,实时发现潜在标题,并对体系举行诊断。

除了以上措施,还可以根据差别的基础软件举行针对性的调优。例如,对于数据库体系,还可以利用分区、分片等技术,提高数据处置惩罚的并行性和可扩展性。对于Web服务器,还可以利用负载平衡技术,提高并发处置惩罚本领和可用性。总之,基础软件的性能调优须要多方面的考虑和综合处置惩罚。

鲲鹏性能优化工具 Tuning Kit

Tuning Kit 是一款针对鲲鹏盘算平台的性能分析和优化工具,能网络处置惩罚器硬件、操作体系、进程/线程、函数等各条理的性能数据,分析出体系性能指标,定位到体系瓶颈点及热点函数。
Tuning Kit 支持以下功能特性:

  • 体系配置全景分析:收罗整个体系的软硬件配置信息,分析并针对不公道项提供优化建议。
  • 体系性能全景分析:借鉴业界的 USE(utilization、saturation、errors)方法,通过收罗体系 CPU、内存、存储 IO、网络 IO 等资源的运行环境,得到它们的利用率、饱和度、错误等指标,识别体系瓶颈。
  • 针对部分体系指标项,根据已有的基准值和优化经验提供优化建议。
  • 体系资源调度分析:基于 CPU 调度事件分析 CPU 核、进程/线程在各时间点的运行状态,进程/线程切换环境,给出相应的优化建议。
Tuning Kit 可以资助用户更好地相识体系性能,识别和解决体系瓶颈,提高体系团体效率。
     

鲲鹏开发者社区:https://www.hikunpeng.com/developer/boostkit


Kunpeng官方文档所在
https://www.hikunpeng.com/document/detail/zh/kunpengdevps/porting/qs/qs-pa-kunpengdevps.html
鲲鹏小智
https://www.hikunpeng.com/zh/airobot
参考文献:
[1]GB/T 7714:戴志涛、刘健培.鲲鹏处置惩罚器架构与编程:华为智能盘算技术丛书[M].北京:清华大学出版社,2020.
[2]https://www.hikunpeng.com/
[3]戚正伟、管海兵.深入浅出体系虚拟化:原理与实践[M]北京:清华大学出版社,2021.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表