[Barrelfish-users] How to deal with file I/O on SCC

Shi Jinghao jhshi at cs.hku.hk
Tue Nov 27 08:29:16 CET 2012

Hi Simon,

Thanks for your reply! I've followed your first suggestion and it works!
Didn't try the NFS way though. And the command line tweaking is just not

For those who may also concern. let me elaborate a little bit. To access a
file named "test.dat" in my program, I did the following.

1) Create a cpio archive named test_ramfs.cpio. The name is arbitrary but
must ends with _ramfs.cpio

$ find test.dat -print | cpio -o > test_ramfs.cpio

2) gzip it

$ gzip test_ramfs.cpio

3) Put the file generated in last step ("test_ramfs.cpio.gz") into /build
directory, and then add this line in menu.lst.scc

module /test_ramfs.cpio.gz

4) Add this line in app's Hakefile to link to libvfs

addLibraries = libDeps [ "vfs", "OTHER LIBS" ],

5) In app code, call vfs_init and then open the file. Its path is

FILE* input = fopen("/test.dat", "r");


On Tue, Nov 27, 2012 at 3:13 AM, Simon Peter <speter at inf.ethz.ch> wrote:

>  Hi Jinghao,
> Both options work. Barrelfish has a filesystem that should be sufficient
> for your needs. You can do any of:
> 1. Include the file in the RAM disk (gzipped or not), by adding it as a
> module to the menu.lst.scc file. If you want to gzip it, you have to put it
> in a cpio archive and postfix it _ramfs.cpio.gz. Look at the
> skb_ramfs.cpio.gz file for reference. Barrelfish has a native file system
> interface in include/vfs/vfs.h and both C and POSIX compatible ones in the
> standard headers. You might need to call vfs_init() in your program and
> link to libvfs.a, but the rest should "just work".
> 2. Use NFS. You need to have your SCC connected to the network and make
> sure that the network driver works.
> 3. Tweak the linker parameters to include your data as an array directly
> in your executable. I don't know why your program just halts when you set
> it to a very high address, but it's likely you've put it on top of other
> sensitive data structures.
> Hope this helps,
> Simon
> On 12-11-26 03:22 AM, Shi Jinghao wrote:
> Hi,
>  I'm porting a benchmark program to Barrelfish (SCC). This program needs
> to read input from a file. But I didn't find any file I/O interface from
> the Barrelfish doc or from the source code. Any ideas on this?
>  Currently, I first format the input file and then include it within a
> static array declaration. The expanded array size will be about 20M. The
> following compile error occurs:
>  /usr/bin/ld: section .data.rel.ro loaded at
> [0000000000600000,0000000000600723] overlaps section .rodata loaded at
> [00000000003a39c0,00000000016c7f77]
>  And from the command line, I found these options:
>  -Wl,-section-start,.text=0x300000 -Wl,-section-start,.data.rel.ro
> =0x600000
>  Does it mean that the text section must fit in [0x300000, 0x600000]? I
> tried to move the data.rel.ro section to some other address like
> 0x6000000, but the program just halts. If Barrelfish (scc) doesn't not
> support file system at the moment, is it possible that I tweak these
> parameters and get the giant array fits ?
>  Thanks,
> Jinghao
> _______________________________________________
> Barrelfish-users mailing listBarrelfish-users at lists.inf.ethz.chhttps://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.inf.ethz.ch/pipermail/barrelfish-users/attachments/20121127/c8ff7dcb/attachment-0001.html 

More information about the Barrelfish-users mailing list