The ASM Free Space Table (FST) provides a summary of which allocation table blocks have free space. It contains an array of bit patterns indexed by allocation table block number. The table is used to speed up the allocation of new allocation units by avoiding reading blocks that are full.
The FST is technically part of the Allocation Table (AT), and is at block 1 of the AT. The Free Space Table, and the Allocation Table are so called physically addressed metadata, as they are always at the fixed location on each ASM disk.
Locating the Free Space Table
The location of the FST block is stored in the ASM disk header (field kfdhdb.fstlocn). In the following example, the lookup of that field in the disk header, shows that the FST is in block 1.
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
Let’s have a closer look at the FST:
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 2 ; 0x002: KFBTYP_FREESPC
…
kfdfsb.aunum: 0 ; 0x000: 0x00000000
kfdfsb.max: 254 ; 0x004: 0x00fe
kfdfsb.cnt: 254 ; 0x006: 0x00fe
kfdfsb.bound: 0 ; 0x008: 0x0000
kfdfsb.flag: 1 ; 0x00a: B=1
kfdfsb.ub1spare: 0 ; 0x00b: 0x00
kfdfsb.spare[0]: 0 ; 0x00c: 0x00000000
kfdfsb.spare[1]: 0 ; 0x010: 0x00000000
kfdfsb.spare[2]: 0 ; 0x014: 0x00000000
kfdfse[0].fse: 119 ; 0x018: FREE=0x7 FRAG=0x7
kfdfse[1].fse: 16 ; 0x019: FREE=0x0 FRAG=0x1
kfdfse[2].fse: 16 ; 0x01a: FREE=0x0 FRAG=0x1
kfdfse[3].fse: 16 ; 0x01b: FREE=0x0 FRAG=0x1
…
kfdfse[4037].fse: 0 ; 0xfdd: FREE=0x0 FRAG=0x0
kfdfse[4038].fse: 0 ; 0xfde: FREE=0x0 FRAG=0x0
kfdfse[4039].fse: 0 ; 0xfdf: FREE=0x0 FRAG=0x0
For this FST block, the first allocation table block is in AU 0:
Maximum number of the FST entries this block can hold is 254:
How many Free Space Tables
Large ASM disks may have more than one stride. The field kfdhdb.mfact in the ASM disk header, shows the stride size – expressed in allocation units. Each stride will have its own physically addressed metadata, which means that it will have its own Free Space Table.
The second stride will have its physically addressed metadata in the first AU of the stride. Let’s have a look.
kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80
This shows the stride size is 113792 AUs. Let’s check the FST for the second stride. That should be in block 1 in AU113792.
kfbh.type: 2 ; 0x002: KFBTYP_FREESPC
As expected, we have another FTS in AU113792. If we had another stride, there would be another FST at the beginning of that stride. As it happens, I have a large disk, with few strides, so we see the FST at the beginning at the third stride as well:
kfbh.type: 2 ; 0x002: KFBTYP_FREESPC
Conclusion
The Free Space Table is in block 1 of allocation unit 0 of every ASM disks. If the disk has more than one stride, each stride will have its own Free Space Table.
Comment