06-21-2012 07:48 PM
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:
CPU state sets:
Powered Down None
Not Present None
Hard Excluded 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
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.)
06-22-2012 05:36 AM
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
"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.
06-24-2012 09:37 PM
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).
06-24-2012 09:48 PM
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?
06-25-2012 12:16 AM
>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.
09-10-2012 07:01 AM
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.