• Andrew Hodgkinson's avatar
    File heap moved to private dynamic area; much more efficient UpCall generation. · 2dae69a3
    Andrew Hodgkinson authored
    Detail:
      Use of the RMA by PipeFS could lead to fragmentation, and is slower
      than a private dynamic area as the RMA's a very busy heap. The new
      dynamic area is set to 16MB maximum size, called "PipeFS", and the
      code is compile-time switched, not run-time.
    
      PipeFS has no block handling code so its get/put byte routines are
      called by the OS in a tight loop. Unfortunately for each byte it
      reads/writes it issues UpCall_ModifyingFile, and moreover does this
      without specifying a filename, so *all* directories are rescanned -
      for every single byte read or written to PipeFS. This is why PipeFS
      is so extremely slow prior to this version. Now, a callback is set,
      and the UpCall only issued when this goes off - after any block
      transfers, for example. A typical effect is a 171K file save from a
      text editor to PipeFS used to take around 20 seconds, and now takes
      less than a quarter of a second. Streaming data through PipeFS is
      now a sensible option.
    
      There are two variants of the callback code; one maintans an array
      of filename pointers and goes through the list each time the call-
      back fires; the other just issues a general UpCall each time. The
      first one should work OK, and is there in case anyone ever works
      out how to use R1 properly for the UpCall.
    Admin:
      Copied files into PipeFS up to the DA limit and verified sensible
      behaviour at this point; memory released as expected on file
      removal; files appear to be intact; MP3 streaming at 128kbps from
      network or disc through PipeFS is reliable; Filer window behaviour
      with "full info" on and Task Manager display of dynamic area size
      act as expected.
    
      By default, the compile-time options mean the module will only run on
      RISC OS 3.5 or later. Tested on RISC OS 3.70 only.
    
    Version 0.19. Tagged as 'PipeFS-0_19'
    2dae69a3
VersionNum 761 Bytes