- "Kevin P. Lawton" <[EMAIL PROTECTED]>: Mon Jun 4 17:03:44 EDT 2001
Changes to host-linux.c, thanks to suggestions from Jeff Garzik.
Moved plex86 proc entry to /proc/driver, where it should be.
Moved assignment of file_operations to declaration statement
and used field labels (GCC specific).
Elminated use of MOD_{DEC,INC}_USE_COUNT for kernel 2.4, and set
file_operations::owner to THIS_MODULE instead. This eliminates
a race between the time dev->release is called and module
unload is initiated on another CPU.
Used {>>,<<} instead of {/,*} where possible for page size oriented
calculations, in case the compiler doesn't optimize this for us.
Manage a set of virtualized descriptors in the monitor GDT, one for
each guest descriptor, and use those directly for native memory
accesses in the emulation, rather than always loading a new
GDT entry for each access. Things can be optimized further.
TODO next:
Fix error on first invocation of plex86.
Move some critical IO device emulation to VM monitor space for
performance. Mostly, the PIT/PIC and the hardware component
of the VGA emulation. JFYI, here's some instrumentation data
I gathered from a Win95 boot in plex86. I quote the number of
VM to user space requests necessary. The MemMapIOW is due to
writes to the VGA memory (latched planar mode sucks). TimeElapsed
is mostly due to time delivery events to the PIT. IOOut in
large part due to PIC EOI and etc. If I move PIT/PIC/VGA
into the VM, these will disappear. These redirects are expensive,
so I expect to see performance increase nicely without them!
The GUI component of the VGA emulation will stay in user space,
of course.
872068 MemMapIOWriteRequest
800406 TimeElapsed
324176 IOOutRequest
283248 MemMapIOReadRequest
153986 IOInRequest
10449 IOInBatchRequest
4029 IACRequest
78 PrintBuf
-Kevin
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Kevin Lawton [EMAIL PROTECTED]
MandrakeSoft, Inc. Plex86 developer
http://www.linux-mandrake.com/ http://www.plex86.org/