Veritas File System (VxFS) versions 6.0 and above used in local mount environment may experience performance degradation or filesystem may get disabled with "vx_disable" message.

book

Article ID: 100010530

calendar_today

Updated On:

Description

Error Message

WARNING: msgcnt 1 mesg 031: V-2-31: vx_disable - /dev/vx/dsk/testdg/testvol file system disabled

 

Cause

The 'dalloc' feature allows VxFS to allocate extents (file system blocks) to a file in a delayed fashion when extending a file size.

More details on each issue:

1. Asynchronous writes that extend a file’s size will create and dirty memory pages, new extents can therefore be allocated when the dirty pages are flushed to disk (via background processing) rather than allocating the extents in the same context as the write I/O. However, in some cases, with delayed allocation on, the flushing of dirty pages may occur synchronously in the foreground in the same context as the write I/O, when triggered the foreground flushing can significantly slow the write I/O performance.

2. In the case of a badly fragmented file system free space of multiple extent allocations can be needed to fulfill one write request. This request is done in one VxFS transaction. Thus one allocation transaction can end up having to build up many sub-transactions. While flushing the delayed allocations, when too many sub-transactions are required, the same transaction is retried a fixed number of times. If the situation persists, an error is returned and the file system is disabled.
 

Resolution

A supported hotfix has been made available for VxFS 6.0.5.100 and VxFS 6.1 GA for this issue. Please contact Veritas Technical Support to obtain this fix.

WORKAROUND: If the hotfix is not installed

The workaround is to disable  the 'delayed allocation' ('dalloc') feature on all the VxFS file systems.

1. For a filesystem which is already mounted

# vxtunefs -s -o dalloc_enable=0 $MOUNT_POINT

example:
# vxtunefs -s -o dalloc_enable=0 /testmnt1


2. To make the value persistent across system reboot and filesystem remount, add the entry to /etc/vx/tunefstab. This file contains tuning parameters for Veritas File Systems which are set automatically during filesystem mount.

The entry in tunefstab can be per filesystem or a system default.

- Per filesystem
/dev/vx/dsk/$DISKGROUP/$VOLUME      dalloc_enable=0

example:
# cat /etc/vx/tunefstab
/dev/vx/dsk/testdg/testvol1      dalloc_enable=0


- System default
# cat /etc/vx/tunefstab
system_default  dalloc_enable=0

 


For detailed explanation of the above workaround please see below:


- For a mounted filesystem the vxtunefs command can be used to set tuning parameters, however values that are set using the vxtunefs command are not persistent across system reboot or across file system remount (umount and mount back).

 
- To make the setting persistent update the /etc/vx/tunefstab file. This file contains tuning parameters for Veritas File Systems which are set automatically during filesystem mount.
 
          Each entry in tunefstab is a line of fields in one of the following formats:
 
               block_device          tunefs options
 
               system_default        tunefs options
 
- block_device is the name of the device on which the file system is mounted. If there is more than one line that specifies options for a device, each line is processed and the options are set in order.
 
- In place of block_device, system_default specifies tunables for each device to process. If an entry for both a block_device and system_default exists then the device value takes precedence.
 
 
 
1.  Steps for making the VxFS File system tuning values persistent per file system:


i) For the filesystem already mounted
# vxtunefs -s -o dalloc_enable=0 /$MOUNT_POINT

example:
# vxtunefs -s -o dalloc_enable=0 /testmnt1


ii) Create the /etc/vx/tunefstab if it does not exists and add the entry as shown in below example :

/dev/vx/dsk/$DISKGROUP/$VOLUME      dalloc_enable=0

example:
/dev/vx/dsk/testdg/testvol1      dalloc_enable=0
  
          
iii) To confirm the value after mount 
 
# vxtunefs /testmnt1 | grep "dalloc_enable"
dalloc_enable = 0

 


Example using a single file system :

- For mounted filesystem
# vxtunefs /testmnt1 |grep "dalloc_enable"
dalloc_enable = 1

# vxtunefs -s -o dalloc_enable=0 /testmnt1
UX:vxfs vxtunefs: INFO: V-3-22525: Parameters successfully set for /testmnt1

# vxtunefs /testmnt1 |grep "dalloc_enable"
dalloc_enable = 0


- To make it persistent add entry to /etc/vx/tunefstab
# cat /etc/vx/tunefstab
/dev/vx/dsk/testdg/testvol1 dalloc_enable=0

# mount -V vxfs /dev/vx/dsk/testdg/testvol1 /testmnt1/
# vxtunefs /testmnt1/ | grep "dalloc_enable"

dalloc_enable = 0


  
Example using multiple file systems :
 

# mount -V  vxfs /dev/vx/dsk/testdg/testvol1 /testmnt1/
# vxtunefs /testmnt1/ | grep "dalloc_enable"

dalloc_enable = 1

# mount -V vxfs /dev/vx/dsk/testdg/testvol2 /testmnt2

# vxtunefs /testmnt2/ | grep "dalloc_enable"
dalloc_enable = 1

# mount -V vxfs /dev/vx/dsk/testdg/testvol3 /testmnt3

# vxtunefs /testmnt3/ | grep "dalloc_enable"
dalloc_enable = 1

# cat /etc/vx/tunefstab
/dev/vx/dsk/testdg/testvol1 dalloc_enable=0
/dev/vx/dsk/testdg/testvol2 dalloc_enable=0
/dev/vx/dsk/testdg/testvol3 dalloc_enable=0

 
# umount /testmnt1/
# umount /testmnt2/
# umount /testmnt3/
# mount -V vxfs /dev/vx/dsk/testdg/testvol1 /testmnt1/
# mount -V vxfs /dev/vx/dsk/testdg/testvol2 /testmnt2/
# mount -V vxfs /dev/vx/dsk/testdg/testvol3 /testmnt3/

 

# vxtunefs /testmnt1/ | grep "dalloc_enable"
dalloc_enable = 0
 

# vxtunefs /testmnt2/ | grep "dalloc_enable"
dalloc_enable = 0
 

# vxtunefs /testmnt3/ | grep "dalloc_enable"
dalloc_enable = 0

 

 

2.  Steps for making the VxFS File system tuning values persistent for all file system - System wide default setting
 
This is helpful if you need to apply the tuning system wide. If the system_default is specified instead of block_device, the tunable setting will be applied all the block devices when mounting the file systems.
 
 
i) Create the /etc/vx/tunefstab if it is not there already.
   
# touch /etc/vx/tunefstab
# ls -l /etc/vx/tunefstab

-rw-r--r--    1 root     system           75 Aug 21 17:11 /etc/vx/tunefstab
      
ii) Add the entry to the /etc/vx/tunefstab file as shown in below example :
 
system_default      dalloc_enable=0
 
iii) This can be confirmed after mounting the file system on the device, using the “vxtunefs –p ” command.
 
# vxtunefs /testmnt1/ | grep "dalloc_enable"
dalloc_enable = 0
 
Example:
 

# cat /etc/vx/tunefstab
system_default  dalloc_enable=0
 
# mount -V  vxfs /dev/vx/dsk/testdg/testvol1 /testmnt1/
# mount -V  vxfs /dev/vx/dsk/testdg/testvol2 /testmnt2/
# mount -V  vxfs /dev/vx/dsk/testdg/testvol3 /testmnt3/

 

# vxtunefs /testmnt1/ | grep "dalloc_enable"
dalloc_enable = 0
 

# vxtunefs /testmnt2/ | grep "dalloc_enable"
dalloc_enable = 0

 

# vxtunefs /testmnt3/ | grep "dalloc_enable"
dalloc_enable = 0
 

 
 
Note: The system_default setting is overridden if a block_device is also explicitly specified.
 
For example, if we want to change the system-wide default for dalloc_enable to 0 but do not want to set it for /dev/vx/dsk/testdg/testvol3, then we can achieve this as follows:
 
Example:
 
# cat /etc/vx/tunefstab
system_default  dalloc_enable=0
/dev/vx/dsk/testdg/testvol3 dalloc_enable=1

 
# mount -V  vxfs /dev/vx/dsk/testdg/testvol1 /testmnt1/
# mount -V  vxfs /dev/vx/dsk/testdg/testvol2 /testmnt2/
# mount -V  vxfs /dev/vx/dsk/testdg/testvol3 /testmnt3/

# vxtunefs /testmnt1/ | grep "dalloc_enable"
dalloc_enable = 0

# vxtunefs /testmnt2/ | grep "dalloc_enable"
dalloc_enable = 0

# vxtunefs /testmnt3/ | grep "dalloc_enable"
dalloc_enable = 1

 

 

Applies To

Storage Foundation (SF) 6.X on all supported Operating System (OS) platform

 

Issue/Introduction

VxFS 6.x includes a new feature called “delayed allocation” also known as 'dalloc'. This feature is enabled by default for local mounted file system and is not supported for cluster mounted file systems. Dalloc is triggered when extending a file size and requiring the allocation of new extents to a file. Two issues were noticed relating to dalloc: 1. Whilst performing “delayed allocations” there might be some observable performance degradation for sequential extending write I/O workloads and for sequential+random write I/O workloads. 2. In a file system with highly fragmented freespace, the file system may be unexpectedly disabled, causing an outage for the file system. After the file system is disabled, all I/Os to the file system will fail until the file system is umounted and mounted again.

Additional Information

JIRA: 3308673 (parent) JIRA: 3310642 (solaris) JIRA: 3310647 (HPUX) JIRA: 3310640 (AIX) JIRA: 3308673 (LINUX) ETrack: 3298041