Jump to content

JFS (file system): Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Line 46: Line 46:


=== B+ Tree ===
=== B+ Tree ===
JFS will use a B+ Tree to accelerate Lookups in Directorys. JFS can Store 8 entry's of a directory in the Directory's Inode Before moving the Entry's to a [[B+ tree]]. JFS also indexs Extents in a B+ Tree.
A [[B+ tree]] is used to accelerate lookups in larger directories. The B+ tree is also used for the addressing structure with extent descriptors.


=== Dynamic Inode Allocation ===
=== Dynamic Inode Allocation ===

Revision as of 02:53, 22 April 2009

JFS
Developer(s)IBM et al.
Full nameIBM Journaled File System
Introduced1990 and 1999 with JFS1 in AIX 3.1 and JFS in OS/2 4.5
Partition IDs0x35 (MBR)
Structures
Directory contentsB+ tree
File allocationBitmap/extents
Limits
Max volume size32 PiB
Max file size4 PiB
Max no. of filesNo limit defined
Max filename length255 bytes
Allowed filename
characters
Any Unicode except NUL
Features
Dates recordedModification (mtime), Attribute modification (ctime), Access (atime)
Date resolution1ns
ForksYes
AttributesYes
File system
permissions
POSIX, ACLs
Transparent
compression
Only in JFS1 on AIX
Transparent
encryption
No (provided at the block device level)
Data deduplicationNo
Other
Supported
operating systems
AIX, OS/2, Linux

Journaled File System or JFS is a 64-bit journaling filesystem created by IBM. It is available as free software under the terms of the GNU General Public License (GPL). There are versions for AIX, eComStation, OS/2 and Linux operating systems. HP-UX has another, different filesystem named JFS that is actually an OEM version of Veritas Software's VxFS.

In AIX operating system, there exist two generations of JFS filesystem that are called JFS (JFS1) and JFS2 respectively.[1] [2] In the other operating systems, such as OS/2 and Linux, only the second generation exists and is called simply JFS.[3] This should not be confused with JFS in AIX that actually refers to JFS1.

History

IBM introduced JFS with the initial release of AIX version 3.1 in February, 1990. This file system, now called JFS1 on AIX, had been the premier file system for AIX over the following decade and had been installed in thousands or millions of customers' AIX systems. Historically, the JFS1 file system is very closely tied to the memory manager of AIX.[1] This design is typical for a closed source operating system, or a file system supporting only one operating system.

In 1995, work began to enhance the file system to be more scalable and to support machines that had more than one processor. Another goal was to have a more portable file system, capable of running on multiple operating systems. After several years of designing, coding, and testing, the new JFS was first shipped in OS/2 Warp Server for eBusiness in April, 1999, and then in OS/2 Warp Client in October, 2000. In December, 1999, a snapshot of the original OS/2 JFS source was granted to the open source community and work was begun to port JFS to Linux operating system. The first stable release of JFS for Linux appeared in June, 2001.[3]

In parallel with this effort, some of the JFS development team returned to the AIX Operating System Development Group in 1997 and started to move this new JFS source base to the AIX operating system. In May, 2001, a second journaled file system, Enhanced Journaled File System (JFS2), was made available for AIX 5L.[1] [3]

Around the summer of 2007 there was speculation that IBM is no longer interested in maintaining JFS and thus it shouldn't be used in production environments. [4] However early in 2008, a member of the IBM Linux Technology Center explained that they still follow changes in the Linux kernel and try to fix potential software bugs. He went on to add that certain distributions expect a larger resource commitment from them and opt not to support the filesystem. [5]

Features

JFS supports the following features. [6][7]

Journal

JFS is a journaling file system. Rather than adding journaling as an add-on feature like in the ext3 file system, it was implemented from the start. The journal can be up to 128MB. JFS journals metadata only, which means that metadata will remain consistent but user files may be corrupted after a crash or power loss. JFS' journaling is similar to XFS where it only journals parts of the inode. [8]

B+ Tree

JFS will use a B+ Tree to accelerate Lookups in Directorys. JFS can Store 8 entry's of a directory in the Directory's Inode Before moving the Entry's to a B+ tree. JFS also indexs Extents in a B+ Tree.

Dynamic Inode Allocation

JFS dynamically allocates space for disk inodes as necessary. Each inode is 512 Bytes. 32 Inodes are allocated on a 16KB Extent.

Extents

JFS allocates files as an extent. An extent is a variable-length sequence of Aggregate blocks. An extent may be located in several Allocation Group to solve this the extents are indexed in a B+ tree for better performance when locating the extent locations.

Compression

Compression is supported only in JFS1 on AIX and uses a variation of LZ algorithm. Because of high CPU usage and increased free space fragmentation, compression is not recommended for use other than on a single user workstation or off-line backup areas.[2] [9]

Concurrent Input / Output (CIO)

JFS normally applies read-shared, write-exclusive locking to files, which avoids data inconsistencies but imposes write serialization at the file level. The CIO option disables this locking. Applications such as relational databases which maintain data consistency themselves can use this option to largely eliminate filesystem overheads.[10].

Allocation Groups

JFS uses Allocation groups. Allocation groups divide the aggregate space into chunks. This allows JFS to use resource allocation policies to achieve great I/O performance. The first policy is to try to cluster disk blocks and disc inodes for the files to be in the same AG. The second policy is to distribute unrelated data into the same AG. When there is an open file JFS will Lock the AG the file resides in and only allow the file to grow. This Reduces Fragmentation as only the open file can write to the AG.

JFS Superblocks

The superblock maintains information about the entire file system and includes the following fields:

  • Size of the file system
  • Number of data blocks in the file system
  • A flag indicating the state of the file system
  • Allocation group sizes
  • File system block size

JFS in Linux

In the Linux operating system, JFS is supported with the kernel module (since the kernel version 2.4.18pre9-ac4) and the complementary userspace utilities packaged under the name JFSutils (the latest version 1.1.13 released in July, 2008). Most Linux distributions provide support for JFS, unless it is specifically removed due to space restrictions or other concerns.

According to reviews and benchmarks of the available filesystems for Linux, JFS is fast and reliable, with consistently good performance under different kinds of load, contrary to other filesystems that seem to perform better under particular usage patterns, for instance with small or large files. Another characteristic often mentioned, is that it's light and efficient with available system resources and even heavy disk activity is realized with low CPU usage. [11] [12]

See also

References

  1. ^ a b c "A mini-FAQ for JFS". JFS for Linux project.
  2. ^ a b "Comparison of JFS1 and JFS2 on AIX". IBM.
  3. ^ a b c "Interview With the People Behind JFS, ReiserFS & XFS".
  4. ^ Re: which to use: ext3, JFS, XFS, ReiserFS?
  5. ^ SourceForge.net: jfs-discussion
  6. ^ "JFS overview". Steve Best, IBM. Retrieved 2008-01-09.
  7. ^ "JFS Layout" (PDF). Steve Best, IBM. Retrieved 2008-05-01.
  8. ^ David Kleikamp. "JFS journal". OSDIR.
  9. ^ "AIX Wiki: JFS". IBM.
  10. ^ Improving Database Performance With AIX Concurrent I/O - White Paper
  11. ^ Filesystems (ext3, reiser, xfs, jfs) comparison on Debian Etch
  12. ^ http://fsbench.netnation.com/