Hyperthreading and VMS (899 Views)
Reply
Trusted Contributor
Jeremy Begg
Posts: 383
Registered: ‎01-20-2005
Message 1 of 6 (899 Views)

Hyperthreading and VMS

Hi,

 

When the first hyperthread-capable Itanium servers came out with VMS support, I remember a comment from a VMS engineering presentation that said each CPU thread would show up as a separate CPU on VMS, and need a licence accordingly.  This would have been with VMS 8.3 I believe.

 

A BL860c i2 server blade here has a single, quad-core Tukwila processor with hyperthreading turned on. VMS shows 8 CPUs (as expected):

 

System: HOCD04, HP Integrity BL860c i2  (1.60GHz/5.0MB)

CPU ownership sets:
   Active               0-7
   Configure            0-7

CPU state sets:
   Potential            0-7
   Autostart            0-7
   Powered Down         None
   Not Present          None
   Hard Excluded        None
   Failover             None

 

The system has a 4-unit HAOE licence:

 

------- Product ID --------    ---- Rating ----- -- Version --
Product            Producer    Units PCL   Activ Version Release    Termination
OPENVMS-I64-HAOE   HP              4  1     0      0.0  (none)      (none)

 

so I expected that only half of the available 8 CPUs would be used.

As a test, set off 8 processes which run in a tight CPU loop at priority 0.  Somewhat to my surprise, MONITOR SYSTEM shows 8 processes in CUR state and 800% CPU busy.  Which implies that the 4-unit licence above is allowing all 8 CPUs to operate.

 

Rather more curiously MONITOR PROCESS/TOPCPU shows 8 processes each consuming 50% of CPU:

 

                            OpenVMS Monitor Utility
                             TOP CPU TIME PROCESSES
                                 on node HOCD04
                            22-JUN-2012 12:21:52.93

                                     0         25        50        75       100
                                     + - - - - + - - - - + - - - - + - - - - +
 2200029B  Jeremy6                50  xxxxxxxxxxxxxxxxxxx
  2200029D  Jeremy8                50  xxxxxxxxxxxxxxxxxxx
 2200029C  Jeremy7                50  xxxxxxxxxxxxxxxxxxx
 22000299  Jeremy4                50  xxxxxxxxxxxxxxxxxxx
 22000298  Jeremy3                50  xxxxxxxxxxxxxxxxxxx
 22000297  Jeremy2                50  xxxxxxxxxxxxxxxxxxx
 22000296  Jeremy1                50  xxxxxxxxxxxxxxxxxxx
 2200029A  Jeremy5                50  xxxxxxxxxxxxxxxxxxx

 

which would imply there's some sort of recognition that a hyperthread CPU is only half a core!

 

Can some explain how VMS treats hyperthreaded CPUs, both from a scheduling perspective and a licencing perspective?  (I know there's some doubt about how helpful hyperthreading might be for performance, and on other systems I've been turning it off.  My findings today came about by accident.)

 

Thanks,

Jeremy Begg

 

Honored Contributor
Hein van den Heuvel
Posts: 6,588
Registered: ‎05-19-2003
Message 2 of 6 (852 Views)

Re: Hyperthreading and VMS

I do not recall ever having seen a suggestion licensing might be per thread.

That would be ludicrous, as HT is of limited use. Nobody would spend  serious money on a marginal improvement.

 

google : openvms licensing core

http://h71000.www7.hp.com/ovmslicensing/openvms_licensing_information.html

 

"OpenVMS software is licensed on a per-socket basis on the new HP Integrity family of servers (models BL8x0c i2, rx2800 i2). OpenVMS software on all other Integrity servers is still licensed on a per-core basis."


It shows as a full CPU because it is... the threads are indistinguishable.

Any notion of primary or secondary is strictly by a naming convention.

 

The monitor process / topc showing 50% surprises me a little, it is not unreasonable, but I don't recall seeing that and do not find a hint in the documentation. You must be running 8.4 on that blade. Maybe it changed with that version? I could/should try later on.

 

Rather then always disabling HT at the firmware level, I recommend enabling it and use STOP /CPU to effecitivly disable it dynamically based on needs and experiences.

 

Regards,

Hein. 

 

Honored Contributor
John Gillings
Posts: 2,995
Registered: ‎07-31-2003
Message 3 of 6 (810 Views)

Re: Hyperthreading and VMS

Jeremy,

 

   If your test load is pure CPU, then I believe the 8x50% is correct. Remember that hyperthreading isn't like having an independent core, it's more like having multiple "resident" contexts which time share a core. There's still only 100% of a CPU available, but you can switch contexts much faster, so in an environment with multiple busy processes running workloads that include stalls, like I/O, or even non-cached memory accesses (the other hyperthread can execute while one is waiting for an L3 cache miss to be resolved), you may get a performance win.

 

  Run a test for which you can measure elapsed time for something specific. My understanding is for purely CPU bound tasks, you won't see any difference with hyperthreading enabled. Try something with some heavy I/O or memory use as well as CPU (maybe a SORT?) and you might see an improvement.

 

 Years ago I asked HP for guidance on what kinds of workloads would benefit, or how to measure behaviour which might indicate a potential benefit. The responses were mostly arm waving, suggesting that they really didn't have a clear idea. I suspect hyperthreading was something that must have been fairly easy to implement so it was a case of "why not? it will sound good in presentations" rather than based on hard evidence that anyone could really benefit from it (I believe it's disabled by default).

A crucible of informative mistakes
Trusted Contributor
Jeremy Begg
Posts: 383
Registered: ‎01-20-2005
Message 4 of 6 (805 Views)

Re: Hyperthreading and VMS

Thank you John and Hein, useful information.

 

I was looking for an API which might let me test if a system had hyperthreads enabled or not, and if it did, to identify which CPUs were cothreaded.  I didn't find one.  So what do SHOW CPU and SYS$TEST:HTHREAD.EXE do?

 

Thanks,

Jeremy Begg

Respected Contributor
Jur van der Burg
Posts: 198
Registered: ‎09-06-2006
Message 5 of 6 (792 Views)

Re: Hyperthreading and VMS

>So what do SHOW CPU and SYS$TEST:HTHREAD.EXE do?

 

they call exe$efi_get_variable from kernel mode to get CPUThreadControl, so effectively ther'e asking efi for the information. There's no supported api.

 

Jur.

 

Occasional Visitor
John Tedesco1
Posts: 2
Registered: ‎05-04-2003
Message 6 of 6 (544 Views)

Re: Hyperthreading and VMS

OpenVMS software is licensed on Integrity i2 Servers (with Tukwila processors and v8.4) on a Per Socket basis. That means that one processor is one license regardless of whether it's dual core, quad core, or has threads turned on. OpenVMS has never licensed by threads.

The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation.