The new POHMELFS release.
Subsystems (6)
cover The new POHMELFS release.
Hello.
I'm pleased to announce the new POHMELFS release.
This is a major change in the Parallel Optimized Host Message Exchange Layered File System: completely rewritten distributed (byte-range) locking subsystem. Locks are actually byte-range, but since every Linux FS locks the whole inode, POHMELFS locks also do this. Multiple writers are somewhat serialized and thus cache is coherent (pages either contain valid data or they are not uptodate) on all clients at any time.
Other changes made in this release:
* Documentation update. Fixed by Adam Langley (agl_imperialviolet.org)
* Add/del/show commands patch from Varun Chandramohan (varunc_linux.vnet.ibm.com)
* Bug fixes and cleanups.
POHMELFS is a very high performance parallel network filesystem with local coherent cache of data and metadata. Its main goal is distributed processing of the data.
Features supported by POHMELFS:
* Local coherent cache for data and metadata.
* Completely async processing of all events (hard and symlinks are the only exceptions) including object creation and data reading and writing.
* Flexible object architecture optimized for network processing. Ability to create long pathes to object and remove arbitrary huge directories in single network command.
* High performance is one of the main design goals.
* Very fast and scalable multithreaded userspace server. Being in userspace it works with any underlying filesystem and still is much faster than async in-kernel NFS one.
* Transactions support. Full failover for all operations. Resending transactions to different servers on timeout or error.
* Client is able to switch between different servers (if one goes down, client automatically reconnects to second and so on).
* Client parallel extensions: ability to write to multiple servers and balance reading between them.
* Client dynamical server reconfiguration: ability to add/remove servers from working set in run-time.
* Strong authentification and possible data encryption in network channel.
POHMELFS roadmap now includes distributed and parallel facilities of the server.
1. POHMELFS homepage.
http://tservice.net.ru/~s0mbre/old/?section=projects&item=pohmelfs
2. POHMELFS archive.
http://tservice.net.ru/~s0mbre/archive/pohmelfs/
3. GIT trees.
http://tservice.net.ru/~s0mbre/cgi-bin/gitweb.cgi
4. Development status.
http://tservice.net.ru/~s0mbre/blog//devel/fs
Signature · 1 line
Evgeniy Polyakov
PATCH 1/3 POHMELFS: vfs changes.
mm/filemap.c +2 -0
@@ -495,6 +495,7 @@ int add_to_page_cache_lru(struct page *page, struct address_space *mapping,lru_cache_add (page);return ret; } +EXPORT_SYMBOL_GPL (add_to_page_cache_lru);#ifdef CONFIG_NUMA struct page *__page_cache_alloc (gfp_t gfp)
@@ -610,6 +611,7 @@ int __lock_page_killable(struct page *page)return __wait_on_bit_lock (page_waitqueue (page), &wait, sync_page_killable,TASK_KILLABLE ); } +EXPORT_SYMBOL_GPL (__lock_page_killable);/** * __lock_page_nosync - get a lock on the page, without calling sync_page()
Signature · 1 line
Evgeniy Polyakov
PATCH 2/3 POHMELFS: documentation.
In reply to Evgeniy PolyakovDocumentation/filesystems/pohmelfs/design_notes.txt new file +69 -0
@@ -0,0 +1,69 @@ +POHMELFS: Parallel Optimized Host Message Exchange Layered File System. + + Evgeniy Polyakov <[email protected]> + +Homepage: http://tservice.net.ru/~s0mbre/old/?section=projects&item=pohmelfs + +POHMELFS first began as a network filesystem with coherent local data and +metadata caches but is now evolving into a parallel distributed filesystem. + +Main features of this FS include: + * Locally coherent cache for data and metadata with (potentially) byte-range locks. + Since all Linux filesystems lock the whole inode during writing, algorithm + is very simlpe and does not use byte-ranges, although they are sent in + locking messages. + * Completely async processing of all events except hard, symlinks and rename events. + Object creation and data reading and writing are processed asynchronously. + * Flexible object architecture optimized for network processing. + Ability to create long paths to objects and remove arbitrarily huge + directories with a single network command. + (like removing the whole kernel tree via a single network command). + * Very high performance. + * Fast and scalable multithreaded userspace server. Being in userspace it works + with any underlying filesystem and still is much faster than async in-kernel NFS one. + * Client is able to switch between different servers (if one goes down, client + automatically reconnects to second and so on). + * Transactions support. Full failover for all operations. + Resending transactions to different servers on timeout or error. + * Read request (data read, directory listing, lookup requests) balancing between multiple servers. + * Write requests are replicated to multiple servers and completed only when all of them are acked. + * Ability to add and/or remove servers from the working set at run-time from userspace (via + netlink, so the same command could be processed from a real network. However, since + the server does not support it yet, I dropped the network part). + +POHMELFS is based on transactions, which are potentially long-standing objects that live +in the client's memory. Each transaction contains all the information needed to process a given +command (or set of commands, which is frequently used during data writing: single transactions +can contain creation and data writing commands). Transactions are committed by all the servers +to which they are sent and, in case of failures, are eventually resent or dropped with an error. +For example, reading will return error if no servers are available. + +POHMELFS uses a asynchronous approach to data processing. Courtesy of transactions, it is +possible to detach replies from requests and, if the command requires data to be received, the +caller sleeps waiting for it. Thus, it is possible to issue multiple read commands to different +servers and async threads will pickup replies in parallel, find appropriate transactions in the +system and put the data where it belongs (like the page or inode cache). + +The main feature of POHMELFS is writeback data and the metadata cache. +Only a few non-performance critical operations use the write-through cache and +are synchronous: hard and symbolic link creation, and object rename. Creation +and removal of objects, as long as writing, are asynchronous and are sent to +the server during system writeback. Only one writer at a time is allowed for any +given inode, which is guarded by appropriate locking protocol. +Because of this feature, POHMELFS is extremely fast at metadata intensive +workloads and can fully utilize the bandwidth to the servers when doing bulk +data transfers. + +POHMELFS clients operate with a working set of servers and are capable of balancing read-only +operations (like lookups or directory listings) between them. +Administrators can add or remove servers from the set at run-time via special commands (described +in Documentation/pohmelfs/info.txt file). Writes are replicated to all servers. + +POHMELFS is capable of full data channel encryption and/or strong crypto hashing. +One can select any kernel supported cipher, encryption mode, hash type and operation mode +(hmac or digest). It is also possible to use both or neither (default). Crypto configuration +is checked during mount time and, if the server does not support it, appropriate capabilities +will be disabled or mount will fail (if 'crypto_fail_unsupported' mount option is specified). +Crypto performance heavily depends on the number of crypto threads, which asynchronously perform +crypto operations and send the resulting data to server or submit it up the stack. This number +can be controlled via a mount option.
Documentation/filesystems/pohmelfs/info.txt new file +84 -0
84 lines not on this page · raw message
Documentation/filesystems/pohmelfs/network_protocol.txt new file +217 -0
217 lines not on this page · raw message
Signature · 1 line
Evgeniy Polyakov
PATCH 3/3 POHMELFS: core.
In reply to Evgeniy Polyakovfs/Kconfig +2 -0
@@ -1566,6 +1566,8 @@ menuconfig NETWORK_FILESYSTEMS if NETWORK_FILESYSTEMS +source "fs/pohmelfs/Kconfig" + config NFS_FS tristate "NFS file system support" depends on INET
fs/Makefile +1 -0
@@ -119,3 +119,4 @@ obj-$(CONFIG_HPPFS) += hppfs/ obj-$(CONFIG_DEBUG_FS) += debugfs/ obj-$(CONFIG_OCFS2_FS) += ocfs2/ obj-$(CONFIG_GFS2_FS) += gfs2/ +obj-$(CONFIG_POHMELFS) += pohmelfs/
fs/pohmelfs/Kconfig new file +23 -0
@@ -0,0 +1,23 @@ +config POHMELFS + tristate "POHMELFS filesystem support" + select CONNECTOR + help + POHMELFS stands for Parallel Optimized Host Message Exchange Layered File System. + This is a network filesystem which supports coherent caching of data and metadata + on clients. + +config POHMELFS_DEBUG + bool "POHMELFS debugging" + depends on POHMELFS + default n + help + Turns on excessive POHMELFS debugging facilities. + You usually do not want to slow things down noticebly and get really lots of kernel + messages in syslog. + +config POHMELFS_CRYPTO + bool "POHMELFS crypto support" + depends on CONFIG_CRYPTO_BLKCIPHER && CONFIG_CRYPTO_HASH + help + This option allows to encrypt and/or protect with strong cryptographic hash all dataflow + between server and clients. Each config group can have own keys.
fs/pohmelfs/Makefile new file +3 -0
@@ -0,0 +1,3 @@ +obj-$(CONFIG_POHMELFS) += pohmelfs.o + +pohmelfs-y := inode.o config.o dir.o net.o path_entry.o trans.o crypto.o lock.o
fs/pohmelfs/config.c new file +457 -0
457 lines not on this page · raw message
fs/pohmelfs/crypto.c new file +865 -0
865 lines not on this page · raw message
fs/pohmelfs/dir.c new file +1176 -0
1,176 lines not on this page · raw message
fs/pohmelfs/inode.c new file +1791 -0
464 lines not on this page · raw message
fs/pohmelfs/lock.c new file +303 -0
303 lines not on this page · raw message
fs/pohmelfs/net.c new file +1048 -0
1,048 lines not on this page · raw message
fs/pohmelfs/netfs.h new file +842 -0
842 lines not on this page · raw message
fs/pohmelfs/path_entry.c new file +356 -0
356 lines not on this page · raw message
fs/pohmelfs/trans.c new file +719 -0
719 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
Evgeniy Polyakov
Part of the diff is not shown here. View the raw message.