﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Mike,
  
You seem to be missing the point. It isn't the time to update the screen that is meaningful. It is the time to process the messages.
  
I'll have a separate post about it, but let us just say that the same problem exists with no UI as well
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment14</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment14</guid><pubDate>Mon, 21 Sep 2009 17:43:03 GMT</pubDate></item><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Thomas,
  
One of the design goals is to have as little impact as possible on the profiled application.
  
Stopping the profiled application is not an option.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment13</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment13</guid><pubDate>Mon, 21 Sep 2009 17:42:05 GMT</pubDate></item><item><title>Mike Rettig commented on How to lead a convoy to safety</title><description>Can you gain efficiency through batching? For instance, are you updating the screen on every update? With a slow resource such as a UI, file, or socket, batching can give you better throughput by merging updates and limiting the number of slow calls required.
  
  
For Example:
  
  
public void OnBatch(List
&lt;updates updates){
  
    ApplyAll(updates);
  
    UpdateScreen();
  
}
  
  
This way updates are efficiently throttled and the Queue doesn't fall far behind.
  
  
Of course, this is something that Retlang does for you.
  
  
[http://code.google.com/p/retlang/](http://code.google.com/p/retlang/)&gt;  
  
Mike
  
  
  
  
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment12</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment12</guid><pubDate>Mon, 21 Sep 2009 15:07:51 GMT</pubDate></item><item><title>Thomas Krause commented on How to lead a convoy to safety</title><description>Instead of dropping messages when you reach a threshold... why not simply block the host application, so it has to wait until it can write the next message to the queue?
  
  
granted, this would reduce the performance of the host application, but if i want to debug/trace my application i usually would want to get all messages, even if it means that my application may run a bit slower while being traced...
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment11</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment11</guid><pubDate>Mon, 21 Sep 2009 14:07:59 GMT</pubDate></item><item><title>Kyle Szklenski commented on How to lead a convoy to safety</title><description>Hm, I wonder if you could do a meta-analysis over a given number of messages knowing that some messages have been dropped. For example, if your profiler could run, say, 10 times on the same system with approximately the same load, you could average together the results, in a sense, to guarantee a stable conclusion. This would probably require some kind of ability to drop pseudo-random messages though, as you wouldn't be able to rely on just dropping when it starts to get overloaded - if you tried that, then you could very well be missing the exact thing which is causing the overload.
  
  
Differently, you could define certain messages (and that which they are dependent on) to be knowingly serializable, then only serialize those with a marker saying where they show up in the queue. This would probably end up creating a scheduling problem over the queue, though, so it's most likely not worth it.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment10</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment10</guid><pubDate>Sun, 20 Sep 2009 16:11:45 GMT</pubDate></item><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Frank,
  
It is possible that this would lead to an Out Of Memory Exception
  
And in general it is better not to try walking that line
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment9</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment9</guid><pubDate>Sun, 20 Sep 2009 10:43:47 GMT</pubDate></item><item><title>Frank Quednau commented on How to lead a convoy to safety</title><description>I didn't think UI was the problem...so I gather that the queuing of messages is absolutely "dumb" in that all possible messages are gathered, while I thought that there might be some form of "pre-processing". I suppose that isn't really possible, though, since defining whether a message is "severe" or not probably involves quite a bit of knowledge (= processor time).
  
  
Otoh, how expensive is RAM these days? If you're profiling an app with such throughput I'd hope that people could spare a few dollars on a couple of GBs.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment8</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment8</guid><pubDate>Sun, 20 Sep 2009 10:28:57 GMT</pubDate></item><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Frank,
  
The problem isn't with showing the information, the problem is in processing it fast enough
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment7</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment7</guid><pubDate>Sun, 20 Sep 2009 09:50:57 GMT</pubDate></item><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Rafal,
  
InitializeOfflineProfiling() - it is there. :-)
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment6</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment6</guid><pubDate>Sun, 20 Sep 2009 09:49:43 GMT</pubDate></item><item><title>Ayende Rahien commented on How to lead a convoy to safety</title><description>Richard,
  
I am sorry, but we have different definitions for what sustained heavy load _means_. When I am talking about this I am talking about doing this for 30 minutes or so of non stop activity. That is rarely the case.
  
Anyway, I already have a branch where I am taking care of this, and I'll publish it sometimes this week.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment5</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment5</guid><pubDate>Sun, 20 Sep 2009 09:47:58 GMT</pubDate></item><item><title>Frank Quednau commented on How to lead a convoy to safety</title><description>My question would be...what questions regarding NH usage can NH Prof answer in a heavy load scenario that couldn't be answered when running the app under less heavy load?
  
  
In such a case it might be OK to have NH Prof "degrade" to processing only messages of severe importance until it catches up again...
  
  
Of course this falls down again if the application is so bitchy that all messages are severe...
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment4</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment4</guid><pubDate>Sun, 20 Sep 2009 09:46:12 GMT</pubDate></item><item><title>Rafal commented on How to lead a convoy to safety</title><description>Maybe you should add an option of offline profiling - some small component would write all the trace information to a log and NH Prof would then be used to analyze that log? Live profiling is a problem in production environment - if you have memory/performance problems and want to analyze that with a profiler, the profiler will add more load to the system and seriously worsen the situation.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment3</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment3</guid><pubDate>Sun, 20 Sep 2009 09:40:45 GMT</pubDate></item><item><title>Richard Dingwall commented on How to lead a convoy to safety</title><description>"not a realistic scenario for NH Prof" &lt;-- I think you overestimate your customers.
  
  
I can think of at least half a dozen pages in one web application I work on that take anything from 70-700 SQL/cache requests per hit (30-40 mapped classes, 500 tables, 30GB database). During this time NH Prof frequently becomes unresponsive, and often remains busy for a few secs after the session ended.
  
  
We know our code is not the best -- using domain models for building a report, automapper resolvers getting more details per item, recursive trees, leaning far too much on the cache etc. Even after lots of fetching/joins/caching tuning there is still lots of SELECT N+1. 
  
  
So unfortunately overloading NH Prof is a very realistic scenario for us.
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment2</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment2</guid><pubDate>Sun, 20 Sep 2009 08:42:29 GMT</pubDate></item><item><title>Tuna Toksoz commented on How to lead a convoy to safety</title><description>Use an object database :)
</description><link>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment1</link><guid>http://ayende.com/4206/how-to-lead-a-convoy-to-safety#comment1</guid><pubDate>Sun, 20 Sep 2009 05:33:09 GMT</pubDate></item></channel></rss>