CON1707_Jia-CON1707_CSR_cn

Download Report

Transcript CON1707_Jia-CON1707_CSR_cn

版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
1
从幻灯片 13 起插入信息保护政策分类等级
最大限度提高 SPARC T5
Oracle Solaris 应用程序性能
 Xinfeng Liu, Hanli Ren
 ISV Engineering, Oracle Systems
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
2
从幻灯片 13 起插入信息保护政策分类等级
议题
 硬件
 正确性
 性能
 并行性
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
3
从幻灯片 13 起插入信息保护政策分类等级
Oracle Solaris Studio
编译套件
分析套件
C、C++ 编译器可利用高级代码生成技术,优化应用
程序,以在 SPARC & x86 上实现最高的性能
性能分析器可提供对您的应用程序进行洞察,允许您
发现瓶颈并将性能提升多个数量级
Fortran 编译器可优化计算密集型应用程序性能
代码分析器可通过检测应用程序漏洞,包括内存泄漏
和内存访问违规,从而确保应用程序的可靠性
调试器 可通过事件处理和多线程支持确保应用程序
的稳定性
线程分析器可通过检测难以发现的争用和死锁条件,
从而简化复杂的并行编程错误
性能库 可以使用高级数值计算库最大限度提高计算
密集型应用程序性能
4
集成开发环境提高开发人员的工作效率
4
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
Oracle Solaris Studio 12.3 亮点
提升性能


获得极限可观
察性



提高生产率




5
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
在 SPARC T5 上代码速度提高 5 倍
在 Intel x86 上代码速度提高 1.5 倍
全新代码分析器可提升应用程序的可靠性;报告常规编码
和内存访问错误的速度比其他竞争性产品快
增强性能分析器,含有系统级性能分析
远程访问 Solaris Studio 工具,通过本地桌面(Oracle
Solaris、Linux、Microsoft Windows、Mac)
简化 Oracle DB 应用程序开发
简化 Oracle Tuxedo 开发,通过 IDE 插件
IPS 分发,在 Solaris 11 上,从而实现简化管理
减少 20% 的编译时间
Oracle Solaris Studio 12.3,1/13 PSE
 编译器优化可在 Oracle T5、Oracle M5 和 Fujitsu M10 新系统上产生
速度最快的代码

比 GCC 最高快 5 倍

比 Oracle Solaris Studio 12.3 最高快 10%
 更新到 Oracle Solaris Studio 12.3 的 IPS 或 SVR4 包
 通过 Solaris 开发工具支持合同提供给客户
 更多信息:文章 ID 1519949.1,位于My Oracle Support
6
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
SPARC T5 硬件
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
7
从幻灯片 13 起插入信息保护政策分类等级
SPARC T5 — 概述
 T4 增强功能

更多线程

更快的时钟速度

更大的三级缓存
 T5 和 T4:
8

与 T1 - T3 无关(仅共享 T 系列名称)

增强的多线程吞吐量

增强的单线程性能
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
SPARC T5 — 详细信息
 每个系统 1 到 8 个芯片
 每个芯片 16 核

双指令发送

乱序执行
 每核 8 个线程
 3.6 GHz 时钟

9
115B (3.6 GHz * 16 * 2) 指令/秒/芯片
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
SPARC T5 — 容量
 芯片容量:115 B 指令/秒
 针对完全活动线程:

单线程:7.2 B 指令/秒

8 个线程中的每一个:0.9 B 指令/秒
 线程很少处于一直使用CPU的状态:
10

I/O 等待

处理器停滞(从内存获取 = 300-400 周期)
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
针对 T5 开发
 确保其正确性
 消除明显的性能问题
 确保其性能可扩展并保持运行结果正确
11
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
应用程序的正确性
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
12
从幻灯片 13 起插入信息保护政策分类等级
调试信息
 始终使用 -g
 没有优化标志:

完整调试

性能较低
 优化过的二进制文件:

尽可能提供有帮助的调试信息

无/最小性能影响
 直接调试交付版本!
13
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
自动检测错误
 静态/编译时错误检测

代码分析器
 动态/运行时内存访问错误检测

14
Discovery 工具
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
代码分析器
 静态分析,检测常规编码错误

未初始化变量等
 使用以下参数编译:

-xanalyze=code
 使用以下命令查看结果:

15
code-analyzer <a.out>
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
代码分析器 — 输出示例
16
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
检测内存错误 — discovery 工具
 常规内存分配和使用错误:

未初始化内存

访问越界

内存泄露
 用法:
17

discover <a.out>

<a.out>

默认 = html 输出
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
Discovery 工具示例
$ ./a.out
ERROR 1 (ABR): reading memory beyond array bounds at address
0xffbff278 (8 bytes) on the stack at:
average() + 0x228 <disc.c:8>
6:
for (int i=1; i<=len; i++)
7:
{
8:=>
total+=array[i];
9:
}
_start() + 0xd8
...
double array[20];
...
printf(" Average = %f\n", average(array,20) );
18
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
应用程序性能
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
19
从幻灯片 13 起插入信息保护政策分类等级
优化 — 基础知识
 没有优化标识 == 没有优化
 优化选项: -O
 高级优化:
20

以应用程序剖析(profiling)为指导

了解部署系统
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
剖析 (profiling)
 使用性能分析器进行剖析

collect <a.out>

collect -P <pid>

analyzer test.1.er
 也可以使用 spot 工具调用性能分析器并生成报告
21

spot <a.out>

spot -P <pid>
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
性能分析器
 演示
22
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
激进优化
 一站式优化: -fast
 会启用多个优化

假定构建机器 = 部署机器

浮点简化和优化

不同类型的指针没有别名

函数内联
 检查性能增益
23
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
基于Profiling驱动的编译标识选择
浮点密集型
 浮点计算需要大量时间:

可使用浮点简化

-fsimple=2
 浮点库代码需要大量时间:

可使用优化的浮点库

-xlibmopt, -xlibmil
 如果性能有提升且优化结果可接受,则使用浮点优化
24
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
基于Profiling驱动的编译标识选择
flat profile
 有很多小型热点函数

至少 -xO4 优化级别

-xipo 用于跨文件优化
 优化条件代码或内联
25

基于Profiling反馈的优化

-xprofile=collect:

运行应用程序的典型场景

-xprofile=use:
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
基于Profiling驱动的编译标识选择
指针
 指针阻碍编译器优化
 编译器需要更多信息
 restrict 限定的 C 指针

应用于局部
 编译标识:
26

-xrestrict

-xalias_level=std [C]

-xalias_level=compatible [C++]

应用于文件
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
特定于处理器的优化
 缺省编译标识: -xtarget=generic 通常情况下已经很好
 T4/T5 拥有几个很有用的指令:

比较和分支

浮点乘加
 一站式编译标识: -xtarget=T5
 为 T5 生成针对 T4 /T5 优化的指令集
 仅在 T4、T5 或更高版本的处理器上运行
27
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
SPARC 指令集
28
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
多线程应用程序
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
29
从幻灯片 13 起插入信息保护政策分类等级
多线程或多进程
 多进程:

隔离

独立

占用大量虚拟内存

同步成本可能很高
吞吐量
 多线程
30

同步成本低

内存占用最小
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
延迟
多线程应用程序开发
 POSIX 线程(C11、C++11)

Low level 实现: 更多控制, 但复杂度高
 OpenMP

高抽象度: 灵活易用
 自动并行化
31

使用简易: -xautopar -xreduction

非常适用于循环密集型代码
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
OpenMP 并行
 将迭代分发到各 CPU
#pragma omp parallel for
for (int i=0; i<length; i++)
{
// Do work
}
32
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
OpenMP 任务
 将工作分发到各 CPU
for (int i=0; i<length; i++)
{
#pragma omp task
{
// Do work for task ‘i’
}
}
33
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
并行程序正确性
 将工作分发到各 CPU
int total=0;
#pragma omp parallel for
for (int i=0; i<length; i++)
{
total += i;
}
 数据争用: 多个线程修改同一个变量
34
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
线程分析器
 为应用程序加入检测信息

Compiler flag: -xinstrument=datarace

Binary instrumentation: discover -i datarace
 收集数据:

collect -r on <a.out>
 查看数据:

35
tha tha.1.er
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
<a.out>
线程分析器 — 示例
 演示
36
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
多线程的扩展性
 尽量减少串行代码

阿姆达尔定律
 尽量减少锁争用
 尽量减少共享数据的写入
 平均分发工作
37
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
多线程扩展性
 演示
38
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
性能限制
 线程

vmstat
 指令执行效率

pgstat / cputrack / cpustat / ripc
 带宽

39
busstat / bw
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
总结:针对 T5 优化
 第 1 步:剖析并删除低效代码
 第 2 步:了解编译优化的优势
 第 3 步:发现并行化的机会
 第 4 步:并行代码剖析和调优
 第 5 步:监控是否触及硬件极限
40
版权所有 © 2013,Oracle 和/或其分支机构。保留所有权利。
版权所有 © 2012,Oracle 和/或其分支机构。保留所有权利。
41
从幻灯片 13 起插入信息保护政策分类等级