Number: 1862

Date: 15-Aug-84 16':04':56

Submitter: Sannella.PA

Source: Sannella.PA

Subject: Document when/how to allocate aligned buffers

Lisp Version: 14-Aug-84 22':01':47

Description: '
Date': 23 Jul 84 19':16 PDT'
From': stansbury.pa'
Subject': Re': one cause of arrays full'
In-reply-to': Masinter.pa''s message of 23 Jul 84 17':58 PDT'
To': Lichtenberg.wbst, vanMelle.pa'
cc': stansbury.pa, Masinter.pa, Lispsupport.pa'
'
The bug in allocblock which Larry found has made me rethink page allocation in the file system.'
'
I currently use page-aligned blocks of array space.  The pages must be aligned because the low-level routines which transfer pages to and from the disk assume that the buffer they are handed is page aligned.  I use array space rather than vmempagep''s because I have to keep pointers to the middle of these things, and the dlion gc microcode and macrocode disagree on vmempagep collection just enough to cause occasional crashes with big refcount missing.'
'
Unfortunately, using aligned chunks of array space is quite wasteful because array blocks each have 2 words leader and 2 words tail.  So allocating a succession of page-long aligned array blocks leaves a succession of 124-word unused and unmergeable blocks behind.'
'
The file system currently uses between 25 and 100 such pages.  Of these, about 25 are permanent and the rest have a reasonably high turnover rate.'
'
Question 1 (Mitch)':  Do the buffers I hand to low-level disk transfer routines REALLY have to be page-aligned?  Could those routines be rewritten so that buffers could be non-aligned?'
'
Question 2 (Bill & Larry)':  Could the gc problems with vmempagep''s be fixed?'
'
Need to know soon, because I''m trying to close the Klamath file system....'
'
-- Tayloe.'
'
-----'
'
Date': 23 Jul 84 23':44 PDT'
From': JonL.pa'
Subject': Re': one cause of arrays full'
In-reply-to': stansbury.pa''s message of 23 Jul 84 19':16 PDT'
To': stansbury.pa'
cc': Lichtenberg.wbst, vanMelle.pa, Masinter.pa, Lispsupport.pa'
'
Those pages with 124 cells on them, preceeding one of your page-aligned arrayblocks, don''t necessarily fall into the "unusable space" quagmire -- it would be interesting to see a STORAGE printout, with the newly-announced STORAGE function, before worrying too much about the load that the DLion FS puts on array space.'
'
One the otherhand, if you really don''t need page-alignment, or of VMEMPAGEPs will do . . .'
'
-- JonL --'
'
-----'
'
Date': 24 Jul 84 08':22':09 PDT (Tuesday)'
From': Lichtenberg.WBST'
Subject': Re': one cause of arrays full'
In-reply-to': stansbury.pa''s message of 23 Jul 84 19':16 PDT'
To': stansbury.pa'
cc': Lichtenberg, vanMelle.pa, Masinter.pa, Lispsupport.pa'
'
'
It is not feasible to pass non-aligned buffers to the disk microcode.  After looking through the microcode (both Trident and Shugart), I have determined that it is not possible to transfer across page boundaries.  The page MUST, then, be aligned.  If worst came to worst (this would hurt performance), allocate ONE buffer and \BLT in and out of it as your page-read/write routine.  Granted, it is awkward (and slow) but it will do the job.'
'
Also, if you keep pointers to the VMEMPAGEPs themselves, won''t they be kept from being collected?  Then, you could drop the pointer when you''re through with it and it would go away in peace... or something like that.'
'
'
/Mitch.'


Workaround: 

Test Case: 

Edit-By: 

Edit-Date: 15-Aug-84 16':04':56

Attn: Lisp

Assigned To: 

In/By: 

Disposition: 

System: Operating System

Subsystem: Virtual Memory

Machine: 1108

Disk: 

Microcode Version: 5124

Memory Size: 3071

File Server: 

Server Software Version: 

Difficulty: 

Frequency: 

Impact: Moderate

Priority: Perhaps

Status: Open

Problem Type: Documentation

Source Files: