First post, by davidrg

User metadata
Rank Member

Recently I saw some posts here on optimizing conventional memory. Somehow in my 20 years of playing around with vintage computers and DOS I don't think I'd ever used memmaker or even run the mem command. Surely that can't be right. Maybe I've just forgotten - I've not really used DOS much in the last few years. Seems like new information to me now though and thats good enough.

As I've been playing with NetWare a whole bunch lately I decided to use my new found seeing where all my conventional memory went powers to see just how badly the NetWare client gets in the way of doing useful work like playing Commander Keen. Given the thing has a network card driver, IPX/SPX stack, TCP/IP stack, DHCP client, thing that responds to PINGs plus all the stuff for mapping network drives and who knows what else it must take quite a lot right? I mean Microsofts Lanman/SMB client that does all of the above is kind of notorious for eating all your conventional memory.

So here is mem /c on a VirtualBox VM running a clean install of MS-DOS 6.22. No setver or smartdrv. Memmaker added emm386 noems. Client 32 is the NetWare client:

Modules using memory below 1 MB:

Name Total = Conventional + Upper Memory
-------- ---------------- ---------------- ----------------
MSDOS 16,717 (16K) 16,717 (16K) 0 (0K)
HIMEM 1,120 (1K) 1,120 (1K) 0 (0K)
EMM386 4,144 (4K) 4,144 (4K) 0 (0K)
COMMAND 2,928 (3K) 2,928 (3K) 0 (0K)
Client32 3,280 (3K) 0 (0K) 3,280 (3K)
Free 724,176 (707K) 630,336 (616K) 93,840 (92K)

Memory Summary:

Type of Memory Total = Used + Free
---------------- ---------- ---------- ----------
Conventional 655,360 25,024 630,336
Upper 97,120 3,280 93,840
Reserved 393,216 393,216 0
Extended (XMS) 32,408,736 17,335,456 15,073,280
---------------- ---------- ---------- ----------
Total memory 33,554,432 17,756,976 15,797,456

Total under 1 MB 752,480 28,304 724,176

Largest executable program size 630,240 (615K)
Largest free upper memory block 93,840 (92K)
MS-DOS is resident in the high memory area.

The whole network client is using 3KB of upper memory and that's it - 0KB of conventional memory. Well, its also using half the extended memory (for cache apparently - you can tell it to be more reasonable and grab a smaller share in its config file). But the important thing is I've got proper network drives without using conventional memory! At least on a 386 or better with DOS 5.0+ - the older clients (VLM and NETX) that are compatible with older versions of DOS and older processors (down to DOS 3.2 on an 8088) do use conventional memory though still not anywhere near as much as the Microsoft SMB client.

As for the Microsoft SMB client - I gave that a go too out of curiosity. Installed it with TCP/IP and the full redirector and it left only 442K free conventional memory. I guess their answer at the time was probably "use windows" but still, 615K vs 442K free. Clearly someone didn't put as much effort in. Me - surely Microsofts client can't be that bad. Surely. But even still out of the box with no special configuration (aside from loading emm386) the NetWare client automatically used nothing.

I'm sure none of this is news to anyone else using NetWare (if anyone is) - I just found it kind of incredible that the NetWare client uses so little (and that the Microsoft client uses so much). DOS networking with no conventional memory consequences (assuming you were going to run emm386 for something else anyway). Shame there isn't a samba equivalent for NetWare that doesn't require running an old Linux kernel.

Reply 1 of 6, by Caluser2000

User metadata
Rank l33t

I ran memmaker first then tweaked the system if needed. It usually gave me around 615k of free conventional memory quite effortlessly.

There's a glitch in the matrix.
A founding member of the 286 appreciation society.
Apparently 32-bit is dead and nobody likes P4s.
Of course, as always, I'm open to correction...😉

Reply 4 of 6, by davidrg

User metadata
Rank Member

Without loading emm386.exe the client won't automatically load high and so uses around 4KB of conventional memory (mem /c output, module is NIOS). Total free conventional memory is unchanged but it is 4KB lower than if I wasn't running the network client or emm386 at all. I think usually I'd have emm386 loaded anyway whether the machine is on the network or not so I've not counted it usage. I've not tried Client32 without himem until now but as expected it refuses to run - just gives an error saying an XMS memory manager must be installed.

There is nothing weird going on here - turns out Novell just put effort into reducing their conventional memory footprint to as small as possible and instead put everything they can in extended memory with I think fairly impressive results. They talk about it briefly on this page discussing the clients architecture:

The tradeoff, of course, is that less extended memory is left when you run the NetWare Client 32 for DOS/Windows. Our multimedia workstation came with 20MB of memory, of which almost 6MB was allocated to SmartDrive and Client 32, leaving 14MB for Windows programs. On a workstation with less memory installed, the amount of extended memory taken by Client32 can become an issue. However, Novell chose this architecture because you can add more extended memory to a machine (by adding RAM), but you cannot increase the 640KB conventional memory limitation for DOS.

I think I've read before somewhere you really want at least 8-16MB of RAM to run the 32bit NetWare client though 4MB is the minimum.

The older 16bit VLM client (released with NetWare 3.12 and 4.0, requires DOS 3.1+ and a 286 or better, required for network booting) uses 59KB of conventional memory by default on the same VM (EMM386 and HIMEM present) without the TCP/IP stack but you can load most if it high giving you around 602K of free conventional memory. If you're willing to sacrifice some performance and features you can strip it down to the bare minimum and its conventional memory footprint gets close to that of the newer 32bit client.

The even older NETX client (came with all NetWare versions prior to 3.12/4.0, requires DOS 3.0+ and an 8086/8088 CPU or better) uses around 47KB of conventional memory if you can load the network layer (ODI driver, LSL.COM, IPXODI.COM) high or if you can't then around 76K of RAM all up for the final version (depending on network driver of course - some may use more or less). I tried it out on DOS 3.2 on an emulated 8088 with 256K RAM and it works mostly fine - I can attach to a NetWare 3.12 server, login, the login script runs , drives get mapped and I can read and write files over the network. Less than 256K RAM and there isn't enough to login. The NetWare 4.11 login program also doesn't work in this configuration but I didn't look closely into why - maybe it doesn't like an 8088 or maybe it needs more free conventional memory than is available on a 256K machine. There are apparently variants of this client that support DOS 1.x and 2.x but I've not seen them - possibly their memory requirements are lower.

Of course for all of this to do anything useful you need a NetWare server on the network which does sacrifice some convenience - Windows XP is the last release that can connect to NetWare 4 and older due to the IPX requirement. There are Netware server packages for Linux (Mars_NWE and Linware) but as these also require IPX you're limited to running old versions of the linux or BSD (apparently Mars_NWE works with kernel 4.14 on a Pi - video). I expect these could be reworked to use a userspace IPX stack and pcap if someone with the necessary skills felt like tackling it. Later clients support tunneling IPX over UDP (NetWare/IP) which could be a solution too. But its probably all too obscure and demand for network drives on DOS PCs too low for anyone to tackle it.

Right now I've just got a virtualised NetWare 4.11 instance for DOS (and OS/2 and classic Mac) stuff to connect to. To get files between the NetWare server and my Windows 10 machine I use either FTP or a VM running NT4 as a go-between.