1748175 Members
4135 Online
108758 Solutions
New Discussion юеВ

Re: DST Time Drift

 
SOLVED
Go to solution
John Gillings
Honored Contributor

Re: DST Time Drift

>I thought the CPU dependent value
>was EXE$GL_TICKLENGTH

See section 12.6 of the IDSM "INTERVAL TIMER INTERRUPT SERVICE ROUTINE".

EXE$GL_SYSTICK should be constant, dependent on the hardware (I thought all Alphas were supposed to be the same, but obviously not since Gregg is seeing a different value).

EXE$GL_TICKLENGTH is initially set from EXE$GL_SYSTICK, but may be varied dynamically in order to drift the clock back or forwards to synch with external time standards.
A crucible of informative mistakes
Jon Pinkley
Honored Contributor

Re: DST Time Drift

Peter,

If you are going to run this on more than a single model of the Alpha, you can't safely use a single value, as we are now aware of at least 3 different frequencies. 1024, 1200, and 974.

I would suggest you get the TBO V2.0 kit from VMS freeware 6. On Alpha AXP it computes the values based on SYSTICK and the frequency from the hwrpb. Here are some of the comments from the top of the included TBO.MAR source file.

It won't work as is on an IA64, but it could probably be retrofitted easier than starting from scratch.

; VAX has a 10millisecond clock (a tick). ALPHA has an interval timer that
; is determined by the value in the hardware restart parameter block (HWRPB)
; at offset HWRPB$IQ_CLOCK_INT_FREQ. This value will minimally be 1000 and
; and initially all ALPHA systems will generate 1024 interupts (ticks) per
; second.
;
; Note that we'll use the following:
; VAX & ALPHA:
; EXE$GL_SYSTICK - standard clock tick length
; EXE$GL_TICKLENGTH - increment added to clock at each hardware clock interrupt
; EXE$GL_TIMEADJUST - number of ticks to apply EXE$GL_TICKLENGTH
; ALPHA:
; EXE$GPL_HWRPB_L - hardware restart parameter block
; HWRPB$IL_CLOCK_FREQ_L - offset to clock interrupt frequency

NOTE: the comments have a typo, where is says HWRPB$IL_CLOCK_FREQ_L it should be HWRPB$IL_CLOCK_INT_FREQ_L

Just a note: The ES47 doesn't follow the Alpha architectural spec with respect to the minimum hwclock interrupt frequency. The manual states "minimum of 1000 times per second", the ES47 (at least ours) is 974 Hz.

$ write sys$output f$getsyi("HW_NAME")
hp AlphaServer ES47 7/1150
$
$ analyze/sys

OpenVMS (TM) system analyzer

SDA> read sys$loadable_images:sysdef
%SDA-I-READSYM, 10724 symbols read from SYS$COMMON:[SYS$LDR]SYSDEF.STB;1
SDA> eval @(@EXE$GPL_HWRPB_L+HWRPB$IL_CLOCK_INT_FREQ_L)/1000 ! scaled by 4096 decimal
Hex = 00000000.000003CE Decimal = 974 UCB$L_PI_TGT_SCRIPT+00002
SDA> Exit
$

And for comparison, on an ES40

OT$ write sys$output f$getsyi("HW_NAME")
AlphaServer ES40
OT$ analyze/system

OpenVMS (TM) system analyzer

SDA> read sys$loadable_images:sysdef
%SDA-I-READSYM, 10724 symbols read from SYS$COMMON:[SYS$LDR]SYSDEF.STB;1
SDA> eval @(@EXE$GPL_HWRPB_L+HWRPB$IL_CLOCK_INT_FREQ_L)/1000 ! scaled by 4096 decimal
Hex = 00000000.00000400 Decimal = 1024 ACB$M_NODUP
BUG$_UNEXPIOINT
CHPCTL$M_INTERNAL
CPU$C_MAX_CBB_CPUS
CPU$M_VIRTCONS
|
(remaining symbols suppressed by default)
SDA> Exit
OT$

Jon
it depends
Peter Zeiszler
Trusted Contributor

Re: DST Time Drift

Keeping this thread as a reference until I get approval/authorization to get this drift working on Itanium too.