[Info-vax] Performance benchmarks, was: Re: VMS Software Inc. OpenVMS 8.4-1H1 Boots on i4 System
Jan-Erik Soderholm
jan-erik.soderholm at telia.com
Thu Mar 19 05:25:26 EDT 2015
David Froble skrev den 2015-03-19 06:51:
> Simon Clubley wrote:
>> On 2015-03-18, Michael Moroney <moroney at world.std.spaamtrap.com> wrote:
>>> "Robert A. Brooks" <FIRST.LAST at vmssoftware.com> writes:
>>>
>>>> I don't think there will be much interest by anyone at VSI in playing
>>>> around with anything related to the VAX in the near- or mid-term, as we
>>>> have enough stuff on our collective plates.
>>> I don't know. I entertained a few with a Raspberry Pi emulating a VAX
>>> 3900.
>>
>> Are there any currently accepted (and freely available) tools for
>> benchmarking the performance of VMS systems ? It would be interesting
>> to see relative performance both on physical hardware and emulated
>> hardware (such as the above as well as the various Alpha emulators).
>>
>> I'm not looking for something which is industrial strength, but rather
>> a tool to get a quick feeling for relative performance between various
>> hardware options.
>>
>> Thanks,
>>
>> Simon.
>>
>
> Ah, yes, I think we can dig up something ..
>
> :-)
>
> $! CALCULATE_VUPS:
> $!
> $ set noon
> $ orig_privs = f$setprv("ALTPRI")
> $ process_priority = f$getjpi(0,"PRIB")
> $ cpu_multiplier = 10 ! VAX = 10 - Alpha/AXP = 40
> $ cpu_round_add = 1 ! VAX = 1 - Alpha/AXP = 9
> $ cpu_round_divide = cpu_round_add + 1
> $ init_counter = cpu_multiplier * 525
> $ init_loop_maximum = 205
> $ start_cputime = f$getjpi(0,"CPUTIM")
> $ loop_index = 0
> $ 10$:
> $ loop_index = loop_index + 1
> $ if loop_index .ne. init_loop_maximum then goto 10$
> $ end_cputime = f$getjpi(0,"CPUTIM")
> $ init_vups = ((init_counter / (end_cputime - start_cputime) + -
> cpu_round_add) / cpu_round_divide) * cpu_round_divide
> $ loop_maximum = (init_vups * init_loop_maximum) / 10
> $ base_counter = (init_counter * init_vups) / 10
> $ vups = 0
> $ times_through_loop = 0
> $ 20$:
> $ start_cputime = f$getjpi(0,"CPUTIM")
> $ loop_index = 0
> $ 30$:
> $ loop_index = loop_index + 1
> $ if loop_index .ne. loop_maximum then goto 30$
> $ end_cputime = f$getjpi(0,"CPUTIM")
> $ new_vups = ((base_counter / (end_cputime - start_cputime) + -
> cpu_round_add) / cpu_round_divide) * cpu_round_divide
> $ if new_vups .eq. vups then goto 40$
> $ vups = new_vups
> $ times_through_loop = times_through_loop + 1
> $ if times_through_loop .le. 5 then goto 20$
> $ 40$:
> $ new_privs = f$setprv(orig_privs)
> $ set message /nofacility/noidentification/noseverity/notext
> $! ASSIGN/SYSTEM/EXEC 'vups' MACHINE_VUPS_RATING
> $ set message /facility/identification/severity/text
> $ write sys$output "Approximate System VUPs Rating : ", -
> vups / 10,".", vups - ((vups / 10) * 10)
> $ exit
Hm, I have a newer version that at startup says:
"INFO: Preventing endless loop (10$) on fast CPUs".
But your vesion above *does* work on my 1 GHz DS25 (which
shuld be a "fast CPU") but gives a very diffrent value
then the newer one I have:
$ @ calcvup.com ! Your version above
Approximate System VUPs Rating : 491.4
$ @CALCULATE_VUP.COM
INFO: Preventing endless loop (10$) on fast CPUs
Approximate System VUPs Rating : 2049.0 ( min: 2039.0 max: 2059.0 )
$
Weird but I guess that as long as one uses the same version on
different system the outcome could be usefull anyway.
Here is my version:
$! CALCULATE_VUPS
$! Use at your own risk.
$!
$ set noon
$ cpu_multiplier = 40 ! VAX = 10 - Alpha/AXP = 40
$ cpu_round_add = 9 ! VAX = - Alpha/AXP = 9
$ cpu_round_divide = cpu_round_add + 1
$ init_counter = cpu_multiplier * 525
$ speed_factor = 1 ! to increase no. of loops on fast CPUs
$ 9$:
$ init_loop_maximum = 205 * speed_factor
$ start_cputime = f$getjpi(0,"CPUTIM")
$ loop_index = 0
$ 10$:
$ loop_index = loop_index + 1
$ if loop_index .ne. init_loop_maximum then goto 10$
$ end_cputime = f$getjpi(0,"CPUTIM")
$ IF end_cputime .LE. start_cputime + 1 ! not enough clock-ticks = CPU too fast
$ THEN
$ speed_factor = speed_factor + 1 ! increase no. of loops
$ WRITE SYS$OUTPUT "INFO: Preventing endless loop (10$) on fast CPUs"
$ GOTO 9$
$ ENDIF
$ init_vups = ((init_counter / (end_cputime - start_cputime) + -
cpu_round_add) / cpu_round_divide) * cpu_round_divide
$ IF init_vups .LE. 0
$ THEN
$ WRITE SYS$OUTPUT "Calibration error -> exiting (Please report this problem)"
$ SHOW SYMB speed_factor
$ SHOW SYMB init_vups
$ SHOW SYMB init_counter
$ SHOW SYMB end_cputime
$ SHOW SYMB start_cputime
$ SHOW SYMB cpu_multiplier
$ SHOW SYMB cpu_rounding
$ SHOW CPU
$ EXIT
$ ENDIF
$ write sys$output " "
$ loop_maximum = (init_vups * init_loop_maximum) / ( 10 * speed_factor )
$ base_counter = (init_counter * init_vups) / 10
$ vups = 0
$ min_vups = %X7FFFFFFF
$ max_vups = 0
$ avg_vups = 0
$ times_through_loop = 0
$ 20$:
$ start_cputime = f$getjpi(0,"CPUTIM")
$ times_through_loop = times_through_loop + 1
$ loop_index = 0
$ 30$:
$ loop_index = loop_index + 1
$ if loop_index .ne. loop_maximum then goto 30$
$ end_cputime = f$getjpi(0,"CPUTIM")
$ IF end_cputime .LE. start_cputime
$ THEN
$ new_vups = 0 ! can not calculate VUPS (CPU too fast)
$ WRITE SYS$OUTPUT "INFO: Loop too fast (20$) - ignoring VUPS data"
$ ELSE
$ new_vups = ((base_counter / (end_cputime - start_cputime) + -
cpu_round_add) / cpu_round_divide) * cpu_round_divide
$ ENDIF
$ IF new_vups .LT. min_vups THEN $ min_vups = new_vups
$ IF new_vups .GT. max_vups THEN $ max_vups = new_vups
$ avg_vups = avg_vups + new_vups
$ if new_vups .eq. vups then goto 40$
$ vups = new_vups
$ if times_through_loop .le. 5 then goto 20$
$!! WRITE SYS$OUTPUT "INFO: Preventing endless loop 20$"
$ 40$:
$ vups = avg_vups / times_through_loop
$ write sys$output " Approximate System VUPs Rating : ", -
vups / 10,".", vups - ((vups / 10) * 10), -
" ( min: ", min_vups/10,".", min_vups - ((min_vups / 10) * 10), -
" max: ", max_vups/10,".", max_vups - ((max_vups / 10) * 10), " )"
$ exit
More information about the Info-vax
mailing list