SlideShare a Scribd company logo
SIMD Instructions outside and inside
Oracle 12c
Laurent Léturgez – 2016
Whoami
•Oracle Consultant since 2001
•Former developer (C, Java, perl, PL/SQL)
•Owner@Premiseo: Data Management on Premise and in the Cloud
•Blogger since 2004
• http://laurent.leturgez.free.fr (In french and discontinued)
• http://laurent-leturgez.com
•Twitter : @lleturgez
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
Caveats
•Most of the topics are from
• My own researches
• My past life as a developer
•Some of the topics are about internals, so:
• Analysis and conclusion may be incomplete
• Future versions of Oracle may change the features
•Tests have been done with Oracle 12.1.0.2, Oracle Enterprise
Linux 7.3 (UEKR3), VMWare Fusion 8 (And VirtualBox)
Before we start …
•Some fundamentals (from Dennis Yurichev’s book)
• CPU register : […]The easiest way to understand a register is to think of it as an
untyped temporary variable. Imagine if you were working with high-level PL1
and could only use eight 32-bit (or 64-bit) variables. Yet a lot can be done using
just these!
• Instruction : A primitive CPU command. The simplest examples include:
moving data between registers, working with memory and arithmetic
primitives. As a rule, each CPU has its own instruction set architecture (ISA).
• Assembly language : Mnemonic code and some extensions like macros which
are intended to make a programmer’s life easier.
http://beginners.re/Reverse_Engineering_for_Beginners-en.pdf
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
SIMD instructions … outside Oracle 12c
• SIMD stands for Single Instruction Multiple Data
• Process multiple data
• In one CPU instruction
• Based on
• Specific registers
• Specific CPU instructions and sets of instructions
• Not Oracle specific
• CPU Architecture specific
• Intel
• IBM (Altivec)
• Sparc v9 (VIS)
• This presentation is mainly about Intel architecture
SIMD instructions … outside Oracle 12c
•What is a SIMD register ?
•It’s a CPU register
•Wider than traditional registers (RDI, RSI, R8, R9 etc.)
• 128 up to 512 bits wide
• Contains many data
SIMD instructions … outside Oracle 12c
•How does it work ? Scalar operation
• an array of 4 integers {1,2,3,4}
• add 1 to each value
Reg1
Reg2
Reg3
CPU
RAM
In
Out
2 3 41
1
Reg1
Reg2
Reg3
CPU
RAM
In
Out
2 3 41
1
1
Reg1
Reg2
Reg3
CPU
RAM
In
Out
2 3 41
1
1
2
Reg1
Reg2
Reg3
CPU
RAM
In
Out
2 3 41
1
1
2
2
Reg1
Reg2
Reg3
CPU
RAM
In
Out
2 3 41
4
1
5
3 4 52
…/…
LOAD ADD SAVE
4 LOAD
4 ADD
4 SAVE
SIMD instructions … outside Oracle 12c
•How does it work ? SIMD operation
• an array of 4 integers {1,2,3,4}
• add 1 to each value
SIMD Reg1
CPU
RAM
In
Out
2 3 41
1 1 11SIMD Reg2
SIMD Reg3
SIMD Reg1
CPU
RAM
In
Out
2 3 41
2 3 41
1 1 11SIMD Reg2
SIMD Reg3
SIMD Reg1
CPU
RAM
In
Out
2 3 41
2 3 41
1 1 11
3 4 52
SIMD Reg2
SIMD Reg3
SIMD Reg1
CPU
RAM
In
Out
2 3 41
3 4 52
2 3 41
1 1 11
3 4 52
SIMD Reg2
SIMD Reg3
LOAD ADD SAVE
SIMD instructions … outside Oracle 12c
Instruction set MMX SSE SSE2/SSE3/SSSE3/SSE
4
AVX/AVX2 AVX3 or AVX512
Register Size 64 Bits 128 bits 128 bits 256 Bits 512 bits
# Registers 8 8 16 16 32
Register Name MM0 to MM7 XMM0 to XMM7 XMM0 to XMM15 YMM0 to YMM15 ZMM0 to ZMM31
Processors Pentium II Pentium III Pentium IV to Nehalem Sandy Bridge - Haswell Skylake (initially
announced but not
available yet)
Maybe on Kaby Lake Xeon
chip
Other Only four 32 bits single
precision floating point
numbers
Usage expansion (two 64
bits double precision,
four 32 bits integers and
up to sixteen 8 bits bytes)
Three operand
instructions (non
destructive) : A+B=C
rather than A=A+B
Alignments requirements
relaxed
SIMD instructions … outside Oracle 12c
• Intel API (C/C++) : Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
• Sample code:
https://app.box.com/simdSampleC-2015
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
•It depends on :
•Hardware
• Consult processors datasheets to see which instruction set extensions are
used (if many)
• http://ark.intel.com/#@Processors
•Hypervisor
• Some (old) hypervisors do not support modern extensions
• VirtualBox versions <5.0 don’t support SSE4, AVX and AVX2
• Hyper-V on W2008R2-SP1 needs patch for specific processors to support
AVX
Will my application use SIMD registers and instructions ?
•It depends on the Operating System
•AVX (256 bits) is supported from
• Linux Kernel >= 2.6.30
• Redhat EL5 : 2.6.18
• Oracle EL5 w/UEK : 2.6.32
AVX needs xsave kernel parameter
• Solaris 10 upd 10 and Solaris 11 (x86-64)
• Windows 2008 R2 SP1
Will my application use SIMD registers and instructions ?
•It depends on the compiler
•GCC
• > 4.6 for AVX support
• Use of specific switches (-msse2, -msse4.1, msse4.2, -mavx, -mavx2 …)
•Intel C/C++ Compiler (ICC)
• > 11.1 for AVX Support and > 13.0 for AVX2 support
• Use of specific switches (-xsse4.2, -xavx, -xCORE-AVX2 …)
•Beware of optimization switches (-O1,-O2, -O3)
•More … disassemble (if you are allowed to  )
• Registers
• Assembly language instructions
Will my application use SIMD registers and instructions ?
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
• Based on a C program
• Used CPU: Haswell microarchitecture (Core i7-4960HQ). AVX/AVX2
enabled
• 3 tests : No SIMD, SSE4, AVX
• Input: one array containing 1Million values.
• Goal: Add 1 to each value, each million values repeated 4k, 8k, 16k and
32k times
• CPU Time(s) = f(#rows)
“Quick and Dirty” Sample code available here:
https://app.box.com/s/ibmnbblpho4xtbeq2x8ir60nrk37208v
Raw Performance
10.35
20.46
42.35
85.64
3.3 6.81
13.73
25.58
1.96 3.51
7.23
15.15
0
10
20
30
40
50
60
70
80
90
4096 M. ROWS 8192 M. ROWS 16384 M. ROWS 32768 M. ROWS
CPUTime(Sec)
RAW Performance (CPU) for SIMD Instructions
NO SIMD SSE4 (XMM Registers) AVX (YMM Registers)
Raw Performance
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
SIMD instructions … inside Oracle 12c
•In Memory Data Structure
• In Memory Compression Unit : IMCU
• IMCU is the unit of column store allocation
• Target size is 1M rows
(controlled by _inmemory_imcu_target_rows in 12.1, replaced by
_inmemory_imcu_target_maxrows in 12.2 (?))
• One IMCU can contain more than one column
• Each column in one IMCU is a column unit (CU)
SIMD instructions … inside Oracle 12c
•In memory column store storage indexes
• For each column unit, min and max values are maintained in a
storage index
• Storage Indexes provide CU pruning
• Information about CU available in GV$IM_COL_CU
(Undocumented. See Bug ID 19361690)
IMCU Pruning
SIMD instructions … inside Oracle 12c
• The way your data is sorted matters for best IMCU pruning
SIMD instructions … inside Oracle 12c
•SIMD extensions are used with In Memory storage indexes
for efficient filtering
1. IM Storage Indexes do IMCU pruning
2. SIMD instructions apply efficiently filter predicates
IMCU
Pruning
Prod-id
10
10
14
14
10
Filtering
with SIMD
SIMD instructions … inside Oracle 12c
•Oracle 12c uses specific libraries for SIMD (and compression)
•Located in $ORACLE_HOME/lib
• libshpksse4212.so for SSE4.2 extensions
Compiled with ICC v12 with specific xsse4.2 switch
• libshpkavx12.so for AVX extensions
Compiled with ICC v12 with specific xavx switch
• libshpkavx212.so for AVX2 extensions
Not totally implemented (8 functions implemented in 12.1, 824 in 12.2)
No ICC avx2 switch used because ICC v12 doesn’t support AVX2
•Thanks Tanel Pöder for this 
SIMD instructions … inside Oracle 12c
•Oracle SIMD related functions
• Located in kdzk kernel module (HPK)
• Part of Advanced Compression library (ADVCMP)
• Easily tracked with systemtap
SIMD instructions … inside Oracle 12c
SQL> select count(*) from s where amount_sold=20;
COUNT(*)
----------
140
SQL> select count(*) from s where amount_sold>20;
COUNT(*)
----------
666306
[oracle@oel7-im demo1]$ stap -x 7503 ./trc_orcl_simd_func_121.stp
Begin.^C
End.
Function: count
kdzk_lbiv_ictx_ini2_dydi: 4
kdzk_lbiviter_dydi: 2
kdzk_lbivset_range_dydi: 9
kdzk_lbivclr_range_dydi: 9
kdzk_eq_dynp_32bit: 9
kdzk_lbivones_dydi: 2
[oracle@oel7-im demo1]$ stap -x 7503 ./trc_orcl_simd_func_121.stp
Begin.^C
End.
Function: count
kdzk_lbivset_range_dydi: 9
kdzk_lbivclr_range_dydi: 9
kdzk_gt_dynp_32bit: 9
kdzk_lbiviter_dydi: 654
kdzk_lbiv_ictx_ini2_dydi: 1308
kdzk_lbivones_dydi: 654
SIMD instructions … inside Oracle 12c
•How Oracle uses SIMD extensions ?
It depends on many parameters
• OS Level : /proc/cpuinfo
• AVX and AVX2 support
• SSE4 Support only
SIMD instructions … inside Oracle 12c
•Which library am I using ?
•pmap
• AVX support
• SSE4 support
SIMD instructions … inside Oracle 12c
•Which compiler options have been used ?
• Read “comment” section in ELF
• Read the corresponding compiler documentation
[oracle@oel7 conf]$ readelf -p .comment $ORACLE_HOME/lib/libshpkavx12.so |
> | egrep -i 'intel|gcc' | egrep 'xavx|mavx’
[ 2c] -?comment:Intel(R) C Intel(R) 64 Compiler XE for applications running on
Intel(R) 64, Version 12.0 Build 20120731
…/…
-DNTEV_USE_EPOLL -DNET_USE_LDAP -xavx
SIMD instructions … inside Oracle 12c
•How are SIMD registers used by Oracle ?
• GDB
• To get and know the call stack (backtrace)
• To set breakpoints on interesting functions
• To view register contents (traditional and SIMD)
• “Info registers” for traditional registers
• “Info all-registers” for all registers (SIMD reg included)
• (gdb) print $ymmX.<format>
Format can be v8_float, v4_double, v32_int8, v16_int16, v8_int32, v4_int64, or v2_int128
SIMD instructions … inside Oracle 12c
break kdzk_gt_dynp_32bit
commands 1
bt
continue
end;
Breakpoint 1, 0x00007f2a341b2e30 in kdzk_gt_dynp_32bit () from
/u01/app/oracle/product/12.1.0/dbhome_1/lib/libshpkavx12.so
#0 0x00007f2a341b2e30 in kdzk_gt_dynp_32bit () from
/u01/app/oracle/product/12.1.0/dbhome_1/lib/libshpkavx12.so
#1 0x000000000b7041bc in kdzk_cmp ()
#2 0x000000000b4deada in kdzdcol_theta_imc_sep ()
#3 0x00000000038a075f in kdzdcol_theta ()
#4 0x000000000b577726 in kdpEvalTheta ()
#5 0x000000000b57bad0 in kdpPredEval ()
#6 0x00000000038a02ef in kdzt_acmp_predeval ()
#7 0x0000000009fb9758 in kdstf11101010001101km ()
#8 0x000000000cd2de55 in kdsttgr ()
#9 0x000000000cd73576 in qertbFetch ()
#10 0x000000000cd9ed50 in qergsFetch ()
#11 0x000000000cbd424b in opifch2 ()
#12 0x0000000002207899 in kpoal8 ()
#13 0x000000000cbdaecd in opiodr ()
#14 0x000000000ce0ffab in ttcpip ()
#15 0x0000000001bcd8b6 in opitsk ()
#16 0x0000000001bd2241 in opiino ()
#17 0x000000000cbdaecd in opiodr ()
#18 0x0000000001bc9a0b in opidrv ()
#19 0x00000000026d9f91 in sou2o ()
#20 0x0000000000bd680a in opimai_real ()
#21 0x00000000026e46dc in ssthrdmain ()
SIMD instructions … inside Oracle 12c
break kdzk_gt_dynp_32bit
commands 1
python gdb.execute("print $ymm0.v2_int128"); gdb.execute("print $ymm1.v2_int128"); gdb.execute("print
$ymm2.v2_int128"); gdb.execute("print $ymm3.v2_int128"); gdb.execute("print $ymm4.v2_int128"); gdb.execute("print
$ymm5.v2_int128"); gdb.execute("print $ymm6.v2_int128"); gdb.execute("print $ymm7.v2_int128"); gdb.execute("print
$ymm8.v2_int128"); gdb.execute("print $ymm9.v2_int128"); gdb.execute("print $ymm10.v2_int128");gdb.execute("print
$ymm11.v2_int128");gdb.execute("print $ymm12.v2_int128");gdb.execute("print $ymm13.v2_int128");gdb.execute("print
$ymm14.v2_int128");gdb.execute("print $ymm15.v2_int128");gdb.execute("finish"); gdb.execute("print $ymm0.v2_int128");
gdb.execute("print $ymm1.v2_int128"); gdb.execute("print $ymm2.v2_int128"); gdb.execute("print $ymm3.v2_int128");
gdb.execute("print $ymm4.v2_int128"); gdb.execute("print $ymm5.v2_int128"); gdb.execute("print $ymm6.v2_int128");
gdb.execute("print $ymm7.v2_int128"); gdb.execute("print $ymm8.v2_int128"); gdb.execute("print $ymm9.v2_int128");
gdb.execute("print $ymm10.v2_int128");gdb.execute("print $ymm11.v2_int128");gdb.execute("print
$ymm12.v2_int128");gdb.execute("print $ymm13.v2_int128");gdb.execute("print $ymm14.v2_int128");gdb.execute("print
$ymm15.v2_int128");
Continue
end
SIMD instructions … inside Oracle 12c
In red, register content has
been modified
In blue, the second part of
the SIMD registers (128 bits)
is empty
SIMD instructions … inside Oracle 12c
•Oracle (12.1) IM can use AVX or SSE4 extensions for SIMD operations
•When AVX is used
It uses only 128 bits out of 256 bits wide registers
• AVX adds new register-state through the 256-bit wide YMM register file
• Explicit operating system support is required to properly save and restore AVX's
expanded registers between context switches
• Without this, only AVX 128-bit is supported
SIMD instructions … inside Oracle 12c
•The culprit
•Oracle 12.1.0.2 is supported from EL5 onwards
•EL5 Redhat Kernel is 2.6.18 and this flag (xsave) is supported from
2.6.30 kernels
•For compatibility reasons, Oracle has had to compile its code on
2.6.18 kernels
Agenda
•SIMD Instructions, outside Oracle 12c
•What is a SIMD instruction ?
•Will my application use SIMD ?
•Raw Performance
•SIMD Instructions, inside Oracle 12c
•How SIMD instructions are used inside Oracle 12c
•Tracing SIMD in Oracle 12c
Tracing SIMD in Oracle 12c
•Interesting components to trace for SIMD and/or
IMCU Pruning are :
•ADVCMP_DECOMP.*
• ADVCMP_DECOMP_HPK : SIMD functions
• ADVCMP_DECOMP_PCODE : Portable Code Machine (usually not
related to specific CPU instructions)
•IM_optimizer
• Gives information about CBO calculation related to IM
Tracing SIMD in Oracle 12c
•IM_optimizer
• Information available in trace file
• IMCU Pruning ratio
• CU decompression costing (per IMCU)
• Predicate evaluation costing (per row)
• Statement has to be parsed to get results
Tracing SIMD in Oracle 12c
select prod_id,cust_id,time_id from laurent.s_capa_high where amount_sold=20;
Tracing SIMD in Oracle 12c
• This information is reported in CBO trace file (10053 or SQL_costing event)
Tracing SIMD in Oracle 12c
•ADVCMP_DECOMP
• ADVCMP_DECOMP_HPK
• Information is available in the trace file (for each IMCU processed)
• Used library and function
• Number of rows and counting algorithm
• Processing rate (comparison and decompression if relevant)
• But nothing on the results of the processing 
Tracing SIMD in Oracle 12c
•ADVCMP_DECOMP
• ADVCMP_DECOMP_HPK
• Gives information about SIMD function usage and filtering (after IMCU
pruning)
• Example: inmemory table with NO MEMCOMPRESS or DML compression
Tracing SIMD in Oracle 12c
•ADVCMP_DECOMP
• ADVCMP_DECOMP_HPK
• Example: inmemory compressed table
• SIMD are used only in the kdzk_eq_dict functions
Tracing SIMD in Oracle 12c
•My thoughts about compression/decompression
• NO MEMCOMPRESS / COMPRESS FOR DML
• kdzk*dynp* functions (ex: kdzk_eq_dynp_16bit, kdzk_le_dynp_32bit etc.)
• FOR QUERY LOW / QUERY HIGH
• Dictionary Encoding (LZW ?) : kdzk_*dict* functions (ex: kdzk_eq_dict_7bit,
kdzk_le_dict_4bit etc.)
• Run Length Encoding: kdzk_burst_rle* functions (ex: kdzk_burst_rle_8bit,
kdzk_burst_rle_16bit …)
• Bit packing compression: kdzk*fixed* functions (ex: kdzk_ge_lt_fixed_32bit,
kdzk_lt_fixed_8bit …)
Tracing SIMD in Oracle 12c
•My thoughts about compression/decompression
• FOR CAPACITY LOW
• FOR QUERY LOW + additional proprietary compression (OZIP)
• Functions: ozip_decode_dict*, kdzk_ozip_decode* (Ex:
kdzk_ozip_decode_dydi, ozip_decode_dict_9_bit etc.)
• FOR CAPACITY HIGH
• FOR QUERY HIGH + heavy weigth compression algorithm
•Compression/decompression method depends on:
• Datatype
• Column Compression Unit size
• Column contents
laurent.leturgez@premiseo.com
http://laurent-leturgez.com
@lleturgez
www.premiseo.com

More Related Content

What's hot

Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?
Performance Tuning Corporation
 
Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!
Stefan Oehrli
 
Oem12c patching -OOW13
Oem12c patching -OOW13Oem12c patching -OOW13
Oem12c patching -OOW13Bobby Curtis
 
WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013
Michel Schildmeijer
 
Oracle database locking mechanism demystified (AOUG)
Oracle database locking mechanism demystified (AOUG)Oracle database locking mechanism demystified (AOUG)
Oracle database locking mechanism demystified (AOUG)
Pini Dibask
 
RMOUG 18 - Oracle Database Locking Mechanism Demystified
RMOUG 18 - Oracle Database Locking Mechanism DemystifiedRMOUG 18 - Oracle Database Locking Mechanism Demystified
RMOUG 18 - Oracle Database Locking Mechanism Demystified
Pini Dibask
 
Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )
Mari Kupatadze
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best Practises
Michel Schildmeijer
 
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
Marcus Vinicius Miguel Pedro
 
Oracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best PracticesOracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best Practices
Bobby Curtis
 
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - TrivadisTechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
Trivadis
 
SSL Everywhere!
SSL Everywhere!SSL Everywhere!
SSL Everywhere!
Simon Haslam
 
SOUG Oracle Unified Audit for Multitenant Databases
SOUG Oracle Unified Audit for Multitenant DatabasesSOUG Oracle Unified Audit for Multitenant Databases
SOUG Oracle Unified Audit for Multitenant Databases
Stefan Oehrli
 
Extreme Replication - RMOUG Presentation
Extreme Replication - RMOUG PresentationExtreme Replication - RMOUG Presentation
Extreme Replication - RMOUG Presentation
Bobby Curtis
 
Oracle Data Redaction - EOUC
Oracle Data Redaction - EOUCOracle Data Redaction - EOUC
Oracle Data Redaction - EOUC
Alex Zaballa
 
Oracle Performance Tools of the Trade
Oracle Performance Tools of the TradeOracle Performance Tools of the Trade
Oracle Performance Tools of the Trade
Enkitec
 
DOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant EnvironmentsDOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant Environments
Stefan Oehrli
 
2019 - COMPUFAJ - DBA Career and Cloud
2019 - COMPUFAJ - DBA Career and Cloud2019 - COMPUFAJ - DBA Career and Cloud
2019 - COMPUFAJ - DBA Career and Cloud
Marcus Vinicius Miguel Pedro
 
Getting optimal performance from oracle e business suite(aioug aug2015)
Getting optimal performance from oracle e business suite(aioug aug2015)Getting optimal performance from oracle e business suite(aioug aug2015)
Getting optimal performance from oracle e business suite(aioug aug2015)
pasalapudi123
 

What's hot (20)

Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?
 
Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!Security Best Practice: Oracle passwords, but secure!
Security Best Practice: Oracle passwords, but secure!
 
Oem12c patching -OOW13
Oem12c patching -OOW13Oem12c patching -OOW13
Oem12c patching -OOW13
 
WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013WebLogic on ODA - Oracle Open World 2013
WebLogic on ODA - Oracle Open World 2013
 
Oracle database locking mechanism demystified (AOUG)
Oracle database locking mechanism demystified (AOUG)Oracle database locking mechanism demystified (AOUG)
Oracle database locking mechanism demystified (AOUG)
 
RMOUG 18 - Oracle Database Locking Mechanism Demystified
RMOUG 18 - Oracle Database Locking Mechanism DemystifiedRMOUG 18 - Oracle Database Locking Mechanism Demystified
RMOUG 18 - Oracle Database Locking Mechanism Demystified
 
Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )Oracle GoldenGate Microservices Overview ( with Demo )
Oracle GoldenGate Microservices Overview ( with Demo )
 
Oracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best PractisesOracle Fusion Middleware on Exalogic Best Practises
Oracle Fusion Middleware on Exalogic Best Practises
 
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
2020 - GUOB Tech Day / Groundbreakers LAD Tour - How to Create an AutoScale C...
 
Oracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best PracticesOracle GoldenGate 21c New Features and Best Practices
Oracle GoldenGate 21c New Features and Best Practices
 
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - TrivadisTechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
TechEvent 2019: Oracle PDB Isolation and Security; Stefan Oehrli - Trivadis
 
Hacking oracle using metasploit
Hacking oracle using metasploitHacking oracle using metasploit
Hacking oracle using metasploit
 
SSL Everywhere!
SSL Everywhere!SSL Everywhere!
SSL Everywhere!
 
SOUG Oracle Unified Audit for Multitenant Databases
SOUG Oracle Unified Audit for Multitenant DatabasesSOUG Oracle Unified Audit for Multitenant Databases
SOUG Oracle Unified Audit for Multitenant Databases
 
Extreme Replication - RMOUG Presentation
Extreme Replication - RMOUG PresentationExtreme Replication - RMOUG Presentation
Extreme Replication - RMOUG Presentation
 
Oracle Data Redaction - EOUC
Oracle Data Redaction - EOUCOracle Data Redaction - EOUC
Oracle Data Redaction - EOUC
 
Oracle Performance Tools of the Trade
Oracle Performance Tools of the TradeOracle Performance Tools of the Trade
Oracle Performance Tools of the Trade
 
DOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant EnvironmentsDOAG Oracle Unified Audit in Multitenant Environments
DOAG Oracle Unified Audit in Multitenant Environments
 
2019 - COMPUFAJ - DBA Career and Cloud
2019 - COMPUFAJ - DBA Career and Cloud2019 - COMPUFAJ - DBA Career and Cloud
2019 - COMPUFAJ - DBA Career and Cloud
 
Getting optimal performance from oracle e business suite(aioug aug2015)
Getting optimal performance from oracle e business suite(aioug aug2015)Getting optimal performance from oracle e business suite(aioug aug2015)
Getting optimal performance from oracle e business suite(aioug aug2015)
 

Similar to SIMD inside and outside oracle 12c

Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Laurent Leturgez
 
SIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In MemorySIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In Memory
Laurent Leturgez
 
Processors selection
Processors selectionProcessors selection
Processors selection
Pradeep Shankhwar
 
Leveraging Cassandra for real-time multi-datacenter public cloud analytics
Leveraging Cassandra for real-time multi-datacenter public cloud analyticsLeveraging Cassandra for real-time multi-datacenter public cloud analytics
Leveraging Cassandra for real-time multi-datacenter public cloud analytics
Julien Anguenot
 
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
DataStax Academy
 
Oracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 serveryOracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 servery
MarketingArrowECS_CZ
 
Something about SSE and beyond
Something about SSE and beyondSomething about SSE and beyond
Something about SSE and beyond
Lihang Li
 
cinema_time_new.pdf
cinema_time_new.pdfcinema_time_new.pdf
cinema_time_new.pdf
MaxDmitriev
 
6 months/weeks training in Vlsi,jalandhar
6 months/weeks training in Vlsi,jalandhar6 months/weeks training in Vlsi,jalandhar
6 months/weeks training in Vlsi,jalandhar
deepikakaler1
 
6 weeks/months summer training in vlsi,ludhiana
6 weeks/months summer training in vlsi,ludhiana6 weeks/months summer training in vlsi,ludhiana
6 weeks/months summer training in vlsi,ludhiana
deepikakaler1
 
vlsi design summer training ppt
vlsi design summer training pptvlsi design summer training ppt
vlsi design summer training ppt
Bhagwan Lal Teli
 
Summer training embedded system and its scope
Summer training  embedded system and its scopeSummer training  embedded system and its scope
Summer training embedded system and its scope
Arshit Rai
 
Keep Calm And Serilog Elasticsearch Kibana on .NET Core
Keep Calm And Serilog Elasticsearch Kibana on .NET CoreKeep Calm And Serilog Elasticsearch Kibana on .NET Core
Keep Calm And Serilog Elasticsearch Kibana on .NET Core
Maciej Szymczyk
 
dsp-processor-ppt.ppt
dsp-processor-ppt.pptdsp-processor-ppt.ppt
dsp-processor-ppt.ppt
Krishnavenimanickam2
 
Renaissance of sparc UKOUG 2014
Renaissance of sparc UKOUG 2014Renaissance of sparc UKOUG 2014
Renaissance of sparc UKOUG 2014
Philippe Fierens
 
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PROIDEA
 
COUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_FeaturesCOUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_FeaturesAlfredo Abate
 
Summer training embedded system and its scope
Summer training  embedded system and its scopeSummer training  embedded system and its scope
Summer training embedded system and its scope
Arshit Rai
 
nios.ppt
nios.pptnios.ppt
nios.ppt
fahad283209
 
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
Migrating ETL Workflow to Apache Spark at Scale in PinterestMigrating ETL Workflow to Apache Spark at Scale in Pinterest
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
Databricks
 

Similar to SIMD inside and outside oracle 12c (20)

Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
Ukoug15 SIMD outside and inside Oracle 12c (12.1.0.2)
 
SIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In MemorySIMD inside and outside Oracle 12c In Memory
SIMD inside and outside Oracle 12c In Memory
 
Processors selection
Processors selectionProcessors selection
Processors selection
 
Leveraging Cassandra for real-time multi-datacenter public cloud analytics
Leveraging Cassandra for real-time multi-datacenter public cloud analyticsLeveraging Cassandra for real-time multi-datacenter public cloud analytics
Leveraging Cassandra for real-time multi-datacenter public cloud analytics
 
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
iland Internet Solutions: Leveraging Cassandra for real-time multi-datacenter...
 
Oracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 serveryOracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 servery
 
Something about SSE and beyond
Something about SSE and beyondSomething about SSE and beyond
Something about SSE and beyond
 
cinema_time_new.pdf
cinema_time_new.pdfcinema_time_new.pdf
cinema_time_new.pdf
 
6 months/weeks training in Vlsi,jalandhar
6 months/weeks training in Vlsi,jalandhar6 months/weeks training in Vlsi,jalandhar
6 months/weeks training in Vlsi,jalandhar
 
6 weeks/months summer training in vlsi,ludhiana
6 weeks/months summer training in vlsi,ludhiana6 weeks/months summer training in vlsi,ludhiana
6 weeks/months summer training in vlsi,ludhiana
 
vlsi design summer training ppt
vlsi design summer training pptvlsi design summer training ppt
vlsi design summer training ppt
 
Summer training embedded system and its scope
Summer training  embedded system and its scopeSummer training  embedded system and its scope
Summer training embedded system and its scope
 
Keep Calm And Serilog Elasticsearch Kibana on .NET Core
Keep Calm And Serilog Elasticsearch Kibana on .NET CoreKeep Calm And Serilog Elasticsearch Kibana on .NET Core
Keep Calm And Serilog Elasticsearch Kibana on .NET Core
 
dsp-processor-ppt.ppt
dsp-processor-ppt.pptdsp-processor-ppt.ppt
dsp-processor-ppt.ppt
 
Renaissance of sparc UKOUG 2014
Renaissance of sparc UKOUG 2014Renaissance of sparc UKOUG 2014
Renaissance of sparc UKOUG 2014
 
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...PLNOG16: Obsługa 100M pps na platformie PC, Przemysław Frasunek, Paweł Mała...
PLNOG16: Obsługa 100M pps na platformie PC , Przemysław Frasunek, Paweł Mała...
 
COUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_FeaturesCOUG_AAbate_Oracle_Database_12c_New_Features
COUG_AAbate_Oracle_Database_12c_New_Features
 
Summer training embedded system and its scope
Summer training  embedded system and its scopeSummer training  embedded system and its scope
Summer training embedded system and its scope
 
nios.ppt
nios.pptnios.ppt
nios.ppt
 
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
Migrating ETL Workflow to Apache Spark at Scale in PinterestMigrating ETL Workflow to Apache Spark at Scale in Pinterest
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
 

Recently uploaded

How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2
 

Recently uploaded (20)

How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 

SIMD inside and outside oracle 12c

  • 1. SIMD Instructions outside and inside Oracle 12c Laurent Léturgez – 2016
  • 2. Whoami •Oracle Consultant since 2001 •Former developer (C, Java, perl, PL/SQL) •Owner@Premiseo: Data Management on Premise and in the Cloud •Blogger since 2004 • http://laurent.leturgez.free.fr (In french and discontinued) • http://laurent-leturgez.com •Twitter : @lleturgez
  • 3. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 4. Caveats •Most of the topics are from • My own researches • My past life as a developer •Some of the topics are about internals, so: • Analysis and conclusion may be incomplete • Future versions of Oracle may change the features •Tests have been done with Oracle 12.1.0.2, Oracle Enterprise Linux 7.3 (UEKR3), VMWare Fusion 8 (And VirtualBox)
  • 5. Before we start … •Some fundamentals (from Dennis Yurichev’s book) • CPU register : […]The easiest way to understand a register is to think of it as an untyped temporary variable. Imagine if you were working with high-level PL1 and could only use eight 32-bit (or 64-bit) variables. Yet a lot can be done using just these! • Instruction : A primitive CPU command. The simplest examples include: moving data between registers, working with memory and arithmetic primitives. As a rule, each CPU has its own instruction set architecture (ISA). • Assembly language : Mnemonic code and some extensions like macros which are intended to make a programmer’s life easier. http://beginners.re/Reverse_Engineering_for_Beginners-en.pdf
  • 6. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 7. SIMD instructions … outside Oracle 12c • SIMD stands for Single Instruction Multiple Data • Process multiple data • In one CPU instruction • Based on • Specific registers • Specific CPU instructions and sets of instructions • Not Oracle specific • CPU Architecture specific • Intel • IBM (Altivec) • Sparc v9 (VIS) • This presentation is mainly about Intel architecture
  • 8. SIMD instructions … outside Oracle 12c •What is a SIMD register ? •It’s a CPU register •Wider than traditional registers (RDI, RSI, R8, R9 etc.) • 128 up to 512 bits wide • Contains many data
  • 9. SIMD instructions … outside Oracle 12c •How does it work ? Scalar operation • an array of 4 integers {1,2,3,4} • add 1 to each value Reg1 Reg2 Reg3 CPU RAM In Out 2 3 41 1 Reg1 Reg2 Reg3 CPU RAM In Out 2 3 41 1 1 Reg1 Reg2 Reg3 CPU RAM In Out 2 3 41 1 1 2 Reg1 Reg2 Reg3 CPU RAM In Out 2 3 41 1 1 2 2 Reg1 Reg2 Reg3 CPU RAM In Out 2 3 41 4 1 5 3 4 52 …/… LOAD ADD SAVE 4 LOAD 4 ADD 4 SAVE
  • 10. SIMD instructions … outside Oracle 12c •How does it work ? SIMD operation • an array of 4 integers {1,2,3,4} • add 1 to each value SIMD Reg1 CPU RAM In Out 2 3 41 1 1 11SIMD Reg2 SIMD Reg3 SIMD Reg1 CPU RAM In Out 2 3 41 2 3 41 1 1 11SIMD Reg2 SIMD Reg3 SIMD Reg1 CPU RAM In Out 2 3 41 2 3 41 1 1 11 3 4 52 SIMD Reg2 SIMD Reg3 SIMD Reg1 CPU RAM In Out 2 3 41 3 4 52 2 3 41 1 1 11 3 4 52 SIMD Reg2 SIMD Reg3 LOAD ADD SAVE
  • 11. SIMD instructions … outside Oracle 12c Instruction set MMX SSE SSE2/SSE3/SSSE3/SSE 4 AVX/AVX2 AVX3 or AVX512 Register Size 64 Bits 128 bits 128 bits 256 Bits 512 bits # Registers 8 8 16 16 32 Register Name MM0 to MM7 XMM0 to XMM7 XMM0 to XMM15 YMM0 to YMM15 ZMM0 to ZMM31 Processors Pentium II Pentium III Pentium IV to Nehalem Sandy Bridge - Haswell Skylake (initially announced but not available yet) Maybe on Kaby Lake Xeon chip Other Only four 32 bits single precision floating point numbers Usage expansion (two 64 bits double precision, four 32 bits integers and up to sixteen 8 bits bytes) Three operand instructions (non destructive) : A+B=C rather than A=A+B Alignments requirements relaxed
  • 12. SIMD instructions … outside Oracle 12c • Intel API (C/C++) : Intel Intrinsics Guide https://software.intel.com/sites/landingpage/IntrinsicsGuide/ • Sample code: https://app.box.com/simdSampleC-2015
  • 13. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 14. •It depends on : •Hardware • Consult processors datasheets to see which instruction set extensions are used (if many) • http://ark.intel.com/#@Processors •Hypervisor • Some (old) hypervisors do not support modern extensions • VirtualBox versions <5.0 don’t support SSE4, AVX and AVX2 • Hyper-V on W2008R2-SP1 needs patch for specific processors to support AVX Will my application use SIMD registers and instructions ?
  • 15. •It depends on the Operating System •AVX (256 bits) is supported from • Linux Kernel >= 2.6.30 • Redhat EL5 : 2.6.18 • Oracle EL5 w/UEK : 2.6.32 AVX needs xsave kernel parameter • Solaris 10 upd 10 and Solaris 11 (x86-64) • Windows 2008 R2 SP1 Will my application use SIMD registers and instructions ?
  • 16. •It depends on the compiler •GCC • > 4.6 for AVX support • Use of specific switches (-msse2, -msse4.1, msse4.2, -mavx, -mavx2 …) •Intel C/C++ Compiler (ICC) • > 11.1 for AVX Support and > 13.0 for AVX2 support • Use of specific switches (-xsse4.2, -xavx, -xCORE-AVX2 …) •Beware of optimization switches (-O1,-O2, -O3) •More … disassemble (if you are allowed to  ) • Registers • Assembly language instructions Will my application use SIMD registers and instructions ?
  • 17. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 18. • Based on a C program • Used CPU: Haswell microarchitecture (Core i7-4960HQ). AVX/AVX2 enabled • 3 tests : No SIMD, SSE4, AVX • Input: one array containing 1Million values. • Goal: Add 1 to each value, each million values repeated 4k, 8k, 16k and 32k times • CPU Time(s) = f(#rows) “Quick and Dirty” Sample code available here: https://app.box.com/s/ibmnbblpho4xtbeq2x8ir60nrk37208v Raw Performance
  • 19. 10.35 20.46 42.35 85.64 3.3 6.81 13.73 25.58 1.96 3.51 7.23 15.15 0 10 20 30 40 50 60 70 80 90 4096 M. ROWS 8192 M. ROWS 16384 M. ROWS 32768 M. ROWS CPUTime(Sec) RAW Performance (CPU) for SIMD Instructions NO SIMD SSE4 (XMM Registers) AVX (YMM Registers) Raw Performance
  • 20. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 21. SIMD instructions … inside Oracle 12c •In Memory Data Structure • In Memory Compression Unit : IMCU • IMCU is the unit of column store allocation • Target size is 1M rows (controlled by _inmemory_imcu_target_rows in 12.1, replaced by _inmemory_imcu_target_maxrows in 12.2 (?)) • One IMCU can contain more than one column • Each column in one IMCU is a column unit (CU)
  • 22. SIMD instructions … inside Oracle 12c •In memory column store storage indexes • For each column unit, min and max values are maintained in a storage index • Storage Indexes provide CU pruning • Information about CU available in GV$IM_COL_CU (Undocumented. See Bug ID 19361690) IMCU Pruning
  • 23. SIMD instructions … inside Oracle 12c • The way your data is sorted matters for best IMCU pruning
  • 24. SIMD instructions … inside Oracle 12c •SIMD extensions are used with In Memory storage indexes for efficient filtering 1. IM Storage Indexes do IMCU pruning 2. SIMD instructions apply efficiently filter predicates IMCU Pruning Prod-id 10 10 14 14 10 Filtering with SIMD
  • 25. SIMD instructions … inside Oracle 12c •Oracle 12c uses specific libraries for SIMD (and compression) •Located in $ORACLE_HOME/lib • libshpksse4212.so for SSE4.2 extensions Compiled with ICC v12 with specific xsse4.2 switch • libshpkavx12.so for AVX extensions Compiled with ICC v12 with specific xavx switch • libshpkavx212.so for AVX2 extensions Not totally implemented (8 functions implemented in 12.1, 824 in 12.2) No ICC avx2 switch used because ICC v12 doesn’t support AVX2 •Thanks Tanel Pöder for this 
  • 26. SIMD instructions … inside Oracle 12c •Oracle SIMD related functions • Located in kdzk kernel module (HPK) • Part of Advanced Compression library (ADVCMP) • Easily tracked with systemtap
  • 27. SIMD instructions … inside Oracle 12c SQL> select count(*) from s where amount_sold=20; COUNT(*) ---------- 140 SQL> select count(*) from s where amount_sold>20; COUNT(*) ---------- 666306 [oracle@oel7-im demo1]$ stap -x 7503 ./trc_orcl_simd_func_121.stp Begin.^C End. Function: count kdzk_lbiv_ictx_ini2_dydi: 4 kdzk_lbiviter_dydi: 2 kdzk_lbivset_range_dydi: 9 kdzk_lbivclr_range_dydi: 9 kdzk_eq_dynp_32bit: 9 kdzk_lbivones_dydi: 2 [oracle@oel7-im demo1]$ stap -x 7503 ./trc_orcl_simd_func_121.stp Begin.^C End. Function: count kdzk_lbivset_range_dydi: 9 kdzk_lbivclr_range_dydi: 9 kdzk_gt_dynp_32bit: 9 kdzk_lbiviter_dydi: 654 kdzk_lbiv_ictx_ini2_dydi: 1308 kdzk_lbivones_dydi: 654
  • 28. SIMD instructions … inside Oracle 12c •How Oracle uses SIMD extensions ? It depends on many parameters • OS Level : /proc/cpuinfo • AVX and AVX2 support • SSE4 Support only
  • 29. SIMD instructions … inside Oracle 12c •Which library am I using ? •pmap • AVX support • SSE4 support
  • 30. SIMD instructions … inside Oracle 12c •Which compiler options have been used ? • Read “comment” section in ELF • Read the corresponding compiler documentation [oracle@oel7 conf]$ readelf -p .comment $ORACLE_HOME/lib/libshpkavx12.so | > | egrep -i 'intel|gcc' | egrep 'xavx|mavx’ [ 2c] -?comment:Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 12.0 Build 20120731 …/… -DNTEV_USE_EPOLL -DNET_USE_LDAP -xavx
  • 31. SIMD instructions … inside Oracle 12c •How are SIMD registers used by Oracle ? • GDB • To get and know the call stack (backtrace) • To set breakpoints on interesting functions • To view register contents (traditional and SIMD) • “Info registers” for traditional registers • “Info all-registers” for all registers (SIMD reg included) • (gdb) print $ymmX.<format> Format can be v8_float, v4_double, v32_int8, v16_int16, v8_int32, v4_int64, or v2_int128
  • 32. SIMD instructions … inside Oracle 12c break kdzk_gt_dynp_32bit commands 1 bt continue end; Breakpoint 1, 0x00007f2a341b2e30 in kdzk_gt_dynp_32bit () from /u01/app/oracle/product/12.1.0/dbhome_1/lib/libshpkavx12.so #0 0x00007f2a341b2e30 in kdzk_gt_dynp_32bit () from /u01/app/oracle/product/12.1.0/dbhome_1/lib/libshpkavx12.so #1 0x000000000b7041bc in kdzk_cmp () #2 0x000000000b4deada in kdzdcol_theta_imc_sep () #3 0x00000000038a075f in kdzdcol_theta () #4 0x000000000b577726 in kdpEvalTheta () #5 0x000000000b57bad0 in kdpPredEval () #6 0x00000000038a02ef in kdzt_acmp_predeval () #7 0x0000000009fb9758 in kdstf11101010001101km () #8 0x000000000cd2de55 in kdsttgr () #9 0x000000000cd73576 in qertbFetch () #10 0x000000000cd9ed50 in qergsFetch () #11 0x000000000cbd424b in opifch2 () #12 0x0000000002207899 in kpoal8 () #13 0x000000000cbdaecd in opiodr () #14 0x000000000ce0ffab in ttcpip () #15 0x0000000001bcd8b6 in opitsk () #16 0x0000000001bd2241 in opiino () #17 0x000000000cbdaecd in opiodr () #18 0x0000000001bc9a0b in opidrv () #19 0x00000000026d9f91 in sou2o () #20 0x0000000000bd680a in opimai_real () #21 0x00000000026e46dc in ssthrdmain ()
  • 33. SIMD instructions … inside Oracle 12c break kdzk_gt_dynp_32bit commands 1 python gdb.execute("print $ymm0.v2_int128"); gdb.execute("print $ymm1.v2_int128"); gdb.execute("print $ymm2.v2_int128"); gdb.execute("print $ymm3.v2_int128"); gdb.execute("print $ymm4.v2_int128"); gdb.execute("print $ymm5.v2_int128"); gdb.execute("print $ymm6.v2_int128"); gdb.execute("print $ymm7.v2_int128"); gdb.execute("print $ymm8.v2_int128"); gdb.execute("print $ymm9.v2_int128"); gdb.execute("print $ymm10.v2_int128");gdb.execute("print $ymm11.v2_int128");gdb.execute("print $ymm12.v2_int128");gdb.execute("print $ymm13.v2_int128");gdb.execute("print $ymm14.v2_int128");gdb.execute("print $ymm15.v2_int128");gdb.execute("finish"); gdb.execute("print $ymm0.v2_int128"); gdb.execute("print $ymm1.v2_int128"); gdb.execute("print $ymm2.v2_int128"); gdb.execute("print $ymm3.v2_int128"); gdb.execute("print $ymm4.v2_int128"); gdb.execute("print $ymm5.v2_int128"); gdb.execute("print $ymm6.v2_int128"); gdb.execute("print $ymm7.v2_int128"); gdb.execute("print $ymm8.v2_int128"); gdb.execute("print $ymm9.v2_int128"); gdb.execute("print $ymm10.v2_int128");gdb.execute("print $ymm11.v2_int128");gdb.execute("print $ymm12.v2_int128");gdb.execute("print $ymm13.v2_int128");gdb.execute("print $ymm14.v2_int128");gdb.execute("print $ymm15.v2_int128"); Continue end
  • 34. SIMD instructions … inside Oracle 12c In red, register content has been modified In blue, the second part of the SIMD registers (128 bits) is empty
  • 35. SIMD instructions … inside Oracle 12c •Oracle (12.1) IM can use AVX or SSE4 extensions for SIMD operations •When AVX is used It uses only 128 bits out of 256 bits wide registers • AVX adds new register-state through the 256-bit wide YMM register file • Explicit operating system support is required to properly save and restore AVX's expanded registers between context switches • Without this, only AVX 128-bit is supported
  • 36. SIMD instructions … inside Oracle 12c •The culprit •Oracle 12.1.0.2 is supported from EL5 onwards •EL5 Redhat Kernel is 2.6.18 and this flag (xsave) is supported from 2.6.30 kernels •For compatibility reasons, Oracle has had to compile its code on 2.6.18 kernels
  • 37. Agenda •SIMD Instructions, outside Oracle 12c •What is a SIMD instruction ? •Will my application use SIMD ? •Raw Performance •SIMD Instructions, inside Oracle 12c •How SIMD instructions are used inside Oracle 12c •Tracing SIMD in Oracle 12c
  • 38. Tracing SIMD in Oracle 12c •Interesting components to trace for SIMD and/or IMCU Pruning are : •ADVCMP_DECOMP.* • ADVCMP_DECOMP_HPK : SIMD functions • ADVCMP_DECOMP_PCODE : Portable Code Machine (usually not related to specific CPU instructions) •IM_optimizer • Gives information about CBO calculation related to IM
  • 39. Tracing SIMD in Oracle 12c •IM_optimizer • Information available in trace file • IMCU Pruning ratio • CU decompression costing (per IMCU) • Predicate evaluation costing (per row) • Statement has to be parsed to get results
  • 40. Tracing SIMD in Oracle 12c select prod_id,cust_id,time_id from laurent.s_capa_high where amount_sold=20;
  • 41. Tracing SIMD in Oracle 12c • This information is reported in CBO trace file (10053 or SQL_costing event)
  • 42. Tracing SIMD in Oracle 12c •ADVCMP_DECOMP • ADVCMP_DECOMP_HPK • Information is available in the trace file (for each IMCU processed) • Used library and function • Number of rows and counting algorithm • Processing rate (comparison and decompression if relevant) • But nothing on the results of the processing 
  • 43. Tracing SIMD in Oracle 12c •ADVCMP_DECOMP • ADVCMP_DECOMP_HPK • Gives information about SIMD function usage and filtering (after IMCU pruning) • Example: inmemory table with NO MEMCOMPRESS or DML compression
  • 44. Tracing SIMD in Oracle 12c •ADVCMP_DECOMP • ADVCMP_DECOMP_HPK • Example: inmemory compressed table • SIMD are used only in the kdzk_eq_dict functions
  • 45. Tracing SIMD in Oracle 12c •My thoughts about compression/decompression • NO MEMCOMPRESS / COMPRESS FOR DML • kdzk*dynp* functions (ex: kdzk_eq_dynp_16bit, kdzk_le_dynp_32bit etc.) • FOR QUERY LOW / QUERY HIGH • Dictionary Encoding (LZW ?) : kdzk_*dict* functions (ex: kdzk_eq_dict_7bit, kdzk_le_dict_4bit etc.) • Run Length Encoding: kdzk_burst_rle* functions (ex: kdzk_burst_rle_8bit, kdzk_burst_rle_16bit …) • Bit packing compression: kdzk*fixed* functions (ex: kdzk_ge_lt_fixed_32bit, kdzk_lt_fixed_8bit …)
  • 46. Tracing SIMD in Oracle 12c •My thoughts about compression/decompression • FOR CAPACITY LOW • FOR QUERY LOW + additional proprietary compression (OZIP) • Functions: ozip_decode_dict*, kdzk_ozip_decode* (Ex: kdzk_ozip_decode_dydi, ozip_decode_dict_9_bit etc.) • FOR CAPACITY HIGH • FOR QUERY HIGH + heavy weigth compression algorithm •Compression/decompression method depends on: • Datatype • Column Compression Unit size • Column contents

Editor's Notes

  1. 12 instructions
  2. 3 instructions
  3. AVX adds new register-state through the 256-bit wide YMM register file, so explicit operating system support is required to properly save and restore AVX's expanded registers between context switches; without this, only AVX 128-bit is supported[citation needed].
  4. ICC Switches : Optimization : https://software.intel.com/en-us/articles/step-by-step-optimizing-with-intel-c-compiler SIMD (very interesting) : https://software.intel.com/en-us/articles/performance-tools-for-software-developers-intel-compiler-options-for-sse-generation-and-processor-specific-optimizations GCC Switches Optimization : https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html SIMD : https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
  5. Actual Size depends on size of row, compression factor Updated by background process Triggered by IMC0 W00x : processes that populate IM Column store Contains list of rowid
  6. Depends on how data are sorted inside the extents because, loading data into IMCU reads table extents sequentially
  7. More than 1400 functions implemented in AVX and SSE42 libraries (1500 in 12.2) Xavx (diff mavx) has specific optimization
  8. HPK : High Performance Compression ?
  9. HPK : High Performance Compression ?
  10. /proc/cpuinfo gives information depending on Hardware, kernel, kernel options, and hypervisor used (if used) For other OS, use tools that uses CPUID function and read EAX, EBX, ECX and EDX registers CPUINFO depends on Hardware, Kernel and its options, used hypervisor
  11. ELF : Executable and Linking Format In 12.2 –xCORE-AVX2 is used : [oracle@oel7-im lib]$ readelf -p .comment $ORACLE_HOME/lib/libshpkavx212.so | egrep -i 'avx' [ 2d] -?comment:Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.3.174 Build 20140422 : kdzk_avx2.c : -I. -I/ade/b/3240311073/oracle/rdbms/src/hdir/ -I/ade/b/3240311073/oracle/oracore/include -I/ade/b/3240311073/oracle/oracore/public -I/ade/b/3240311073/oracle/oracore/port/include -I/ade/b/3240311073/oracle/xdk/include -I/ade/b/3240311073/oracle/xdk/public -I/ade/b/3240311073/oracle/nlsrtl/include -I/ade/b/3240311073/oracle/plsql/public -I/ade/b/3240311073/oracle/plsql/include -I/ade/b/3240311073/oracle/ldap/public/sslinc -I/ade/b/3240311073/oracle/ldap/include/sslinc -I/ade/b/3240311073/oracle/ldap/include/cryptoinc -I/ade/b/3240311073/oracle/network/public -I/ade/b/3240311073/oracle/network/include -I/ade/b/3240311073/oracle/precomp/public/ -I/ade/b/3240311073/oracle/precomp/include/ -I/ade/b/3240311073/oracle/slax/include -I/ade/b/3240311073/oracle/javavm/include -I/ade/b/3240311073/oracle/ctx/public -I/ade/b/3240311073/oracle/ordim/public -I/ade/b/3240311073/oracle/ordim/include -I/ade/b/3240311073/oracle/ldap/public -I/ade/b/3240311073/oracle/ldap/include -I/ade/b/3240311073/oracle/wwg/public/gtwy -I/ade/b/3240311073/oracle/dbjava/if -I/ade/b/3240311073/oracle/oraolap/public -I/ade/b/3240311073/oracle/has/include -I/ade/b/3240311073/oracle/opsm/include -I/ade/b/3240311073/oracle/oss/include -I/ade/b/3240311073/oracle/opmn/src/c/public -I/ade/b/3240311073/oracle/md/public -I/ade/b/3240311073/oracle/md/src/include -I/ade/b/3240311073/oracle/usm/include -I/ade/b/3240311073/oracle/usm/public -I/ade/b/3240311073/oracle/rdbms/src/port/server -I/ade/b/3240311073/oracle/rdbms/src/port/generic -c -o kdzk_avx2.o -O2 -trigraphs -fno-omit-frame-pointer -fp-model source -xCORE-AVX2 -fno-strict-aliasing -mIPOPT_clone_max_total_clones=0 -mP2OPT_hpo_enable_short_trip_vec=F -sox=profile -sox=inline -no-global-hoist -mP2OPT_tls_control=0 -wd191 -wd175 -wd188 -wd810 -we127 -we1345 -we1338 -wd279 -wd186 -wd1572 -wd589 -wd11505 -we592 -wd69 -we172 -Qoption,cpp,--treat_func_as_string_literal -vec-report0 -mP2OPT_spill_parms=T -we167 -we147 -we2332 -we266 -we1011 -we1 -we144 -we2331 -we2602 -std=c99 -hotpatch -ww344
  12. Decompression costing : columns used in filter predicates + Columns in select Predicate cost evaluation : /!\ cumulative values
  13. Cost generated by column in the SELECT clause are not reported on the 10053 event trace file. Only the column in the filter predicate
  14. Results are available when tracing ADVCMP_DECOMP.* Results are given by kdzt_acmp_fetch
  15. DML compression : Dictionnary Compression ?
  16. SIMD extensions are user
  17. LZW : Lempel-Ziv-Welch