9fans archive / 1996 / 01 / 22 /    prev next

From: G. David Butler gdb@dbS...
Subject: 8 1/2 windows can't be created
Date: Sat, 13 Jan 1996 02:36:55 -0500

I, "G. David Butler" <gdb@dbS...> mumbled:

>Has anybody else noticed that when using a 1280x1024x8 (i.e. large)
>vga screen, that you can't create two (or more) large overlapping
>windows?  The new one you try to create disappears after sweeping
>with either New or Resize.

Or even moving a large window.

>To try to find the culprit I did a direct mount to /srv/8.. and the
>mount fails with "no resources".  After increasing kernelpercent to
>50 I got it to open bigger windows, but increasing kernelpercent after
>that doesn't seem to help (I have 8meg in my PC terminal.)

>After looking in the source it seems that the problem may be with a
>fixed size array.  In /sys/src/libg/binit.c there is an array
>static uchar bbuf[8000] (and _btmp[8000]).  In other places it seems
>a malloc would have to fail, and I think there is enough memory.

Wrong.  This array is used to format messages to the bitblt driver.

>Before I start changing and rebuilding I thought I would ask if anyone
>has run into this and if this was the solution.

OK, I have this one tracked down.

If you are using a large screen, the bitmap code allocates arenas of
as large as 1,310,732 bytes and with only 8 meg of memory things are a
bit tight with a few of these.

The best balance for my configuration was to set kernelpercent=65 and
that allows for 3 arenas which allow me to create all the windows I need.
(Of course with only 196 pages of memory left for processes, a cpu
server is *very* handy.)

To determine the best mix for your machine (this is PC specific), use
the ^t^tb and ^t^tx keyboard strokes to get a dump of the bitmap
and kernel memory pools respectively.  What I did was get the bitmap
to allocate 3 arenas with about 150K in both the xalloc and malloc areas
remaining.  This is what gave me the kernelpercent at 65.

David Butler
gdb@dbS...