Hi Fons,
It's pretty easy to do. I would assume you'd role that into your proof
protocol, yes?
Andy
----- Original Message -----
From: "Fons Rademakers" <[log in to unmask]>
To: "Andrew Hanushevsky" <[log in to unmask]>
Cc: "Fabrizio Furano" <[log in to unmask]>; "Jan Iwaszkiewicz"
<[log in to unmask]>; <[log in to unmask]>; <[log in to unmask]>; "Gerri
Ganis" <[log in to unmask]>
Sent: Tuesday, August 22, 2006 2:26 AM
Subject: Re: Quering locations of a vector of files
> Hi Andy,
>
> that would be no problem assuming we can easily query the oldb admin
> interface. How would this be done, via a popen/pclose or is there on API?
>
> Cheers, Fons.
>
>
>
> Andrew Hanushevsky wrote:
>> Hi Fons,
>>
>> It would probably be relatively easy to do if the query was entered via
>> the OLB admin interface. It's more difficult to do via an xroot protocol
>> query request. Would that satisfy you?
>>
>> Andy
>>
>> ----- Original Message ----- From: "Fons Rademakers"
>> <[log in to unmask]>
>> To: "Fabrizio Furano" <[log in to unmask]>
>> Cc: "Jan Iwaszkiewicz" <[log in to unmask]>; <[log in to unmask]>;
>> <[log in to unmask]>; "Gerri Ganis" <[log in to unmask]>
>> Sent: Saturday, August 19, 2006 3:02 PM
>> Subject: Re: Quering locations of a vector of files
>>
>>
>>> Hi Andy, Fabrizio,
>>>
>>> what we really urgently would like to have is an xrootd command that
>>> takes as input a vector of generic xrootd urls and returns a vector with
>>> resolved urls (including multiple urls in case the same file exists on
>>> more than one leaf node). Of course the first time this will take some
>>> time since the head node will have to ask the leaf nodes, but from then
>>> on this info lives in the xrootd head node cache, so it should be very
>>> quick. We need the final location in PROOF to submit work packets with
>>> priority to the nodes that have the data local.
>>>
>>> Can you tell me if this feature is possible and if we can get it soon?
>>>
>>> Cheers, Fons.
>>>
>>>
>>>
>>> Fabrizio Furano wrote:
>>>> Hi Jan,
>>>>
>>>> I see, imho this means that there is very little overhead you can
>>>> overlap, at least on the client side. Or that you are opening all those
>>>> files towards very few servers, or the same one. I hope not.
>>>>
>>>> Anyway the async open was not meant as a way to speed up the open
>>>> primitive, but as a way to do other things while the open is in
>>>> progress, or to stage many files in parallel without serializing the
>>>> waits. But in your situation it seems that there are not so many waits
>>>> to parallelize.
>>>>
>>>> Fabrizio
>>>>
>>>>
>>>> Jan Iwaszkiewicz wrote:
>>>>> Hi!
>>>>>
>>>>> I have done some test as Fabrizio advised.
>>>>> The results of tests with asynchronous open are similar to those with
>>>>> standard open:
>>>>>
>>>>> I used the following code:
>>>>>
>>>>> TTime starttime = gSystem->Now();
>>>>> TList *toOpenList = new TList();
>>>>> toOpenList->SetOwner(kFALSE);
>>>>> TIter nextElem(fDset->GetListOfElements());
>>>>> while (TDSetElement *elem =
>>>>> dynamic_cast<TDSetElement*>(nextElem())) {
>>>>> TFile::AsyncOpen(elem->GetFileName());
>>>>> toOpenList->Add(elem);
>>>>> }
>>>>>
>>>>> TFile::EAsyncOpenStatus aos;
>>>>> TIter nextToOpen(toOpenList);
>>>>> while (toOpenList->GetSize() > 0) {
>>>>> while (TDSetElement* elem =
>>>>> dynamic_cast<TDSetElement*>(nextToOpen())) {
>>>>> aos = TFile::GetAsyncOpenStatus(elem->GetFileName());
>>>>> if (aos == TFile::kAOSSuccess || aos == TFile::kAOSNotAsync
>>>>> || aos == TFile::kAOSFailure) {
>>>>> elem->Lookup();
>>>>> toOpenList->Remove(elem);
>>>>> }
>>>>> else if (aos != TFile::kAOSInProgress)
>>>>> Error("fileOpenTestTmp", "unknown aos");
>>>>> }
>>>>> nextToOpen.Reset();
>>>>> };
>>>>> toOpenList->Delete();
>>>>>
>>>>> TTime endtime = gSystem->Now();
>>>>> Float_t time_holder = Long_t(endtime-starttime)/Float_t(1000);
>>>>> cout << "Openning time was " << time_holder << " seconds" << endl;
>>>>>
>>>>>
>>>>> The result is:
>>>>>
>>>>> #files asynchronous standard TFile::Open
>>>>> 300 12.5 11.7
>>>>> 240 9.68 9.4
>>>>> 120 4.5 4.6
>>>>>
>>>>> Have a nice weekend!
>>>>> Jan
>>>>>
>>>>> Jan Iwaszkiewicz wrote:
>>>>>> Hi Fabrizio, Hi Andy!
>>>>>>
>>>>>> Thank you for the answers.
>>>>>> I'm making tests with TFile::AsyncOpen and will keep you informed.
>>>>>> Maybe I should clarify that we want to lookup locations of the files
>>>>>> on the PROOF master node but then open the files on worker nodes. The
>>>>>> point of the lookup is to determine what files each worker will
>>>>>> open/process. For the problems that Andy described:
>>>>>> 1) I agree. 2) It seems to be even more important to parallelize it.
>>>>>>
>>>>>> In fact the possibility to get all locations of a file is also high
>>>>>> on our wish-list. It would prevent us from opening a remote file
>>>>>> while another copy is on one of our workers. We have no mechanism to
>>>>>> avoid it. I think it's quite different use case than file serving. We
>>>>>> want to make best use of a set of nodes belonging to a PROOF session.
>>>>>> It would be very usefull to have this functionality!
>>>>>> Cheers,
>>>>>> Jan
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Andrew Hanushevsky [mailto:[log in to unmask]]
>>>>>> Sent: Wed 8/16/2006 10:47 PM
>>>>>> To: Fabrizio Furano; Jan Iwaszkiewicz
>>>>>> Cc: [log in to unmask]; [log in to unmask]; Gerardo Ganis
>>>>>> Subject: Re: Quering locations of a vector of files
>>>>>> Hi Jan,
>>>>>>
>>>>>> Another way to speed up the processing is to use the Prepare method
>>>>>> that allows you to set in motion all the steps needed to get file
>>>>>> location information. As far as finding out the location of a list of
>>>>>> files, that may be doable but has problems of its own. In your case
>>>>>> it probably doesn't matter but in the general case two things may
>>>>>> happen: 1) the location may be incorrect by the time you get the
>>>>>> information (i.e., the file has been moved or deleted), and 2) there
>>>>>> is no particular location for files that don't exist yet (this
>>>>>> includes files that may be in an MSS but not yet on disk). The latter
>>>>>> is more problematical as it takes a while to determine that. Anyway,
>>>>>> we'll look into a mechanism to get you file location information (one
>>>>>> of n for each file) using a list.
>>>>>>
>>>>>> Andy
>>>>>>
>>>>>> ----- Original Message ----- From: "Fabrizio Furano"
>>>>>> <[log in to unmask]>
>>>>>> To: "Jan Iwaszkiewicz" <[log in to unmask]>
>>>>>> Cc: <[log in to unmask]>; "Maarten Ballintijn"
>>>>>> <[log in to unmask]>; "Gerri Ganis" <[log in to unmask]>
>>>>>> Sent: Wednesday, August 16, 2006 10:09 AM
>>>>>> Subject: Re: Quering locations of a vector of files
>>>>>>
>>>>>>
>>>>>>> Hi Jan,
>>>>>>>
>>>>>>> at the moment such a primitive is not part of the protocol. The
>>>>>>> simpler way of doing it is to call Stat for each file, but this
>>>>>>> reduces the per-file overhead only by a small amount, with respect
>>>>>>> to a Open call.
>>>>>>> In fact, both primitives actually drive the client to the final
>>>>>>> endpoint (the file), so you cannot avoid the overhead (mainly
>>>>>>> communication latencies) of being redirected to other servers.
>>>>>>>
>>>>>>> Since you say it's critical for you, my suggestion is to open as
>>>>>>> many files as you can in the parallel way. Doing so, all the
>>>>>>> latencies are parallelized, and you can expect a much higher
>>>>>>> performance.
>>>>>>>
>>>>>>> To do this, just call TFile::AsyncOpen(fname) for each file you
>>>>>>> need to open (a cycle), and then, later, you can call the regular
>>>>>>> TFile::Open (another cycle).
>>>>>>> The async call is non-blocking and very fast. You can find an
>>>>>>> example of its ROOT-based usage here:
>>>>>>>
>>>>>>> http://root.cern.ch/root/Version512.news.html
>>>>>>>
>>>>>>> The ugly thing is that doing this you are using a lot of resources,
>>>>>>> so, if you have really a lot of files to open (let's say, 5000) and
>>>>>>> the resources are a problem, maybe you can find a workaround by
>>>>>>> opening them in bunches of fixed size.
>>>>>>>
>>>>>>> Fabrizio
>>>>>>>
>>>>>>> Jan Iwaszkiewicz wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> In PROOF we realized that we need a possibility to query exact
>>>>>>>> locations of a set of files. As far as I have seen in the xrootd
>>>>>>>> protocol, there is no way to ask for locations of a vector of
>>>>>>>> files.
>>>>>>>>
>>>>>>>> At the beginning of a query, we want to check exact locations of
>>>>>>>> all the files form a data set. The current implementation does it
>>>>>>>> by opening all the files, one by one.
>>>>>>>> The speed is about 30 files/sec. For many queries, the lookup takes
>>>>>>>> much longer than the processing.
>>>>>>>> It is a critical problem for us.
>>>>>>>>
>>>>>>>> The bool XrdClientAdmin::SysStatX(const char *paths_list, kXR_char
>>>>>>>> *binInfo) method can check multiple files but it only verifies
>>>>>>>> whether the files exist.
>>>>>>>> I imagine that it would be best for us to have something similar
>>>>>>>> but returning file locations. Is such an extension to the protocol
>>>>>>>> possible/reasonable to implement?
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Jan
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>
>>> --
>>> Org: CERN, European Laboratory for Particle Physics.
>>> Mail: 1211 Geneve 23, Switzerland
>>> E-Mail: [log in to unmask] Phone: +41 22 7679248
>>> WWW: http://fons.rademakers.org Fax: +41 22 7669640
>>>
>>
>
> --
> Org: CERN, European Laboratory for Particle Physics.
> Mail: 1211 Geneve 23, Switzerland
> E-Mail: [log in to unmask] Phone: +41 22 7679248
> WWW: http://fons.rademakers.org Fax: +41 22 7669640
>
|