Messages in this thread | | | Date | Fri, 21 Jul 2000 18:46:37 -0600 | From | "Jeff V. Merkey" <> | Subject | [ANNOUNCE]NWFS 2.4 Driver and Tools Source Code Released |
| |
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
| |