I have no idea how definitive this is, but literally it means wall
clock time seems to be how CPU cost is measured. I guess this makes
sense for a few different reasons.

I found some internal function
"google3.apphosting.runtime._apphosting_runtime___python__apiproxy.get_request_cpu_usage"
with the docstring:

    Returns the number of megacycles used so far by this request.
    Does not include CPU used by API calls.

Calling it, then running time.sleep(5), then calling it again,
indicates thousands of megacycles used, yet in real terms the CPU was
probably doing nothing. I guess Datastore CPU, etc., is added on top
of this, but it seems to suggest to me that if you can drastically
reduce request time, quota usage should drop too.

I have yet to do any kind of rough measurements of Datastore CPU, so
I'm not sure how correct this all is.


David.

 - One of the guys on IRC suggested this means that per-request cost
is scaled during peak usage (and thus internal services running
slower).

2009/3/16 peterk <peter.ke...@gmail.com>:
>
> A couple of questions re. CPU usage..
>
> "CPU time quota appears to be calculated based on literal time"
>
> Can you clarify what you mean here? I presume each async request eats
> into your CPU budget. But you say:
>
> "since you can burn a whole lot more AppEngine CPU more cheaply using
> the async api"
>
> Can you clarify how that's the case?
>
> I would guess as long as you're being billed for the cpu-ms spent in
> your asynchronous calls, Google would let you hang yourself with them
> when it comes to billing.. :) so I presume they'd let you squeeze in
> as many as your original request, and its limit, will allow for?
>
> Thanks again.
>
>
> On Mar 16, 2:00 pm, David Wilson <d...@botanicus.net> wrote:
>> It's completely undocumented (at this stage, anyway), but definitely
>> seems to work. A few notes I've come gathered:
>>
>>  - CPU time quota appears to be calculated based on literal time,
>> rather than e.g. the UNIX concept of "time spent in running state".
>>
>>  - I can fetch 100 URLs in 1.3 seconds from a machine colocated in
>> Germany using the asynchronous API. I can't begin to imagine how slow
>> (and therefore expensive in monetary terms) this would be using the
>> standard API.
>>
>>  - The user-specified callback function appears to be invoked in a
>> separate thread; the RPC isn't "complete" until this callback
>> completes. The callback thread is still subject to the request
>> deadline.
>>
>>  - It's a standard interface, and seems to have no parallel
>> restrictions at least for urlfetch and Datastore. However, I imagine
>> that it's possible restrictions may be placed here at some later
>> stage, since you can burn a whole lot more AppEngine CPU more cheaply
>> using the async api.
>>
>>  - It's "standard" only insomuch as you have to fiddle with
>> AppEngine-internal protocolbuffer definitions for each service type.
>> This mostly means copy-pasting the standard sync call code from the
>> SDK, and hacking it to use pubsubhubub's proxy code.
>>
>> Per the last point, you might be better waiting for an officially
>> sanctioned API for doing this, albeit I doubt the protocolbuffer
>> definitions change all that often.
>>
>> Thanks for Brett Slatkin & co. for doing the digging required to get
>> the async stuff working! :)
>>
>> David.
>>
>> 2009/3/16 peterk <peter.ke...@gmail.com>:
>>
>>
>>
>>
>>
>> > Very neat.. Thank you.
>>
>> > Just to clarify, can we use this for all API calls? Datastore too? I
>> > didn't look very closely at the async proxy in pubsubhubub..
>>
>> > Asynchronous calls available on all apis might give a lot to chew
>> > on.. :) It's been a while since I've worked with async function calls
>> > or threading, might have to dig up some old notes to see where I could
>> > extract gains from it in my app. Some common cases might be worth the
>> > community documenting for all to benefit from, too.
>>
>> > On Mar 16, 1:26 pm, David Wilson <d...@botanicus.net> wrote:
>> >> I've created a Google Code project to contain some batch utilities I'm
>> >> working on, based on async_apiproxy.py from pubsubhubbub[0]. The
>> >> project currently contains just a modified async_apiproxy.py that
>> >> doesn't require dummy google3 modules on the local machine, and a
>> >> megafetch.py, for batch-fetching URLs.
>>
>> >>    http://code.google.com/p/appengine-async-tools/
>>
>> >> David
>>
>> >> [0]http://code.google.com/p/pubsubhubbub/source/browse/trunk/hub/async_a...
>>
>> >> --
>> >> It is better to be wrong than to be vague.
>> >>   — Freeman Dyson
>>
>> --
>> It is better to be wrong than to be vague.
>>   — Freeman Dyson
> >
>



-- 
It is better to be wrong than to be vague.
  — Freeman Dyson

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to