[ANNOUNCE]NWFS 2.4 Driver and Tools Source Code Released

From: Jeff V. Merkey (jmerkey@timpanogas.com)
Date: Fri Jul 21 2000 - 19:46:37 EST


An interim release of NWFS 2.4 (NWFS0721) is available for download at
207.109.151.240 and www.timpanogas.com. This is an interim release
version. The page cache support for 2.4 is being reworked for
performance reasons (and to address new bugs introduced by all the VM
changes of late), so this release has it disabled until the next post on
Monday, July 24, 2000. The name hashes are also being reworked to
support volume repair during mounting. The source code for the tools is
also being released as of this version for MSDOS, Linux, and Windows
NT/2000, less the imaging tools and ncurses tools for imaging. The name
hashes are being reworked to reduce the memory footprint of volumes with
multiple namespaces.

All previously reported bugs have been closed and regressed including
the MKISOFS, posix and readdir() bugs, and LRU deadlock problems.
Another release will follow next week with page cache and auto-repair
enabled (and the hard link issue raised by Andi at Suse), and diff files
for 2.2.X and 2.4.X code trees. There is a bug in 2.4.0 with symlinks
when you try to delete them with this version, you get an opps at line
187 in filemap.c. Next post of NWFS will be Monday July 24, 2000.

The tools source code is released under the GPL. MANOS is also
available under the GPL at 207.109.151.240.

Jeff Merkey
CEO, TRG

NWFS 2.2.4 RELEASE NOTES
------------------------

NWFS is a work in progress. TRG will continue to develop enhancements
and new features to NWFS in the future. You are encouraged to report
bugs or requests for feature enhancements to info@timpanogas.com

This release supports Linux Kernels 2.0 and 2.2 and 2.4. NWFS 2.4.0
source code can be downloaded from www.timpanogas.com or FTP at
207.109.151.240.

ENHANCEMENTS
-------------

We have increased the number of disks on Linux from 32 to 325, and have
implemented support for 128 SCSI disks, 128 I2O disks, /dev/mdXX RAID,
10 IDE controllers, Parallel Port ATA IDE Disks, and ESDI devices. The
NWFS Tools available at www.timpanogas.com have also been updated with
this additional disk support. Anyone who has already purchased tools
will be getting an update over the internet with these extended
capabilities.

We have implemented fsync, and remount capability. NWFS 2.2.4 also
will allow a single NetWare volume to be mounted on several mount
points at one time.

We have implemented variable blocksize for NWFS. Previous versions
were hard coded to a 512-byte sector size. NWFS will now use 512,
1024, 2048, and 4096-byte blocks. LOGICAL_BLOCK_SIZE in GLOBALS.H
is the variable to modify when configuring this.

The Asynch IO manager now has implemented a double hash for faster
io insertion performance. insertion hits average 96% efficiency
for locating the insertion point in a single probe (1) in the double hash
with the remaining 4% of cases locating the correct insertion point in a
single probe (1) on a list with only one other element (both cases are
under a 1 probe operation with this implementation). This was tested
with a block bufer LRU with 6000 blocks.

Since on 2.4, the page cache does the I/O for file systems, the LRU block
cache in NWFS no longer needs to cache data blocks for file system I/O, just
directory and fat blocks, which control the meta-data for NWFS. As such,
it would be reasonably anticipated that A) The LRU max blocks value should
be reduced in 2.4 since we don't need as much memory to cache data blocks
for files, and B) since the entire LRU will be available exclusively for
fat and directory blocks in NWFS, this should make NWFS performance on Linux
very good since most of a volumes meta-data will be able to stay in LRU cache
memory for readdir(), lookup(), create(), unlink() operations, etc.
 
To increase the caching, modify MAX_VOLUME_LRU_BLOCKS under the
appropriate Linux section of GLOBALS.H (LINUX_20, LINUX_22, or LINUX_24).
You can also increase the MAX_BUFFER_HEADS value to increase the
window size of AIO requests. The larger this number, the more
buffer heads will be available to post at one time within the
Linux elevator. Using Linux AIO has solved many issues, including
elevator coordination issues between the NWFS LRU and the Linux
Buffer Cache. With LINUX_AIO enabled, both the Linux buffer cache
and the NWFS LRU exploit the elevator logic in the block device
layer, and this almost completely eliminates disk thrashing when
copying from buffer cache file systems and NWFS.

On 2.2.15, if you feed too many AIO requests at one time (over 500),
in some testing cases we have seen 2.2.15 barf and lockup. Analysis
seems to indicate low memory conditions are the culprit here.
2.3.99 seems to handle larger loads much better.

I could write a book on the issues with doing asynch I/O in Linux
after this experience, suffice to say that the difficulty level is
close to that experienced when using Windows 2000 AIO, though in
Linux you don't have to handle nested page faults delivered
through a try {} finally exception filter, so it is a much easier
AIO implementation than on Windows 2000. :-)

BUILDING NWFS
-------------

The globals.h file contains the following table of options:

#define WINDOWS_NT_RO 0
#define WINDOWS_NT 0
#define WINDOWS_NT_UTIL 0
#define WINDOWS_CONVERT 0
#define WINDOWS_98_UTIL 0
#define LINUX_20 0
#define LINUX_22 1
#define LINUX_24 0
#define LINUX_UTIL 0
#define DOS_UTIL 0

select build environment (you can only select one at a time).

There are makefiles included for different kernel configurations. To
make the NWFS driver for Linux, select one of the following. The
makefiles support modversioned kernels and naked kernels.

#define LINUX_20 0
#define LINUX_22 1
#define LINUX_24 0

make -f nwfs.mak This will make an NWFS driver SMP-no MODVER-no
make -f nwfsmod.mak This will make an NWFS driver SMP-no MODVER-yes
make -f nwfssmp.mak This will make an NWFS driver SMP-yes MODVER-no
make -f nwmodsmp.mak This will make an NWFS driver SMP-yes MODVER-yes

The Linux versions are supported under the GCC Linux compiler
To make the Linux tools:

#define LINUX_UTIL 1

make -f util.mak

The DOS versions are supported under the DJ Delorie GCC MS-DOS compiler.
To make the MS-DOS tools:

#define DOS_UTIL 1

make -f util.mak

The Windows NT/2000 versions are supported under Microsoft C++ 5.0 or higher
To make the WIndows NT/2000 tools:

#define WINDOWS_NT_UTIL 1

nmake /f utilms.mak

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Jul 23 2000 - 21:00:17 EST