On Jul 29, 1:17 am, [EMAIL PROTECTED] (Jeremy Begg) wrote:
> Hi,
>
> FWIW I ran this test on my AlphaStation 255/300 with VMS 7.3-2 and Perl 5.8.7
Ah... I received this Email today from Jeremy but did not recognize it
came through this group, so I replied just to him.
This appears to be fixed in perl 5.10.
On 5.8-6 the extra elapsed time is burned strictly in usermode cpu
time (in DECCRTL)
-------------------- 5.8 ----
$ perl -v
This is perl, v5.8.6 built for VMS_AXP
$ show cpu
System: HEINA, AlphaServer DS10 600 MHz
$ @time perl tmp.pl
zerobuffer: 8192
REC #100 geschrieben
REC #200 geschrieben
REC #300 geschrieben
REC #400 geschrieben
REC #500 geschrieben
Dirio= 91 Bufio= 66 Kernel= 2 Exec= 1 User=581 Elapsed= 647
$ edit/edt tmp.pl
*s/0/32
:
Dirio= 88 Bufio= 66 Kernel= 7 Exec= 1 User= 1 Elapsed= 89
-------------------- 5.10 ----
$ show cpu
System: EISNER, AlphaServer DS20 500 MHz
$ perl -v
This is perl, v5.10.0 built for VMS_AXP
-0-
Dirio= 137 Bufio= 64 Kernel= 10 Exec= 4 User= 2 Elapsed= 112
-32-
Dirio= 94 Bufio= 60 Kernel= 4 Exec= 3 User= 5 Elapsed= 111
This was in an uncrontrolled environment.
RMS tuning will influence the absolute results. ome IO and CPU
variants can be avoided by always deleting the output file before re-
running to get a similar file type and allocation pattern. The DECC
RTL will create a file with attributes from a prior file, unless told
otherwise (logical name).
This will influence inter-system tests.
The excess time is all burned in the C-rtl called by perlshr, for a
strlen, or a scan for terminator, one guesses.
SDA> pcs show trace /stat
PC IPL Pid Count Routine
----------------- --- -------- ------------
-------------------------------- ------
80B66F38 0 20200268 40 DECC$SHR_EV56+CEF38
80B648A8 0 20200268 35 DECC$SHR_EV56+CC8A8
80B64894 0 20200268 32 DECC$SHR_EV56+CC894
80B66BC8 0 20200268 20 DECC$SHR_EV56+CEBC8
80B68200 0 20200268 17 DECC$SHR_EV56+D0200
80B67BD8 0 20200268 16 DECC$SHR_EV56+CFBD8
80B6819C 0 20200268 14 DECC$SHR_EV56+D019C
80B670AC 0 20200268 14 DECC$SHR_EV56+CF0AC
The little DCL script I used to measure...
---- time.com ----
$! All times in Hundreds of a second. Hein van den Heuvel
$ old_krnltim = F$GETJPI ("","KRNLTIM")
$ old_exectim = F$GETJPI ("","EXECTIM")
$ old_usertim = F$GETJPI ("","USERTIM")
$ old_dirio = F$GETJPI ("","DIRIO")
$ old_bufio = F$GETJPI ("","BUFIO")
$ old_time = F$TIME()
$!
$! Run the test
$!
$ 'p1 'p2 'p3 'p4 'p5 'p6 'p7
$!
$! Save the end time
$!
$! end_cputim = F$GETJPI ("","CPUTIM")
$ end_krnltim = F$GETJPI ("","KRNLTIM")
$ end_exectim = F$GETJPI ("","EXECTIM")
$ end_usertim = F$GETJPI ("","USERTIM")
$ end_dirio = F$GETJPI ("","DIRIO")
$ end_bufio = F$GETJPI ("","BUFIO")
$ end_time = F$TIME()
$
$ elapsed = 100*(f$cvtime(end_time,,"SECONDOFYEAR") - f
$cvtime(old_time,,"SECONDOFYEAR"))
$ elapsed = elapsed + f$cvtime(end_time,,"HUNDREDTH") - f
$cvtime(old_time,,"HUNDREDTH")
$
$ WRITE sys$output -
f$fao ( "Dirio=!6UL Bufio=!6UL Kernel=!3UL Exec=!3UL
User=!3UL Elapsed=!6UL ", -
end_dirio - old_dirio, end_bufio - old_bufio, -
end_krnltim - old_krnltim, end_exectim -
old_exectim,end_usertim - old_usertim, elapsed )
$exit
Hope this helps.
Hein.