[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

strange nfs...



Hi,

I have a strange problem with xfs (kernel 2.4.7, cvs checkout from
about July, 20th) and nfs (kernel nfs server).

When the attached script is run against a nfs mounted xfs filesystem 
the size of the directory trees checked with du is not constant:

# du -sk linux.*
142448	linux.orig
142448	linux.pass.0
142448	linux.pass.1
142448	linux.pass.2
142448	linux.pass.3
142448	linux.pass.4
142448	linux.pass.5
142448	linux.pass.6
142448	linux.pass.7
392036	linux.pass.8
701588	linux.pass.9
696992	linux.pass.10
695468	linux.pass.11
705772	linux.pass.12
703256	linux.pass.13
686964	linux.pass.14
709092	linux.pass.15

Comparing two directory trees shows:

# du -sk linux.orig/* linux.pass.15/*
20	linux.orig/COPYING
76	linux.orig/CREDITS
12	linux.orig/CVS
5728	linux.orig/Documentation
36	linux.orig/MAINTAINERS
20	linux.orig/Makefile
16	linux.orig/README
4	linux.orig/REPORTING-BUGS
12	linux.orig/Rules.make
26668	linux.orig/arch
67252	linux.orig/drivers
14036	linux.orig/fs
20180	linux.orig/include
36	linux.orig/init
100	linux.orig/ipc
212	linux.orig/kdb
404	linux.orig/kernel
120	linux.orig/lib
420	linux.orig/mm
6632	linux.orig/net
460	linux.orig/scripts
64	linux.pass.15/COPYING
128	linux.pass.15/CREDITS
192	linux.pass.15/CVS
34244	linux.pass.15/Documentation
64	linux.pass.15/MAINTAINERS
64	linux.pass.15/Makefile
64	linux.pass.15/README
64	linux.pass.15/REPORTING-BUGS
64	linux.pass.15/Rules.make
171172	linux.pass.15/arch
215548	linux.pass.15/drivers
57084	linux.pass.15/fs
187856	linux.pass.15/include
320	linux.pass.15/init
576	linux.pass.15/ipc
1156	linux.pass.15/kdb
1988	linux.pass.15/kernel
900	linux.pass.15/lib
1604	linux.pass.15/mm
32600	linux.pass.15/net
3336	linux.pass.15/scripts

But ls reports identical file sizes:

# ls -ld linux.orig/* linux.pass.15/*
drwxr-xr-x   18 2008     101          4096 Jul 10 17:16 linux.orig/arch
-rw-r--r--    1 2008     101         18633 Jun  9 04:44
linux.orig/COPYING
-rw-r--r--    1 2008     101         76191 Jul  5 08:13
linux.orig/CREDITS
drwxr-xr-x    2 2008     101            48 Jul 19 16:16 linux.orig/CVS
drwxr-xr-x   29 2008     101          4096 Jul 19 16:16
linux.orig/Documentation
drwxr-xr-x   39 2008     101          4096 Jul 19 16:16
linux.orig/drivers
drwxr-xr-x   44 2008     101          4096 Jul 19 16:16 linux.orig/fs
drwxr-xr-x   25 2008     101          4096 Jul 10 17:34
linux.orig/include
drwxr-xr-x    3 2008     101            45 Jul 10 17:34 linux.orig/init
drwxr-xr-x    3 2008     101            93 Jul 10 17:34 linux.orig/ipc
drwxr-xr-x    4 2008     101          4096 Jul 10 17:34 linux.orig/kdb
drwxr-xr-x    3 2008     101          4096 Jul 19 16:16
linux.orig/kernel
drwxr-xr-x    3 2008     101          4096 Jul 13 12:18 linux.orig/lib
-rw-r--r--    1 2008     101         35274 Jul 19 16:16
linux.orig/MAINTAINERS
-rw-r--r--    1 2008     101         17744 Jul 19 16:16
linux.orig/Makefile
drwxr-xr-x    3 2008     101          4096 Jul 19 16:16 linux.orig/mm
drwxr-xr-x   28 2008     101          4096 Jul 19 16:16 linux.orig/net
-rw-r--r--    1 2008     101         14491 Apr  2 19:13
linux.orig/README
-rw-r--r--    1 2008     101          2815 Mai  2 08:22
linux.orig/REPORTING-BUGS
-rw-r--r--    1 2008     101          8884 Apr  2 19:13
linux.orig/Rules.make
drwxr-xr-x    6 2008     101          4096 Jul 10 17:35
linux.orig/scripts
drwxr-xr-x   18 2008     101          4096 Jul 10 17:16
linux.pass.15/arch
-rw-r--r--    1 2008     101         18633 Jun  9 04:44
linux.pass.15/COPYING
-rw-r--r--    1 2008     101         76191 Jul  5 08:13
linux.pass.15/CREDITS
drwxr-xr-x    2 2008     101            48 Jul 19 16:16
linux.pass.15/CVS
drwxr-xr-x   29 2008     101          4096 Jul 19 16:16
linux.pass.15/Documentation
drwxr-xr-x   39 2008     101          4096 Jul 19 16:16
linux.pass.15/drivers
drwxr-xr-x   44 2008     101          4096 Jul 19 16:16 linux.pass.15/fs
drwxr-xr-x   25 2008     101          4096 Jul 10 17:34
linux.pass.15/include
drwxr-xr-x    3 2008     101            45 Jul 10 17:34
linux.pass.15/init
drwxr-xr-x    3 2008     101            93 Jul 10 17:34
linux.pass.15/ipc
drwxr-xr-x    4 2008     101          4096 Jul 10 17:34
linux.pass.15/kdb
drwxr-xr-x    3 2008     101          4096 Jul 19 16:16
linux.pass.15/kernel
drwxr-xr-x    3 2008     101          4096 Jul 13 12:18
linux.pass.15/lib
-rw-r--r--    1 2008     101         35274 Jul 19 16:16
linux.pass.15/MAINTAINERS
-rw-r--r--    1 2008     101         17744 Jul 19 16:16
linux.pass.15/Makefile
drwxr-xr-x    3 2008     101          4096 Jul 19 16:16 linux.pass.15/mm
drwxr-xr-x   28 2008     101          4096 Jul 19 16:16
linux.pass.15/net
-rw-r--r--    1 2008     101         14491 Apr  2 19:13
linux.pass.15/README
-rw-r--r--    1 2008     101          2815 Mai  2 08:22
linux.pass.15/REPORTING-BUGS
-rw-r--r--    1 2008     101          8884 Apr  2 19:13
linux.pass.15/Rules.make
drwxr-xr-x    6 2008     101          4096 Jul 10 17:35
linux.pass.15/scripts

And finally diff -r linux.orig linux.pass.15 does not find any
differences.

Both machines are PIII/800 with scsi disks and RedHat 7.1. The compiler
is
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81) which should to be
ok
(according to the comments in the makefile of the kernel tree).

If it was only du reporting wrong values it would not bother me, but 
the reported space on the filesystem is really in use.

Klaus.

----------8<--------------------8<--------------------8<----------

#!/bin/sh

echo This is memtest.sh

# This is where we will run the tests at
TEST_DIR=/net/nfsserver/

# The location of the linux kernel source file we will be using
SOURCE_FILE=/tmp/linux-2.4.7-xfs.tar.gz

# How many passes to run of this test, higher numbers are better
NR_PASSES=200

# How many passes to run simultaneously (in order to flush memory on
# large memory machines).
#NR_SIMULTANEOUS=30
NR_SIMULTANEOUS=15

cd $TEST_DIR

echo TEST_DIR is $TEST_DIR
echo

# Remove any possible left over directories from a cancelled previous
run
echo `date`: rm -rf linux linux.orig linux.pass.*
rm -fr linux linux.orig linux.pass.*

# Unpack the one copy of the source tree that we will be comparing
against
echo `date`: unpacking linux.orig
zcat $SOURCE_FILE | tar xf -
mv linux linux.orig

i=0
while [ "$i" -lt "$NR_PASSES" ]; do
  j=0
  while [ "$j" -lt "$NR_SIMULTANEOUS" ]; do
    echo `date`: unpacking linux.pass.$j
    zcat $SOURCE_FILE | tar xf -
    mv linux linux.pass.$j
    j=`expr $j + 1`
  done
  j=0
  while [ "$j" -lt "$NR_SIMULTANEOUS" ]; do
    echo `date`: diff -r linux.orig linux.pass.$j
    diff -r linux.orig linux.pass.$j | grep -v "Common subdirectories"
    echo `date`: rm -rf linux.pass.$j
    rm -fr linux.pass.$j
    j=`expr $j + 1`
  done
  echo `date`: pass $i of $NR_PASSES finished
  i=`expr $i + 1`
done

# Clean up after ourselves
echo `date`: cleaning up
rm -fr linux linux.orig linux.pass.*
echo `date`: done