Skip to contentSkip to conversation

makefs alignment issue

DISCUSSION Stan Hoeppner 3 participants 12 messages Oct 24, 2014 – Oct 28, 2014

lore
Share & tools
lore
#0 lore raw

Just remade a couple of filesystems and received an alignment msg I don't recall receiving previously:

# mkfs.xfs -f -d su=64k,sw=12 /dev/s2d_a1l003
mkfs.xfs: Specified data stripe width 1536 is not the same as the volume
stripe width 2048
meta-data=/dev/s2d_a1l003        isize=256    agcount=44,
agsize=268435440 blks
         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=11709285376, imaxpct=5
         =                       sunit=16     swidth=192 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

/dev/s2d_a1l003 is an alias to dm-0 which is a dm-multipath device to a LUN on hardware RAID. The hardware geometry is 64kx 12, 768k. AFAIK no geometry information has been specified for these device mapper devices (someone else's responsibility). Though I assume dm geometry data is the reason for mkfs.xfs throwing this alert. I don't find anything in /sys/devices/virtual/block/dm-0/ indicating geometry.

Any ideas how to verify what's going on here and fix it?

Thanks,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#1 lore raw
Quoted 6 lines · Stan Hoeppner

Just remade a couple of filesystems and received an alignment msg I don't recall receiving previously:

# mkfs.xfs -f -d su=64k,sw=12 /dev/s2d_a1l003
mkfs.xfs: Specified data stripe width 1536 is not the same as the volume
stripe width 2048

so specified geometry that differs from the underlying device...

Quoted 11 lines

meta-data=/dev/s2d_a1l003 isize=256 agcount=44,
agsize=268435440 blks

         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=11709285376, imaxpct=5
         =                       sunit=16     swidth=192 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Quoted 8 lines

/dev/s2d_a1l003 is an alias to dm-0 which is a dm-multipath device to a LUN on hardware RAID. The hardware geometry is 64kx 12, 768k. AFAIK no geometry information has been specified for these device mapper devices (someone else's responsibility). Though I assume dm geometry data is the reason for mkfs.xfs throwing this alert. I don't find anything in /sys/devices/virtual/block/dm-0/ indicating geometry.

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003

The first number, minimum io size, is what is used for sunit The 2nd number, optimal io size, is what is used for swidth

Where dm got the geometry, I'm not sure - you'd have to look into how you set up the dm device, and what its defaults are I think.

-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#2 lore raw
Quoted 30 lines · Eric Sandeen
Quoted 6 lines · Stan Hoeppner

Just remade a couple of filesystems and received an alignment msg I don't recall receiving previously:

# mkfs.xfs -f -d su=64k,sw=12 /dev/s2d_a1l003
mkfs.xfs: Specified data stripe width 1536 is not the same as the volume
stripe width 2048

so specified geometry that differs from the underlying device...

Quoted 11 lines

meta-data=/dev/s2d_a1l003 isize=256 agcount=44,
agsize=268435440 blks

         =                       sectsz=512   attr=2, projid32bit=0
data     =                       bsize=4096   blocks=11709285376, imaxpct=5
         =                       sunit=16     swidth=192 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Quoted 8 lines

/dev/s2d_a1l003 is an alias to dm-0 which is a dm-multipath device to a LUN on hardware RAID. The hardware geometry is 64kx 12, 768k. AFAIK no geometry information has been specified for these device mapper devices (someone else's responsibility). Though I assume dm geometry data is the reason for mkfs.xfs throwing this alert. I don't find anything in /sys/devices/virtual/block/dm-0/ indicating geometry.

Any ideas how to verify what's going on here and fix it?

Quoted 7 lines
# blockdev --getiomin --getioopt /dev/s2d_a1l003

The first number, minimum io size, is what is used for sunit The 2nd number, optimal io size, is what is used for swidth

Where dm got the geometry, I'm not sure - you'd have to look into how you set up the dm device, and what its defaults are I think.

Looks like they're being passed up the stack:

# blockdev --getiomin --getioopt /dev/dm-0
512
1048576
# multipath -ll
3600c0ff0003630917954075401000000 dm-0 Tek,DH6554
size=44T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| `- 9:0:0:3 sdj 8:144 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  `- 1:0:0:3 sdf 8:80  active ready running

/sys/block/sdj/queue# cat minimum_io_size
512
/sys/block/sdj/queue# cat optimal_io_size
1048576

root@Anguish-ssu-1:/sys/block/sdf/queue# cat minimum_io_size
512
root@Anguish-ssu-1:/sys/block/sdf/queue# cat optimal_io_size
1048576

So it's the presence of a value in optimal_io_size that causes the problem here. My single disk workstation has min but not optimal, as I assume most do. And I don't get this msg when formatting it.

It's interesting that mkfs.xfs would use these values given they are static firmware values in most controllers. Thus they don't change when one uses different geometry for different arrays/LUNs...

So it seems I can safely ignore this mkfs msg.

Thanks,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#3 lore raw
Quoted 2 lines · Stan Hoeppner

On 10/24/2014 03:14 PM, Eric Sandeen wrote:

...

Quoted 23 lines
Quoted 9 lines
Quoted 1 line

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003

The first number, minimum io size, is what is used for sunit The 2nd number, optimal io size, is what is used for swidth

Where dm got the geometry, I'm not sure - you'd have to look into how you set up the dm device, and what its defaults are I think.

Looks like they're being passed up the stack:

# blockdev --getiomin --getioopt /dev/dm-0
512
1048576
# multipath -ll
3600c0ff0003630917954075401000000 dm-0 Tek,DH6554
size=44T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| `- 9:0:0:3 sdj 8:144 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  `- 1:0:0:3 sdf 8:80  active ready running
Quoted 4 lines

/sys/block/sdj/queue# cat minimum_io_size
512
/sys/block/sdj/queue# cat optimal_io_size
1048576

so supposedly a 512 byte stripe unit, and a 1MB width. Hrmph.

Quoted 5 lines
root@Anguish-ssu-1:/sys/block/sdf/queue# cat minimum_io_size
512
root@Anguish-ssu-1:/sys/block/sdf/queue# cat optimal_io_size
1048576
Quoted 7 lines

So it's the presence of a value in optimal_io_size that causes the problem here. My single disk workstation has min but not optimal, as I assume most do. And I don't get this msg when formatting it.

It's interesting that mkfs.xfs would use these values given they are static firmware values in most controllers. Thus they don't change when one uses different geometry for different arrays/LUNs...

Well, they should change with geometry, but many hardware raids don't advertise anything meaningful.

There are some heuristics in mkfs to ignore things that just obviously don't make sense. Perhaps we should ignore anything with a sector-sized "stripe unit".

(I'll also ask the dm folks why they set it this way).

Dave, any thoughts?

Quoted 1 line

So it seems I can safely ignore this mkfs msg.

Probably so, but it'd be nice to get rid of it if we could, either by ignoring sector-sized "stripe units" or changing what dm reports; not sure.

-Eric

Quoted 3 lines

Thanks,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#4 lore raw
Quoted 9 lines · Eric Sandeen
Quoted 2 lines · Stan Hoeppner

On 10/24/2014 03:14 PM, Eric Sandeen wrote:

...

Quoted 3 lines
Quoted 3 lines
Quoted 1 line

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003

Also, what does it show for the underlying non-multipath device(s)?

-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#5 lore raw
Quoted 5 lines · Eric Sandeen
Quoted 4 lines · Eric Sandeen
Quoted 2 lines · Stan Hoeppner

On 10/24/2014 03:14 PM, Eric Sandeen wrote:

Quoted 7 lines
Quoted 5 lines

...

Quoted 3 lines
Quoted 3 lines
Quoted 1 line

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003

Also, what does it show for the underlying non-multipath device(s)?

# blockdev --getiomin --getioopt /dev/sdj
512
1048576
# blockdev --getiomin --getioopt /dev/sdf
512
1048576

Cheers,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#6 lore raw
Quoted 12 lines · Stan Hoeppner
Quoted 11 lines · Eric Sandeen
Quoted 9 lines · Eric Sandeen
Quoted 2 lines · Stan Hoeppner

On 10/24/2014 03:14 PM, Eric Sandeen wrote:

...

Quoted 3 lines
Quoted 3 lines
Quoted 1 line

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003
Quoted 8 lines
Quoted 1 line

Also, what does it show for the underlying non-multipath device(s)?

# blockdev --getiomin --getioopt /dev/sdj
512
1048576
# blockdev --getiomin --getioopt /dev/sdf
512
1048576

Ok, so dm multipath is just bubbling up what the device itself is claiming; not dm's doing.

I forgot to ask (and you forgot to report...!) what version of xfsprogs you're using....

Currently, blkid_get_topology() in xfsprogs does:

/*
* Blkid reports the information in terms of bytes, but we want it in
* terms of 512 bytes blocks (just to convert it to bytes later..) *
* If the reported values are the same as the physical sector size
* do not bother to report anything. It will just cause warnings
* if people specify larger stripe units or widths manually. */
val = blkid_topology_get_minimum_io_size(tp);
if (val > *psectorsize)
*sunit = val >> 9;
val = blkid_topology_get_optimal_io_size(tp);
if (val > *psectorsize)
*swidth = val >> 9;

so in your case sunit probably wouldn't get set (can you confirm with

# blockdev --getpbsz that the physical sector size is also 512?)

But the optimal size is > physical sector so swidth gets set.

Bleah... can you just collect all of:

# blockdev --getpbsz --getss --getiomin --getioopt

for your underlying devices, and I'll dig into how xfsprogs is behaving for those values. I have a hunch that we should be ignoring stripe units of 512 even if the "width" claims to be something larger.

-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#7 lore raw
Quoted 22 lines · Eric Sandeen
Quoted 12 lines · Stan Hoeppner
Quoted 11 lines · Eric Sandeen
Quoted 9 lines · Eric Sandeen
Quoted 2 lines · Stan Hoeppner

On 10/24/2014 03:14 PM, Eric Sandeen wrote:

...

Quoted 3 lines
Quoted 3 lines
Quoted 1 line

Any ideas how to verify what's going on here and fix it?

# blockdev --getiomin --getioopt /dev/s2d_a1l003
Quoted 8 lines
Quoted 1 line

Also, what does it show for the underlying non-multipath device(s)?

# blockdev --getiomin --getioopt /dev/sdj
512
1048576
# blockdev --getiomin --getioopt /dev/sdf
512
1048576
Quoted 5 lines

Ok, so dm multipath is just bubbling up what the device itself is claiming; not dm's doing.

I forgot to ask (and you forgot to report...!) what version of xfsprogs you're using....

Sorry Eric, my bad. I should know better after all these years. :( It's old Debian 6.0 IIRC, let's see...

# xfs_repair -V
xfs_repair version 3.1.4
Quoted 17 lines

Currently, blkid_get_topology() in xfsprogs does:

/*
* Blkid reports the information in terms of bytes, but we want it in
* terms of 512 bytes blocks (just to convert it to bytes later..) *
* If the reported values are the same as the physical sector size
* do not bother to report anything. It will just cause warnings
* if people specify larger stripe units or widths manually. */
val = blkid_topology_get_minimum_io_size(tp);
if (val > *psectorsize)
*sunit = val >> 9;
val = blkid_topology_get_optimal_io_size(tp);
if (val > *psectorsize)
*swidth = val >> 9;

Quoted 2 lines

so in your case sunit probably wouldn't get set (can you confirm with

# blockdev --getpbsz that the physical sector size is also 512?)
# blockdev --getpbsz /dev/dm-0
512
Quoted 5 lines

But the optimal size is > physical sector so swidth gets set.

Bleah... can you just collect all of:

# blockdev --getpbsz --getss --getiomin --getioopt
# blockdev --getpbsz --getss --getiomin --getioopt /dev/sdj
512
512
512
1048576
# blockdev --getpbsz --getss --getiomin --getioopt /dev/sdh
512
512
512
1048576
Quoted 3 lines

for your underlying devices, and I'll dig into how xfsprogs is behaving for those values. I have a hunch that we should be ignoring stripe units of 512 even if the "width" claims to be something larger.

Just a hunch? :)

If the same interface is used for Linux logical block devices (md, dm, lvm, etc) and hardware RAID, I have a hunch it may be better to determine that, if possible, before doing anything with these values. As you said previously, and I agree 100%, a lot of RAID vendors don't export meaningful information here. In this specific case, I think the RAID engineers are exporting a value, 1 MB, that works best for their cache management, or some other path in their firmware. They're concerned with host interface xfer into the controller, not the IOs on the back end to the disks. They don't see this as an end-to-end deal. In fact, I'd guess most of these folks see their device as performing magic, and it doesn't matter what comes in or goes out either end. "We'll take care of it."

I don't know what underlying SCSI command is used for populating optimal_io_size. I'm guessing this has different meaning for different folks. You say optimal_io_size is the same as RAID width. Apply that to this case:

hardware RAID 60 LUN, 4 arrays
16+2 RAID6, 256 KB stripe unit, 4096 KB stripe width 16 MB LUN stripe width
optimal_io_size = 16 MB

Is that an appropriate value for optimal_io_size even if this is the RAID width? I'm not saying it isn't. I don't know. I don't know what other layers of the Linux and RAID firmware stacks are affected by this, nor how they're affected.

Thanks,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#8 lore raw
Quoted 4 lines · Stan Hoeppner

If the same interface is used for Linux logical block devices (md, dm, lvm, etc) and hardware RAID, I have a hunch it may be better to determine that, if possible, before doing anything with these values. As you said previously, and I agree 100%, a lot of RAID vendors don't

Quoted 8 lines

export meaningful information here. In this specific case, I think the RAID engineers are exporting a value, 1 MB, that works best for their cache management, or some other path in their firmware. They're concerned with host interface xfer into the controller, not the IOs on the back end to the disks. They don't see this as an end-to-end deal. In fact, I'd guess most of these folks see their device as performing magic, and it doesn't matter what comes in or goes out either end. "We'll take care of it."

Deja vu. This is an isochronous RAID array you are having trouble with, isn't it?

FWIW, do your problems go away when you make you hardware LUN width a multiple of the cache segment size?

Quoted 9 lines

optimal_io_size. I'm guessing this has different meaning for different folks. You say optimal_io_size is the same as RAID width. Apply that to this case:

hardware RAID 60 LUN, 4 arrays
16+2 RAID6, 256 KB stripe unit, 4096 KB stripe width 16 MB LUN stripe width
optimal_io_size = 16 MB

Quoted 4 lines

Is that an appropriate value for optimal_io_size even if this is the RAID width? I'm not saying it isn't. I don't know. I don't know what other layers of the Linux and RAID firmware stacks are affected by this, nor how they're affected.

yup, i'd expect minimum = 4MB (i.e stripe unit 4MB so we align to the underlying RAID6 luns) and optimal = 16MB for the stripe width (and so with swalloc we align to the first lun in the RAID0).

This should be passed up unchanged through the stack if none of the software layers are doing other geometry modifications (e.g. more raid, thinp, etc).

Cheers,

Dave.

Signature · 7 lines
Dave Chinner
[email protected]

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#9 lore raw
Quoted 14 lines · Dave Chinner
Quoted 4 lines · Stan Hoeppner

If the same interface is used for Linux logical block devices (md, dm, lvm, etc) and hardware RAID, I have a hunch it may be better to determine that, if possible, before doing anything with these values. As you said previously, and I agree 100%, a lot of RAID vendors don't

Quoted 8 lines

export meaningful information here. In this specific case, I think the RAID engineers are exporting a value, 1 MB, that works best for their cache management, or some other path in their firmware. They're concerned with host interface xfer into the controller, not the IOs on the back end to the disks. They don't see this as an end-to-end deal. In fact, I'd guess most of these folks see their device as performing magic, and it doesn't matter what comes in or goes out either end. "We'll take care of it."

Quoted 2 lines

Deja vu. This is an isochronous RAID array you are having trouble with, isn't it?

I don't believe so. I'm pretty sure the parity rotates; i.e. standard RAID5/6.

Quoted 2 lines

FWIW, do your problems go away when you make you hardware LUN width a multiple of the cache segment size?

Hadn't tried it. And I don't have the opportunity now as my contract has ended. However the problems we were having weren't related to controller issues but excessive seeking. I mentioned this in that (rather lengthy) previous reply.

Quoted 9 lines
Quoted 9 lines

optimal_io_size. I'm guessing this has different meaning for different folks. You say optimal_io_size is the same as RAID width. Apply that to this case:

hardware RAID 60 LUN, 4 arrays
16+2 RAID6, 256 KB stripe unit, 4096 KB stripe width 16 MB LUN stripe width
optimal_io_size = 16 MB

Quoted 8 lines
Quoted 4 lines

Is that an appropriate value for optimal_io_size even if this is the RAID width? I'm not saying it isn't. I don't know. I don't know what other layers of the Linux and RAID firmware stacks are affected by this, nor how they're affected.

yup, i'd expect minimum = 4MB (i.e stripe unit 4MB so we align to the underlying RAID6 luns) and optimal = 16MB for the stripe width (and so with swalloc we align to the first lun in the RAID0).

At minimum 4MB how does that affect journal writes which will be much smaller, especially with a large file streaming workload, for which this setup is appropriate? Isn't the minimum a hard setting? I.e. we can never do an IO less than 4MB? Do other layers of the stack use this variable? Are they expecting values this large?

Quoted 3 lines

This should be passed up unchanged through the stack if none of the software layers are doing other geometry modifications (e.g. more raid, thinp, etc).

I agree, if RAID vendors all did the right thing...

Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#10 lore raw
Quoted 15 lines · Stan Hoeppner
Quoted 14 lines · Dave Chinner
Quoted 12 lines · Stan Hoeppner

If the same interface is used for Linux logical block devices (md, dm, lvm, etc) and hardware RAID, I have a hunch it may be better to determine that, if possible, before doing anything with these values. As you said previously, and I agree 100%, a lot of RAID vendors don't export meaningful information here. In this specific case, I think the RAID engineers are exporting a value, 1 MB, that works best for their cache management, or some other path in their firmware. They're concerned with host interface xfer into the controller, not the IOs on the back end to the disks. They don't see this as an end-to-end deal. In fact, I'd guess most of these folks see their device as performing magic, and it doesn't matter what comes in or goes out either end. "We'll take care of it."

Quoted 5 lines
Quoted 2 lines

Deja vu. This is an isochronous RAID array you are having trouble with, isn't it?

I don't believe so. I'm pretty sure the parity rotates; i.e. standard RAID5/6.

The location of parity doesn't dtermine that it is isochronous in behaviour or not. Often RAID5/6 is marketing speak for "single/dual parity", not the type of redundancy that is implemented in the hardware ;)

Quoted 7 lines
Quoted 2 lines

FWIW, do your problems go away when you make you hardware LUN width a multiple of the cache segment size?

Hadn't tried it. And I don't have the opportunity now as my contract has ended. However the problems we were having weren't related to controller issues but excessive seeking. I mentioned this in that (rather lengthy) previous reply.

Right, but if you had a 768k stripe width and a 1MB cache segment size, a cache segment operation would require two stripe widths to be operated on, and only one would be a whole stripe width. hence the possibility of doing more IOs than are necessary to populate or write back cache segments. i.e. it's a potential reason for why the back end disks didn't have anywhere near the expected seek capability they were supposed to have....

Quoted 18 lines
Quoted 9 lines
Quoted 9 lines

optimal_io_size. I'm guessing this has different meaning for different folks. You say optimal_io_size is the same as RAID width. Apply that to this case:

hardware RAID 60 LUN, 4 arrays
16+2 RAID6, 256 KB stripe unit, 4096 KB stripe width 16 MB LUN stripe width
optimal_io_size = 16 MB

Quoted 8 lines
Quoted 4 lines

Is that an appropriate value for optimal_io_size even if this is the RAID width? I'm not saying it isn't. I don't know. I don't know what other layers of the Linux and RAID firmware stacks are affected by this, nor how they're affected.

yup, i'd expect minimum = 4MB (i.e stripe unit 4MB so we align to the underlying RAID6 luns) and optimal = 16MB for the stripe width (and so with swalloc we align to the first lun in the RAID0).

Quoted 5 lines

At minimum 4MB how does that affect journal writes which will be much smaller, especially with a large file streaming workload, for which this setup is appropriate? Isn't the minimum a hard setting? I.e. we can never do an IO less than 4MB? Do other layers of the stack use this variable? Are they expecting values this large?

No, "minimum_io_size" is for "minimum *efficient* IO size" not the smallest supported IO size. The smallest supported IO sizes and atomic IO sizes are defined by hw_sector_size, physical_block_size and logical_block_size.

Cheers,

Dave.

Signature · 7 lines
Dave Chinner
[email protected]

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#11 lore raw
Quoted 19 lines · Dave Chinner
Quoted 18 lines · Stan Hoeppner
Quoted 16 lines · Dave Chinner
Quoted 4 lines · Stan Hoeppner

If the same interface is used for Linux logical block devices (md, dm, lvm, etc) and hardware RAID, I have a hunch it may be better to determine that, if possible, before doing anything with these values. As you said previously, and I agree 100%, a lot of RAID vendors don't

Quoted 8 lines

export meaningful information here. In this specific case, I think the RAID engineers are exporting a value, 1 MB, that works best for their cache management, or some other path in their firmware. They're concerned with host interface xfer into the controller, not the IOs on the back end to the disks. They don't see this as an end-to-end deal. In fact, I'd guess most of these folks see their device as performing magic, and it doesn't matter what comes in or goes out either end. "We'll take care of it."

Deja vu. This is an isochronous RAID array you are having trouble with, isn't it?

Quoted 7 lines
Quoted 2 lines

I don't believe so. I'm pretty sure the parity rotates; i.e. standard RAID5/6.

The location of parity doesn't dtermine that it is isochronous in behaviour or not. Often RAID5/6 is marketing speak for "single/dual parity", not the type of redundancy that is implemented in the hardware ;)

Yea, I know. It's the lack of buffering/blocking that makes it isochronous. Above I was referring to something you said last year:

http://oss.sgi.com/archives/xfs/2013-06/msg00981.html

"And at the other end of the scale, isochronous RAID arrays tend to have dedicated parity disks so that data read and write behaviour is deterministic and therefore predictable from a high level...."

Quoted 8 lines
Quoted 7 lines
Quoted 2 lines

FWIW, do your problems go away when you make you hardware LUN width a multiple of the cache segment size?

Hadn't tried it. And I don't have the opportunity now as my contract has ended. However the problems we were having weren't related to controller issues but excessive seeking. I mentioned this in that (rather lengthy) previous reply.

Quoted 7 lines

Right, but if you had a 768k stripe width and a 1MB cache segment size, a cache segment operation would require two stripe widths to be operated on, and only one would be a whole stripe width. hence the possibility of doing more IOs than are necessary to populate or write back cache segments. i.e. it's a potential reason for why the back end disks didn't have anywhere near the expected seek capability they were supposed to have....

That's a very good point. And would be performance suicide for a vendor pushing 224 drive arrays packed w/7.2 drives. I don't think that's what's happening here though, as testing with 132 parallel dd threads shows 1375 MB/s to the outer most AG. Peak single thread buffered dd write is ~1500 - 1800 MB/s depending on file size, etc. So with the right parallel workload we can achieve pretty close t peak LUN throughput.

Quoted 24 lines
Quoted 18 lines
Quoted 9 lines
Quoted 9 lines

optimal_io_size. I'm guessing this has different meaning for different folks. You say optimal_io_size is the same as RAID width. Apply that to this case:

hardware RAID 60 LUN, 4 arrays
16+2 RAID6, 256 KB stripe unit, 4096 KB stripe width 16 MB LUN stripe width
optimal_io_size = 16 MB

Quoted 8 lines
Quoted 4 lines

Is that an appropriate value for optimal_io_size even if this is the RAID width? I'm not saying it isn't. I don't know. I don't know what other layers of the Linux and RAID firmware stacks are affected by this, nor how they're affected.

yup, i'd expect minimum = 4MB (i.e stripe unit 4MB so we align to the underlying RAID6 luns) and optimal = 16MB for the stripe width (and so with swalloc we align to the first lun in the RAID0).

Quoted 5 lines

At minimum 4MB how does that affect journal writes which will be much smaller, especially with a large file streaming workload, for which this setup is appropriate? Isn't the minimum a hard setting? I.e. we can never do an IO less than 4MB? Do other layers of the stack use this variable? Are they expecting values this large?

Quoted 4 lines

No, "minimum_io_size" is for "minimum *efficient* IO size" not the smallest supported IO size. The smallest supported IO sizes and atomic IO sizes are defined by hw_sector_size, physical_block_size and logical_block_size.

Ok got it. So this value is a performance hint. So would it be better for RAID vendors to simply populate these values with zeros instead of values that don't match the LUN geometry, as is the case with the arrays I've been working with?

BTW, where/how are these values obtained? Are they returned to a SCSI inquiry? If so, which SCSI command?

Thanks,
Stan

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs