Giter VIP home page Giter VIP logo

gassyfs's Introduction

gassyfs - distributed in-memory file system over RDMA

Build Status license

GassyFS is a FUSE-based file system that stores data in distributed remote memory. Remote memory is managed and accessed using GASNet, which supports RDMA over a wide variety of high-performance network interconnects, as well as supporting slower network access methods such as UDP that are useful for development. The Gassy file system is intended to be used in a manner analagous to tmpfs, but when the amount of RAM needed exceeds that of a single node.

Testing

The file system is regularly tested with a variety of workloads. The following workloads are tested for each travis-ci.org build:

  • Run the Tuxera POSIX test suite (test/posix.sh)
  • Build Git and run unit tests (test/git.sh)
  • samtools

An additional set of larger workloads (in addition to those listed above) are run prior to each release:

  • Build the Linux kernel (test/kernel.sh)
  • Build the Ceph storage system (test/ceph.sh)
  • Multiple configurations of iozone (test/iozone.sh)
  • Build PostgreSQL and run tests (test/postgres.sh)

gassyfs's People

Contributors

dotnwat avatar michaelsevilla avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gassyfs's Issues

fs: du reports incorrect space usage

When empty du -sh . reports zero correctly. Other scenarios appears to just count directories.

nwatkins@issdm-36:~/gassyfs/blah$ dd if=/dev/zero of=xyz bs=1M count=1
nwatkins@issdm-36:~/gassyfs/blah$ ls -l
total 0
-rw-rw-r-- 1 nwatkins nwatkins 1048576 Sep  7 11:01 xyz
nwatkins@issdm-36:~/gassyfs/blah$ du -sh .
0       .
nwatkins@issdm-36:~/gassyfs/blah$ mkdir asdf
nwatkins@issdm-36:~/gassyfs/blah$ du -sh .
512     .
nwatkins@issdm-36:~/gassyfs/blah$ cp -a ../rocksdb .
nwatkins@issdm-36:~/gassyfs/blah$ du -sh .
44K     .

flexible storage backend (gasnet, local ram)

We need a flexible mechanism for dealing with different storage backends. For example, with GASNet-[Large|Fast] GASNet performs memory allocation on our behalf and informs us of the address space ranges on each node. With GASNet-Everything we have to allocate and manage our own ranges, and presumably there could me multiple per node. Likewise, a local RAM-based backend could be a special case of this with a local mmap rather than using malloc for each byte.

store policies in inode

We need to get the Lua script into the inode. The pNFS guys said that they defined the layout_hint on a create()... but I'm not sure how they did this without an ioctl.

fs: implement hardlink (needed by ceph compilation)

git clone --recursive https://github.com/ceph/ceph.git
cd ceph
./autogen.sh
./configure --with-debug --with-librocksdb-static
make -j10

Then later

ln: failed to create hard link `.libs/librbd_replay.lax/lt110-libcommon_crc_la-crc32c_intel_fast_asm.o' => `.libs/librbd_replay.lax/libcommon.a/libcommon_crc_la-crc32c_intel_fast_asm.o': Function not implemented
ln: failed to create hard link `.libs/librbd_replay.lax/lt111-libcommon_crc_la-crc32c_intel_fast_zero_asm.o' => `.libs/librbd_replay.lax/libcommon.a/libcommon_crc_la-crc32c_intel_fast_zero_asm.o': Function not implemented
ln: failed to create hard link `.libs/librbd_replay.lax/lt112-libcommon_crc_la-sctp_crc32.o' => `.libs/librbd_replay.lax/libcommon.a/libcommon_crc_la-sctp_crc32.o': Function not implemented
ln: failed to create hard link `.libs/librbd_replay.lax/lt113-linux_version.o' => `.libs/librbd_replay.lax/libcommon.a/linux_version.o': Function not implemented

fs: support fallocate (noop stub)

No need to actually implement this right now because it doesn't affect correctness, as long as there is space available. Wait until new allocator to implement this fully.

fs: wrong modes returned

Testing true for executable when it is not.

nwatkins@node:~/gassyfs/blah/ceph/src$ touch x
nwatkins@node:~/gassyfs/blah/ceph/src$ if [ -x x ]; then echo "executable"; fi
executable
nwatkins@node:~/gassyfs/blah/ceph/src$ ls -lsd x
0 -rw-r--r-- 1 nwatkins zlog-PG0 23448 Sep 10 10:18 x

Normal behavior:

pn1215552:~ nwatkins$ ls -lsd x
0 -rw-r--r--  1 nwatkins  staff  0 Sep 10 10:18 x
pn1215552:~ nwatkins$ if [ -x x ]; then echo "executable"; fi
pn1215552:~ nwatkins$ chmod +x x
pn1215552:~ nwatkins$ ls -lsd x
0 -rwxr-xr-x  1 nwatkins  staff  0 Sep 10 10:18 x
pn1215552:~ nwatkins$ if [ -x x ]; then echo "executable"; fi
executable

fs: extending file doesn't allocate blocks

git clone --recursive https://github.com/ceph/ceph.git
cd ceph
./autogen.sh
./configure --with-debug
make -j10
make check
set_size: ino=57357 old=0 new=65536
bad read block ino=57357 blkid=0 blkssize=0 offset=0 readsize=65536 fsize=65536
gassy: gassy.cc:445: ssize_t Gassy::Read(FileHandle*, off_t, size_t, char*): Assertion `blkid < blks.size()' failed.
*** Caught a fatal signal: SIGABRT(6) on node 0/10
NOTICE: Before reporting bugs, run with GASNET_BACKTRACE=1 in the environment to generate a backtrace. 
bash: line 1: 242544 Aborted                 (core dumped) './gassy' '__AMUDP_SLAVE_PROCESS__' 'issdm-36:59823' 'blah'

fs: symlinks not created correctly during git checkout

The first batch below is inside a gassy mount and the symlink files are zero length and mode=0, even though it does show the link which is probably what is causing the problem.

nwatkins@node:~/gassyfs/blah/ceph$ ls -l src/include/rados
total 0
l--------- 1 nwatkins zlog-PG0      0 Sep 10 09:34 buffer.h -> ../buffer.h
l--------- 1 nwatkins zlog-PG0      0 Sep 10 09:34 crc32c.h -> ../crc32c.h
-rw-r--r-- 1 nwatkins zlog-PG0 102629 Sep 10 09:34 librados.h
-rw-r--r-- 1 nwatkins zlog-PG0  40149 Sep 10 09:34 librados.hpp
-rw-r--r-- 1 nwatkins zlog-PG0    929 Sep 10 09:34 librgw.h
l--------- 1 nwatkins zlog-PG0      0 Sep 10 09:34 memory.h -> ../memory.h
l--------- 1 nwatkins zlog-PG0      0 Sep 10 09:34 page.h -> ../page.h
-rw-r--r-- 1 nwatkins zlog-PG0    465 Sep 10 09:34 rados_types.h
-rw-r--r-- 1 nwatkins zlog-PG0    894 Sep 10 09:34 rados_types.hpp
nwatkins@node:~/gassyfs/blah/ceph$ ls -l ../../ceph/src/include/rados
total 160
lrwxrwxrwx 1 nwatkins zlog-PG0     11 Sep 10 09:35 buffer.h -> ../buffer.h
lrwxrwxrwx 1 nwatkins zlog-PG0     11 Sep 10 09:35 crc32c.h -> ../crc32c.h
-rw-r--r-- 1 nwatkins zlog-PG0 102629 Sep 10 09:35 librados.h
-rw-r--r-- 1 nwatkins zlog-PG0  40149 Sep 10 09:35 librados.hpp
-rw-r--r-- 1 nwatkins zlog-PG0    929 Sep 10 09:35 librgw.h
lrwxrwxrwx 1 nwatkins zlog-PG0     11 Sep 10 09:35 memory.h -> ../memory.h
lrwxrwxrwx 1 nwatkins zlog-PG0      9 Sep 10 09:35 page.h -> ../page.h
-rw-r--r-- 1 nwatkins zlog-PG0    465 Sep 10 09:35 rados_types.h
-rw-r--r-- 1 nwatkins zlog-PG0    894 Sep 10 09:35 rados_types.hpp

fs: support fallocate (noop stub)

No need to actually implement this right now because it doesn't affect correctness, as long as there is space available. Wait until new allocator to implement this fully.

bug: hole in file on cloudlab with infiniband

on cloudlab clemson with two nodes using infiniband we can create files, copy data into gassyfs. we are seeing file holes (a few kb) (or zeros and not a hole) starting at byte 16384, and then after that things are ok. maybe more holes later.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.