|
ll try not to make a habit of referencing a
comment on my blog as subject matter for a new post, but this one is
worth it. One of my blog readers posted this comment. The question posed was what performance effect there would be with DSS or OLTP with the Sun CoolThreads architecturegiven it has a single FPU shared by 8 cores.
ll try not to make a habit of referencing a
comment on my blog as subject matter for a new post, but this one is
worth it. One of my blog readers posted this comment. The question posed was what performance effect there would be with DSS or OLTP with the Sun CoolThreads architecturegiven it has a single FPU shared by 8 cores. The comment was:
I have heard
though that the CoolThread processors are not always great at
supporting databases because they only have a single floating point
processor? Would you see this as a problem in either a OLTP or DSS
environment that dont have any requirement for calculations that may
involve floating points?
Since this is an Oracle blog, Ill address this with an Oracle-oriented answer. I think most of you know how much I dislike red herring marketing techniques, so Ill point out that there has been a good deal of web- FUD about
the fact that the 8-core packaging of the CoolThreads architecture all
share a single floating point unit (FPU). Who cares?
Oracle and Floating Point
The core Oracle kernel does not use floating point operations. Yes
there are a couple of new 10g native float datatypes (e.g.,
BINARY_FLOAT, BINARY_DOUBLE), but how arithmetic operations are
performed on these are a porting decision. That is, the team that ports
Oracle to a given architecture must choose whether the handling of data
types is done with floating point operations or not. Oracle documentation on the matter states:
The BINARY_FLOAT and BINARY_DOUBLE types can use native hardware arithmetic instructions
Having a background in port-level engineering of
Oracle, Ill point out that the word can in this context is very
important. I have a query out about whether the Solaris ports do indeed
do this, but what is the real impact either way?
At first glance one expect that an operation like select sum(amt_sold)
to benefit significantly if the amt_sold column was defined as a
BINARY_FLOAT or BINARY_DOUBLE, but that is just not so. Oracle
documentation is right to point out that machine floating point types
are, uh, not the best option for financial data. The documentation
reads further:
These types do not always represent fractional values
precisely, and handle rounding differently than the NUMBER types. These
types are less suitable for financial code where accuracy is critical.
So those folks out there that are trying to market
against CoolThreads based largely on its lack of good FPU support can
forget the angle of poor database performance. It is a red herring. Well,
ok, maybe there is an application out there that is not financial and
would like to benefit from the fact that a BINARY_FLOAT is 4 bytes of
storage whereas a NUMBER is 21 bytes. But there again I would have to
see real numbers from a real test to believe there is any benefit. Why?
Remember that accesses to a row with a BINARY_FLOAT column is loaded
with SGA code that is entirely integer. Not to mention the fact that it
is unlikely a table would only have that column in it. All the other
adjacent columns add overhead in the caching and fetching of this nice,
new small BINARY_FLOAT column. All the layers of code to parse the
query, to construct the plan, to allocate heaps and so on are all
integer operations. Then to access each row piece in each block is
laden with cache gets/misses (logical I/O) and necessary physical I/O.
For each potential hardware FPU operating on a BINARY_FLOAT column
there are orders of magnitude more integer operations. This is an
RDBMS, not an in-memory database.
All that theory aside, it is entirely possible
to actually measure before we mangle as goes the cliché. Once again,
thanks to my old friend Glenn Fawcett for a pointer to a toolkit for measuring floating point operations.
Why the Passion?
I remember the FUD marketing that competitors tried to use against Sequent when the infamous Pentium FDIV
bug was found. That bug had no affect on the Sequent port of Oracle. It
seems that was a subtle fact that the marketing personel working for
our competitors missed because they went wild with it. See, at the time
Sequent was an Oracle server power house with systems based deep at the
core with Intel processors (envision a 9 square foot board loaded with
ASICS, PALs and other goodies with a little Pentium dot in the middle).
Sequent was the development platform for Unix Oracle Parallel Server
and Intra-node Parallel Query. Oracle ran their entire datacenter on
Sequent Symmetry systems at the time (picture 100+ refrigerator sized
chassis lined up in rows at Redwood Shores) and Oracle Server
Technologies ran their nightly regression testing against Sequent
Symmetry systems as well. Boring, I know. But I was in Oracle Advanced
Engineering at the time and I didnt appreciate the FUD marketing that
our competitors (whose systems were RISC based) trying to play up the
impact of that bug on Oracle performance. I do not like FUD marketing.
If you are a regular reader of my blog I bet you know what other
current FUD marketing I particularly dislike.
More to the point of CoolThreads, Ive seen web
content from companies using what I consider to be red herring
marketing against the SunFire T[12]000 family of servers. I am probably
one of the biggest proponents of fair play out there and suggesting
CoolThreads technology is not fit for Oracle due to poor FPU support is
just not right. Now, does that mean Id choose a SunFire over an
industry standard server? Well, that would be another blog entry.
Read the original article: http://kevinclosson.wordpress.com/2006/11/30/marketing-efforts-prove-sunfire-t2000-is-not-fit-for-oracle/ |