xfs
[Top] [All Lists]

[PATCH 15/22] xfsdocs: document the operation of the realtime device and

To: hch@xxxxxxxxxxxxx, david@xxxxxxxxxxxxx, darrick.wong@xxxxxxxxxx
Subject: [PATCH 15/22] xfsdocs: document the operation of the realtime device and inodes
From: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx>
Date: Sat, 19 Dec 2015 01:13:51 -0800
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <20151219091208.15558.65013.stgit@xxxxxxxxxxxxxxxx>
References: <20151219091208.15558.65013.stgit@xxxxxxxxxxxxxxxx>
User-agent: StGit/0.17.1-dirty
Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
---
 .../allocation_groups.asciidoc                     |   17 +++++++++-
 design/XFS_Filesystem_Structure/docinfo.xml        |    1 +
 .../internal_inodes.asciidoc                       |   35 +++++++++++---------
 3 files changed, 36 insertions(+), 17 deletions(-)


diff --git a/design/XFS_Filesystem_Structure/allocation_groups.asciidoc 
b/design/XFS_Filesystem_Structure/allocation_groups.asciidoc
index 346f1b2..9ba26c2 100644
--- a/design/XFS_Filesystem_Structure/allocation_groups.asciidoc
+++ b/design/XFS_Filesystem_Structure/allocation_groups.asciidoc
@@ -909,5 +909,18 @@ been fully allocated.
 [[Real-time_Devices]]
 == Real-time Devices
 
-TODO
-
+The performance of the standard XFS allocator varies depending on the internal
+state of the various metadata indices enabled on the filesystem.  For
+applications which need to minimize the jitter of allocation latency, XFS
+supports the notion of a ``real-time device''.  This is a special device
+separate from the regular filesystem where extent allocations are tracked with
+a bitmap and free space is indexed with a two-dimensional array.  If an inode
+is flagged with +XFS_DIFLAG_REALTIME+, its data will live on the real time
+device.  The metadata for real time devices is discussed in the section about
+xref:Real-time_Inodes[real time inodes].
+
+By placing the real time device (and the journal) on separate high-performance
+storage devices, it is possible to reduce most of the unpredictability in I/O
+response times that come from metadata operations.
+
+None of the XFS per-AG B+trees are involved with real time files.
diff --git a/design/XFS_Filesystem_Structure/docinfo.xml 
b/design/XFS_Filesystem_Structure/docinfo.xml
index a6a992b..9bcecad 100644
--- a/design/XFS_Filesystem_Structure/docinfo.xml
+++ b/design/XFS_Filesystem_Structure/docinfo.xml
@@ -86,6 +86,7 @@
                                <member>Add some missing xfs_db 
examples.</member>
                                <member>Add an overview of XFS.</member>
                                <member>Document the journal format.</member>
+                               <member>Document the realtime device.</member>
                        </simplelist>
                </revdescription>
        </revision>
diff --git a/design/XFS_Filesystem_Structure/internal_inodes.asciidoc 
b/design/XFS_Filesystem_Structure/internal_inodes.asciidoc
index 837f025..c21f8b4 100644
--- a/design/XFS_Filesystem_Structure/internal_inodes.asciidoc
+++ b/design/XFS_Filesystem_Structure/internal_inodes.asciidoc
@@ -160,24 +160,29 @@ Bitmap Inode and the Summary Inode.
 [[Real-Time_Bitmap_Inode]]
 === Real-Time Bitmap Inode
 
-The Bitmap Inode tracks the used/free space in the real-time device using an
-old-style bitmap. One bit is allocated per real-time extent. The size of an
-extent is specified by the superblock's +sb_rextsize+ value.
+The real time bitmap inode, +sb_rbmino+, tracks the used/free space in the
+real-time device using an old-style bitmap. One bit is allocated per real-time
+extent. The size of an extent is specified by the superblock's +sb_rextsize+
+value.
 
 The number of blocks used by the bitmap inode is equal to the number of
-real-time extents (+sb_rextents+) divided by the block size (+sb_blocksize+) 
and
-bits per byte. This value is stored in +sb_rbmblocks+. The nblocks and extent
-array for the inode should match this.
-
-[source, c]
-       xfs_ino_t               sb_rbmino;
+real-time extents (+sb_rextents+) divided by the block size (+sb_blocksize+)
+and bits per byte. This value is stored in +sb_rbmblocks+. The nblocks and
+extent array for the inode should match this.  Each real time block gets its
+own bit in the bitmap.
 
 [[Real-Time_Summary_Inode]]
 === Real-Time Summary Inode
 
-The Summary Inode keeps the used/free space accounting information for the
-real-time device.
-
-[source, c]
-       xfs_ino_t               sb_rsumino;
-
+The real time summary inode, +sb_rsumino+, tracks the used and free space
+accounting information for the real-time device.  This file indexes the
+approximate location of each free extent on the real-time device first by
+log2(extent size) and then by the real-time bitmap block number.  The size of
+the summary inode file is equal to +sb_rbmblocks+ Ã log2(realtime device size)
+Ã sizeof(+xfs_suminfo_t+).  The entry for a given log2(extent size) and
+rtbitmap block number is 0 if there is no free extents of that size at that
+rtbitmap location, and positive if there are any.
+
+This data structure is not particularly space efficient, however it is a very
+fast way to provide the same data as the two free space B+trees for regular
+files since the space is preallocated and metadata maintenance is minimal.

<Prev in Thread] Current Thread [Next in Thread>