kategoria: ARexx
[#1] Zagadka długiego czasu wykonywania skryptu ARexx
Taka oto sytuacja:
  • Zrzuty ekranu
  • mam skrypt ARexx, który uruchamiany jest w Startup-Sequence przed "LOADWB"
  • podczas uruchamiania nie działają w tle inne procesy (nic wcześniej nie jest odpalone poleceniem RUN)
  • pierwsze uruchomienie skryptu wykonuje się ok. 30 sek.
  • kolejne uruchomienia to ok 2-3 sek.
  • prewencyjnie dodałem bufory do dysku SYS: - nic to nie pomaga
  • po odpaleniu w trybie awaryjnym (AmigaOS 3.2.3), po odpaleniu RexxMast, skrypt odpala się ok. 2-3 sek. (pierwsze odpalenia)


Sprawdzam jak na słabszych konfiguracjach moje wynalazki sprawują się.
Odpalane jest na WinUAE bez JIT. CPU ustawiony jest na prędkość coś ok. Furii 020 na A600.
Normalnie to się uruchamia w mgnieniu oka (nawet bez JIT ale CPU na fullspeed).
Z JIT czasy są odpowiednio 0.16 i 0.04 więc różnica jest też spora (jednak niezauważalna).

Podobny skrypt w AmigaDOS (tylko polecenie VERSION) uruchamia się nieporównywalnie szybciej.

Startup-Sequence (bez wyłączeń - to jest pełna wersja; działa tak samo jak ta z testów na zrzutach)
; $VER: Startup-Sequence_HardDrive 47.25 (10.2.2025)
; Startup-Sequence for hard drive systems

If EXISTS S:Pre-LoadModule-Startup
  Execute S:Pre-LoadModule-Startup
EndIf

;------------------- ROM CheckInstall Section ------------------------

Version exec.library version 48 >NIL:
If Warn
  Version exec.library version 47 >NIL:
  If Warn
    LoadModule L:System-Startup ROMUPDATE
  Else
    Version strap version 47 >NIL:
    If Warn
      LoadModule DOWNGRADE L:Ram-Handler L:Shell-Seg L:System-Startup Libs:dos.library Libs:gadtools.library Libs:graphics.library Libs:intuition.library Libs:Modules/bootmenu >NIL:
    Else
      Version exec.library revision 9 >NIL:
      If Warn
        LoadModule DOWNGRADE L:Ram-Handler L:System-Startup Libs:intuition.library Libs:Modules/bootmenu >NIL:
      EndIf
      Version exec.library revision 11 >NIL:
      If Warn
        LoadModule DOWNGRADE L:Ram-Handler L:System-Startup Libs:intuition.library Libs:Modules/bootmenu >NIL:
      EndIf
    EndIf
  EndIf
EndIf

Version ram-handler 47 >NIL:
If Warn
    C:RequestChoice "WARNING!" "Required V47+ ROM modules not found.*NPlease check installation or try a cold reboot." "OK" >NIL:
    QUIT
EndIf

SetPatch >NIL:

;------------------- CPU CheckInstall Section ------------------------

FailAt 31
CPU CHECKINSTALL

SET temp1 $RC

If VAL $temp1 EQ 30
  ECHO ""
  ASK "Press the RETURN key to resume booting into a restricted system."
  Execute S:Startup-failsafe
  QUIT
EndIf

If VAL $temp1 EQ 5
  ECHO ""
  ASK "Press the RETURN key to resume booting."
EndIf

UNSET temp1

;---------------- End of CPU CheckInstall Section --------------------

FailAt 10
Version >NIL:

AddBuffers SYS: 100 >NIL:
Assign >nil: EXISTS DF0:
If not warn
  AddBuffers DF0: 15 >NIL:
EndIf

If EXISTS ENVARC:
   MakeLink RAM:ENV to ENVARC: FORCE
Else
   MakeDir RAM:ENV
EndIf
MakeDir RAM:T RAM:Clipboards

Resident C:Assign PURE

Assign ENV: RAM:ENV
Assign T: RAM:T
Assign CLIPS: RAM:Clipboards
Assign REXX: S:ARexx
Assign S: S:Shell ADD

FailAt 21
Assign PRINTERS: DEVS:Printers
Assign KEYMAPS: DEVS:Keymaps
Assign LOCALE: SYS:Locale
Assign LIBS: SYS:Classes ADD
Assign HELP: LOCALE:Help DEFER

IF EXISTS S:Stage1
  LIST >NIL: S:Stage1/~(#?.info) TO t:S1 LFORMAT "S:Stage1/%s"
  SORT T:S1 TO T:S1
  EXECUTE T:S1
  DELETE >NIL: T:S1
ENDIF
BindDrivers
Mount DEVS:DOSDrivers/~(#?.info)

LoadMonDrvs >NIL:

FailAt 10
SetEnv Language "english"
SetEnv Workbench $Workbench
SetEnv Kickstart $Kickstart
UnSet Workbench
UnSet Kickstart

AddDataTypes REFRESH QUIET
IPrefs
ConClip

If EXISTS SYS:System/RexxMast
  SYS:System/RexxMast >NIL:
EndIf

Path C: S:Shell S:ARexx SYS:Utilities SYS:Rexxc SYS:System S: SYS:Prefs SYS:Tools SYS:Tools/Commodities

MakeLink RAM:Disk.info TO ENVARC:Sys/def_RAM.info SOFT

IF EXISTS S:User-Startup
  Execute S:User-Startup
EndIF

ECHO noline "[loadwb] "
ECHO "*nWBStartup:"
LIST SYS:WBStartup/ SORT="n" PAT="#?.info" LFORMAT="  %s"
LoadWB DELAY CLEANUP ;SIMPLEGELS

ECHO noline "[automenu] "
RX REXX:AutoMenu.rexx
RX REXX:WinSR.rexx RESTORE

ECHO ""
UPTIME
IF $USWAIT EQ 0
  Ask "*n*nWait for ENTER key..."
ELSE
  WAIT $USWAIT
ENDIF

EndCLI >NIL:


Skrypt ARexx:
/* verlib.rexx */
call time('r')

lib.1 = "exec.library"
lib.2 = "workbench.library"
lib.3 = "intuition.library"
lib.4 = "icon.library"
lib.5 = "layers.library"
lib.6 = "datatypes.library"
lib.7 = "SYS:Classes/DataTypes/picture.datatype"
lib.8 = "SYS:Classes/DataTypes/amigaguide.datatype"
lib.9 = "SYS:Classes/DataTypes/icon.datatype"
lib.10 = "scsi.device"
lib.11 = "L:fastfilesystem"

clipid = 'verlib'||PRAGMA('ID')
szer = 20

DO i=1 TO 11
  ADDRESS command "rxset "||clipid||" `version "||lib.i||"`"
  v = getclip(clipid)
  l = lib.i
  IF(lastpos('/',l)>0) THEN DO
    l=substr(l,lastpos('/',l)+1)
  END
  IF(lastpos(':',l)>0) THEN DO
    l=substr(l,lastpos(':',l)+1)
  END
  SAY " "||right(l,szer)||"  "||word(v,2)
END

say "Execution time: "||time('e')||"sec."


Ostatnia aktualizacja: 04.08.2025 16:14:20 przez mailman
[#2] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@radekcz, post #1

To niekoniecznie musi byc problem ze skryptem Arexx-a.
U mnie raz sie emulowana Amiga 600 uruchamia w miare szybko, a raz bardzo dlugo.
Ja sobie ustawilem 68000 7 Mhz, od razu zauwazysz roznice wtedy.
Takie testy jak chcesz robic to tylko na prawdziwej Amidze.
Emulator to tylko emulator i ma swoje bledy, do tego wszelkie ustawienia dla HD moga robic roznice.
Typu aktywacja ROM-u AROS-a do obslugi partycji jako HD.
No i pierwsze uruchomienie Amigi jest zwykle zawsze wolniejsze chocby przez SetPatch, LoadModule czy mmu.library jak ktos uzywa.
1
[#3] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@Don_Adan, post #2

Typu aktywacja ROM-u AROS-a do obslugi partycji jako HD.

A co ma Aros do emulowania HDD jeśli używa się kickstartu z Amigi ?

Tu chodzi o czas działania skryptu , a nie całego s-s
[#4] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@radekcz, post #1

pierwsze uruchomienie skryptu wykonuje się ok. 30 sek.
kolejne uruchomienia to ok 2-3 sek.


a czy nie jest tak, że za 1 razem wszystko musi być odczytane z dysku i potem siedzi już to rezydentalnie w systemie? a to trochę trwa.
a następnym razem już czyta to z pamięci ?

przed odpaleniem skryptu, spr np w sysinfo czy i jakie np biblioteki są "widoczne"
a potem spr (w np sysinfo), po odpaleniu skryptu, czy są one załadowane
i będzie wszystko jasne :)
1
[#5] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@Cezarykl, post #4

Zauważ, że nie ma znaczenia zabuforowanie plików. Robiłem test odpalając w trybie Failsafe (wiele rzeczy wycięte z ss) i odpalało się za pierwszym razem wilokrotnie szybciej... hmmm może to wina iPrefs - w Failsafe nie są ładowane preferencje.

...no tak - miałem na tapetę ustawiony plik PNG o rozmiarze ok. 500KB Teraz już rozumię - iPrefs nie blokuje procesu - mieli w tle. Wywaliłem tło i leci szybko. Jak jest JIT włączony to pokazuje 0.0 sek.

Pytanie się nasuwa - czy można zwiększyć jakoś priorytet dla skryptów ARexx? Wiem, że jest coś takiego jak Executice i przy pomocy tego da się ale obawiam się o stabilność takiego rozwiązania.

Ostatnia aktualizacja: 04.08.2025 17:45:37 przez radekcz
1
[#6] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@radekcz, post #5

Przekonwertowałem tapetkę na format ILBM i jest OK. Zapomniałem już, że wczytywanie takich skompresowanych grafik to morderstwo dla Amigi z czymś słabszym od 68040. W miarę to jeszcze szło na Blizzard IV - 030 50Mhz... ale szału nie było.
[#7] Re: Zagatka długiego czasu wykonywania skryptu ARexx

@radekcz, post #6

Było to tak:
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem