Hello,
Recently on the EVMS mailing list, we had a gentlemen report a problem
using Linux XFS 1.1 on a RAID5 storage object (Linux MD compatibility
storage object). See
http://sourceforge.net/mailarchive/forum.php?thread_id=799287&forum_id=2003 for
the initial post.
After some research I found that moving the internal log to another
device worked around the problem.
In short the problem appears to be related to I/O requests of 4K in
length coming in on devices sensitive to alignment such as striped LVs
or MD devices (specifically when these unaligned I/O requests cross
boundaries like outside a chunksize). This problem should also manifest
itself on non-striped entities such as fragmented LVs where a PE may get
an unaligned I/O request that may span into a PE corresponding to a
different LV.
Also, the problem manifested itself most easily with striped devices. I
found explanations under man mkfs.xfs of some options specific to
striping so I experimented. Below is the output of the several mkfs.xfs
attempts on a RAID 5 storage object composed of 6 partitions.
root@gunslinger ~ # mkfs.xfs -f /dev/evms/md/md0
meta-data=/dev/evms/md/md0 isize=256 agcount=8, agsize=31360
blks
data = bsize=4096 blocks=250880, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=0
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=1200
realtime =none extsz=65536 blocks=0, rtextents=0
root@gunslinger ~ # mkfs.xfs -f /dev/evms/md/md0 -d sunit=8,swidth=40
meta-data=/dev/evms/md/md0 isize=256 agcount=8, agsize=31360
blks
data = bsize=4096 blocks=250880, imaxpct=25
= sunit=1 swidth=5 blks, unwritten=0
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=1200
realtime =none extsz=65536 blocks=0, rtextents=0
root@gunslinger ~ # mkfs.xfs -f /dev/evms/md/md0 -d su=32768,sw=5
meta-data=/dev/evms/md/md0 isize=256 agcount=8, agsize=31360
blks
data = bsize=4096 blocks=250880, imaxpct=25
= sunit=8 swidth=40 blks,
unwritten=0
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=1200
realtime =none extsz=65536 blocks=0, rtextents=0
None of these helped. Not even specifying the same option on the mount.
I still ended up with unaligned I/O coming in and crossing chunksize
stripe boundaries essentially corrupting data. I also tried the mkfs.xfs
options set to sunit=64,swidth=320 which produced sunit=8 and swidth=40
on output and still didn't help.
I noticed that xfsprogs libdisk source files make tests of the device to
see if it is a MD or LV striped device to automatically set the sunit
and swidth values in your superblock to provide proper alignment on log
I/O for example. But in my attempts to isolate this, there also must be
a mount time check somewhere to determine whether to use these since
formatting it correctly and mounting it with these options using the
EVMS MD plug-in, they don't seem to get honored.
I would appreciate any help the XFS developers could offer in allowing
XFS to work on top of block devices sensitive to alignment under Linux.
Please cross-post any responses to the evms-devel@xxxxxxxxxxxxxxxxxxxxx
so that others not subscribed to the linux-xfs list can see them.
We (EVMS) will offer any assistance we can as we would like to see
customers using XFS and EVMS together seamlessly and happily on their
enterprise systems.
--
regards,
Luciano Chavez
lnx1138@xxxxxxxxxx
http://evms.sourceforge.net
|