[comp.sys.sgi] Filesystem fragmentation / performance

shoshana@pdi.UUCP (Shoshana Abrass) (07/04/90)

  People here are confused about the SGI's filesystem, and I'm hoping
  someone out there can clear things up. As I understand it, the old
  AT&T filesystem was subject to serious fragmentation, ie, the longer
  a file had been around (assuming it grew gradually) the more
  fragmented it became (its blocks were all over the disk) and the
  slower its access time was. Over time, then entire operating system
  could be seen to gradually slow down. The only cure for this was to
  back the whole thing up on to tape, remake the filesystem and
  restore.

  Along came the Berkeley filesystem, with cylinder groups and other
  niceties. With the Berkeley fs, files were completely rewritten
  to disk when a size increase would have fragmented them - in other
  words, the old blocks were deallocated and new, contiguous blocks
  (in the cylinder group sense) were allocated. This system sustained
  performance over time, but slowed noticeably when the disk became
  more than 90% full.

  So here are my questions:

  1) Assuming the above is correct, which scheme does SGI use?

  2) In the AT&T system, if your use pattern was to create a lot of
     files - then remove them all - then make a bunch more - would you
     still see a gradual slowdown in performance? ie, if you didn't
     have files that increased in size over time?

  3) Can aging slow the Berkeley fs and, if so, how can it be fixed?

  As you might guess, some of our PI's are apparently slower than
  other PI's with identical hardware, and we're seeking a reason. Can
  anyone think of age problems other than fragmentation?

  Thanks for any help - I'll summarize significant replies that don't
  get posted.

  -shoshana
  Shoshana Abrass
  pdi!shoshana@sgi.com

--------------- Disclaimer necessitated by mailpath: ----------------
            I don't work for sgi, I just work downstream.
---------------------------------------------------------------------

kipp@warp.esd.sgi.com (Kipp Hickman) (07/05/90)

In article <9007031822.AA44957835@pdi.UUCP>, shoshana@pdi.UUCP (Shoshana
Abrass) writes:
|>   1) Assuming the above is correct, which scheme does SGI use?
SGI wrote the EFS - "Extent File System".  It supports a notion of cylinder
groups, and unlike the bsd filesystem there is no small block/large block
bogosity.  The EFS tends not to fragment, but I personally don't know
why.

|>   2) In the AT&T system, if your use pattern was to create a lot of
|>      files - then remove them all - then make a bunch more - would you
|>      still see a gradual slowdown in performance? ie, if you didn't
|>      have files that increased in size over time?
The EFS should not have this pattern.  Disk space is allocated via a
bitmap, so the operation you describe should have no apparent slow down.
Also, the inode space is also managed as a bitmap, so it will not change
ordering either.

|>   3) Can aging slow the Berkeley fs and, if so, how can it be fixed?
The EFS will slow down over time, as fragmentation increases.  If you
are *really* experiencing this (you can write some simple i/o tests to
determine this), then back your disk up somewhere (*I* would use the
network - its more reliable) and clean your filesystems and reload your
software.  A "good" way to do this is to save all of your files on the
disk, then reload the installation software doing a "clean" in the process.
After thats done, reload your software from wherever.  Please note that
you should be very careful when doing this so that you don't lose any
of your data (like your passwd file, etc.).

Unless a filesystem has an automatic method for eliminating fragmentation,
all filesystems will degrade over time.  Each of the filesystems - AT&T, BSD,
and EFS, have different properties which trigger their fragmentation, but
they all do it.  The way that I personally operate is to do a clean install
every time a new release comes out.  I have a set of scripts that I run
after the install that repair the system - put back my password file, etc.

You will need to personalize this, but here is my copy of the script.
Also, this technique relys on having two disks - the first one I "donate"
to the software release, the second I use for my personal data.

--CUT--
#! /bin/sh

# show whats happening
set -x
umask 22

# install basic configuration files
cp /root/d/fixup/etc/X0.hosts /root/etc
cp /root/d/fixup/etc/exports /root/etc
cp /root/d/fixup/etc/fstab /root/etc
cp /root/d/fixup/etc/hosts /root/etc
cp /root/d/fixup/etc/passwd /root/etc
cp /root/d/fixup/etc/sys_id /root/etc
cp /root/d/fixup/etc/config/automount.options /root/etc/config

# enable yp
echo on > /root/etc/config/yp
echo esd.sgi.com > /root/usr/etc/yp/ypdomain

# make mail work
mkdir /root/usr/lib/uucp
touch /root/usr/lib/uucp/Systems
cat >> /root/usr/lib/aliases << EOF
root:postmaster
postmaster:kipp
EOF
chroot /root /bin/sh << EOF
mkdir /tmp
cp /d/fixup/GETmail /usr/sbin
domainname esd.sgi.com
/usr/sbin/GETmail
EOF

# fixup tty types & services
ed /root/etc/ttytype << EOF
/ttyd1/s/?v50am/vt100/
w
e /root/etc/services
g/^#sgi-/s/#//
w
q
EOF

# get back disk working and on line
if test ! -b /root/dev/d; then
    rm -f /root/dev/d
    ln /root/dev/dsk/dks0d2s7 /root/dev/d
fi
if test ! -c /root/dev/rd; then
    rm -f /root/dev/rd
    ln /root/dev/rdsk/dks0d2s7 /root/dev/rd
fi

# setup network mounts
mkdir /root/n
#for i in bonnie clyde flake newmedia ozone there; do
#    mkdir /root/n/$i
#done
#mkdir /root/n/bonnie/jake /root/n/bonnie/usr /root/n/flake/usr
#mkdir /root/n/clyde/aspen
ln -s /n/bonnie/jake /root/jake
#ln -s /n/clyde/aspen /root/aspen
#ln -s .. /root/n/warp
rm -rf /root/usr/local /root/usr/games /root/usr/catman/db
ln -s /n/warp/d/usr/local /root/usr/local
ln -s /n/warp/d/usr/games /root/usr/games
ln -s /n/warp/d/usr/catman/db /root/usr/catman/db

# create remote printers
mkdir /root/tmp
chroot /root /usr/sbin/mknetpr PostScript newmedia rio2
rm -rf /root/tmp

# ksh
cp /root/d/fixup/bin/ksh /root/bin

# links for using -me and -ms in psroff
#ln -s /n/there/usr/local/lib/tmac/tmac.s /root/usr/lib/tmac
#ln -s /n/there/usr/local/lib/tmac/tmac.e /root/usr/lib/tmac
#ln -s /n/there/usr/local/lib/ms /root/usr/lib
#ln -s /n/there/usr/local/lib/me /root/usr/lib

chroot /root /etc/chkconfig automount on

# Stuff for me
CRONTAB=/root/d/kipp/.crontab
if test -f $CRONTAB; then
    cp $CRONTAB /root/usr/spool/cron/crontabs/kipp
fi

# Install other packages
chroot /root /usr/local/bin/install.ui xrn
chroot /root /usr/local/bin/install.ui C++2.0
chroot /root /usr/local/bin/install.move move