[Barrelfish-users] How to use fopen on a span-ed dispatcher on Barrelfish
Andrew Baumann
Andrew.Baumann at microsoft.com
Fri Apr 26 21:20:19 CEST 2013
Hi Georgios,
Yes I was thinking of running separate copies of the program, and then sending frame capabilities between them to establish a shared memory region that occupies part of the address space rather than all of it.
Andrew
-----Original Message-----
From: Georgios Varisteas [mailto:yorgos at kth.se]
Sent: Friday, 26 April 2013 00:54
To: Andrew Baumann; Chothia Zaheer; 郭明宇; barrelfish-users at lists.inf.ethz.ch
Subject: RE: [Barrelfish-users] How to use fopen on a span-ed dispatcher on Barrelfish
Hi Andrew,
> (e.g. if you want to use shared memory, create several dispatchers and
> then send caps between them to map a shared region)
Could you please elaborate on this one?
Specifically, is domain_new_dispatcher_varstack() creating a secondary dispatcher? If yes then I cannot find any other mechanism for creating dispatchers, except through a domain (start several copies of the program, MPI style) which will also create new virtual regions thus defeating the purpose.
Thanks,
Georgios
________________________________________
From: Andrew Baumann [Andrew.Baumann at microsoft.com]
Sent: Friday, April 26, 2013 01:49
To: Chothia Zaheer; 郭明宇; barrelfish-users at lists.inf.ethz.ch
Subject: Re: [Barrelfish-users] How to use fopen on a span-ed dispatcher on Barrelfish
Hi all,
Unless something has changed recently, VFS operations do not work on secondary dispatchers of spanned domains. In fact, the only thing I know that does work reliably on a spanned domain is thread synchronisation primitives. Spanned domains were put together as something of a hack to enable us to run shared-memory benchmarks, but they weren't widely used beyond this and more work is needed to make other parts of the system work with them. Some of the problems are simply lazy code (e.g. assuming that a global variable is local to a dispatcher), but there are harder structural issues to be resolved, including managing capabilities, and abstracting over inherently core-local structures such as waitsets.
As workarounds, I would suggest either avoiding the spanned domain (e.g. if you want to use shared memory, create several dispatchers and then send caps between them to map a shared region), or doing what Zaheer suggested.
Andrew
-----Original Message-----
From: Chothia Zaheer [mailto:zchothia at student.ethz.ch]
Sent: Thursday, 25 April 2013 03:42
To: 郭明宇; barrelfish-users at lists.inf.ethz.ch
Subject: Re: [Barrelfish-users] How to use fopen on a span-ed dispatcher on Barrelfish
[+barrelfish-users]
Hi Guo,
I can reproduce the issue you describe although I don't understand the underlying problem. Adding the list in case someone else can comment.
The step which fails is opening a file on the remote core. Full error message:
ERROR: autorun1.1 in resolve_path() ../lib/vfs/vfs_ramfs.c:81
ERROR: transport error in lookup
Failure: ( kernel) Capability not found (empty slot encountered) [SYS_ERR_CAP_NOT_FOUND]
I also tried opening on the main thread, then reading from the remote core which also fails:
ERROR: autorun1.1 in read_bulk() ../lib/vfs/vfs_ramfs.c:342
ERROR: transport error in read
nRRFaORi:l uraeut:o r( u n 1. 1 i n vkfersnfed_lr) eSald(o)t s.p./elciifbi/evfds f/ovrfs _LfRPdC. c:d1oe0s0
oEt RcROoRn:ta ienrr oanr einn dvpofisn_rte caadp
[SYS_ERR_LRPC_NOT_ENDPOINT]
Failure: ( kernel) Slot specified for LRPC does not contain an endpoint cap [SYS_ERR_LRPC_NOT_ENDPOINT]
As a workaround you may be able to register a stub which shuttles requests to and back from core 0 for processing (using newlib_register_fsops__).
Best,
--Zaheer
From: 郭明宇 [mailto:369389319 at qq.com]
Sent: 25 April 2013 07:11
To: Chothia Zaheer
Subject: How to use fopen on a span-ed dispatcher on Barrelfish
Hi, Zaheer:
May I ask you question about fs on Barrelfish?
I know how to read or write a file on Barrelfish. I can use:
main(){
vfs_init();
fopen();
fread();
fclose();
}
But, when I read a file in a spaned dispatcher. I got some pagefault error. I did this:
func(){
fopen();
fread();
fclose();
}
main(){
vfs_init();
span_a_new_dispatcher_and_create_a_thread_on_it(func);
}
It says that "transport error in lookup" in lib/vfs/vfs_ramfs.c:81
I thought that I may should use vfs_init in the new dispatcher. But after I did that, it told me that vfs_init should not be called twice.
Can you please tell me, how to read a file on a span-ed dispatcher on Barrelfish?
Really really thanks,
Guo Mingyu
_______________________________________________
Barrelfish-users mailing list
Barrelfish-users at lists.inf.ethz.ch
https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
_______________________________________________
Barrelfish-users mailing list
Barrelfish-users at lists.inf.ethz.ch
https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
More information about the Barrelfish-users
mailing list