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 起插入信息保护政策分类等级