<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2345487674242969997</id><updated>2009-10-31T05:58:40.273-07:00</updated><title type='text'>PBN's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://p6n.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default'/><link rel='alternate' type='text/html' href='http://p6n.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Babu</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2345487674242969997.post-5279365316689768950</id><published>2007-07-12T18:02:00.000-07:00</published><updated>2008-03-15T18:01:24.495-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interviews'/><title type='text'>Questions to ask in an interview</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Introduction:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-family:georgia;" &gt;I found out that the roles and responsibilities of software engineer positions at two companies  weren't what I had expected. So I think the following list of questions may help clear up some doubts or confusion about a company and/or a project before you decide to join. It also would help a candidate if he/she can think about what he/she needs. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Development Environment:&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Is the build system automated, if yes to how much?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Is there a nightly build and test system in place?&lt;/li&gt;&lt;li&gt;Do developers write tests (unit) to test their code?&lt;/li&gt;&lt;li&gt;Is there a best coding practice guide in place?&lt;/li&gt;&lt;li&gt;Is there a development process (requirements gathering, designing, implementation, testing, etc) in place, if yes what it is?&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Project Manager/Management:&lt;br /&gt;&lt;/span&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;What collaboration tools (IM, Wiki, Mail, etc) are being used?&lt;/li&gt;&lt;li&gt;Is there a central place to store project documents (not necessarily word documents) and easily accessible by everyone in the company?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How is project status gathered and published?&lt;/li&gt;&lt;li&gt;What's the project manager's style of managing projects and people?&lt;/li&gt;&lt;li&gt;What's the background of project manager?&lt;/li&gt;&lt;li&gt;How is the change managed? For example, bug fixes in the version V1 and developing new features for version V2 of a product.&lt;/li&gt;&lt;li&gt;Who takes care of a customer and how, customer problems and bugs in a product?&lt;/li&gt;&lt;li&gt;Does manager has development background and does manager aware of latest technologies?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Organization:&lt;br /&gt;&lt;/span&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Is the organization agile and adapts easily to changes?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Does the organization provide an environment for creativity and innovation?&lt;/li&gt;&lt;li&gt;What kind of office environment (open, cubicle, office, etc) does the organization provide?&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Project(s):&lt;br /&gt;&lt;/span&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Is the project solving significant problems, possibly using innovative/creative ways?&lt;/li&gt;&lt;li&gt;What's a typical release cycle?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Conclusion:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;The above list may help you assess the potential of a job, I think the right way of finding out if a job is suitable for you and you're a suitable candidate for a job is to date a job for 3 months or so.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2345487674242969997-5279365316689768950?l=p6n.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://p6n.blogspot.com/feeds/5279365316689768950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2345487674242969997&amp;postID=5279365316689768950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/5279365316689768950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/5279365316689768950'/><link rel='alternate' type='text/html' href='http://p6n.blogspot.com/2007/06/questions-to-ask-in-interview.html' title='Questions to ask in an interview'/><author><name>Babu</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16195473643674679849'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2345487674242969997.post-275160171659018544</id><published>2007-06-17T08:22:00.000-07:00</published><updated>2007-06-18T05:45:29.218-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project execution'/><category scheme='http://www.blogger.com/atom/ns#' term='Idea'/><title type='text'>Efficient Project Execution (An Idea)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;Problems:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Project Organization:&lt;/span&gt; In most software companies, the project information such as requirements, designs, tasks, discussions, etc is scattered in various documents (word, PowerPoint, spreadsheets, wiki pages, blog, mail, chat, etc).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It's hard to track a project's progress with this disconnected information model, even if they use wiki to create documents they are usually lost in the wiki pages jungle. Any discussions occurred about a project via emails, chat, meetings are lost unless somebody collects and organizes them manually.&lt;/li&gt;&lt;li&gt;It's hard to trace project requirements, designs, tasks, people, milestones, bugs, etc with the information model.&lt;/li&gt;&lt;li&gt;It's hard to learn lessons from previous projects using the disconnected information model.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Project Status:&lt;/span&gt;Usually managers conduct daily or weekly meetings to get status from developers working on a project. Status meetings are expensive. For example, work on a project is halted for about 30 minutes prior to the meeting + time spent in the meeting + 30 minutes after the meeting, this time is per person.&lt;br /&gt;&lt;p&gt;Project managers or developers should be able to answer questions like&lt;/p&gt; &lt;ul&gt;&lt;li&gt;How much time is being spent on what tasks?&lt;/li&gt;&lt;li&gt;Is there heavy context switching going on between unrelated projects or tasks?&lt;/li&gt;&lt;li&gt;What percentage of a project's work is completed?&lt;/li&gt;&lt;li&gt;What are the chances of not completing a project on time?&lt;/li&gt;&lt;li&gt;What tasks (supporting customers, supporting old code, etc) are slowing down the current project?&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Time Tracking:&lt;/span&gt;Usually developers record time they spent on a requirement after a task is completed, rather than continuously recording time, so that it is useful to find out information about context switching between projects or tasks. For example, to calculate amount of time spent on bugs on the previous release versus time spent on a new project or task.&lt;br /&gt;&lt;br /&gt;A typical developer's day may be  as follows&lt;br /&gt;&lt;ul&gt;&lt;li&gt;9:00AM  :Start requirement 1&lt;/li&gt;&lt;li style="color: rgb(255, 0, 0); font-weight: bold;"&gt;10:00AM:Stop previous task, disturbed by a team mate to discuss something.&lt;/li&gt;&lt;li&gt;10:45AM :Start requirement 1&lt;/li&gt;&lt;li&gt;12:00PM :Stop previous task&lt;/li&gt;&lt;li&gt;1:00PM   :Attend status meeting&lt;/li&gt;&lt;li&gt;1:45PM    :Start requirement 1&lt;/li&gt;&lt;li&gt;3:00PM   :Stop previous task, check email and respond.&lt;/li&gt;&lt;li&gt;3:30PM   :Start Requirement 1&lt;/li&gt;&lt;li&gt;5:00PM   :Stop previous task&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The typical time tracking works by recording time taken to finish a task, in the above case it is 5Hrs spent on "requirement 1". The time tracking tool lost the critical information about context switching for example, in the above scenario first interruption (highlighted) resulted in 45 minutes lose.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;We could have an enterprise web application (web2.0) that allows interconnection of projects, requirements, designs, tasks, milestones, bugs, people, blog entries, etc. &lt;p&gt;Here's the laundry list of features of a typical product.&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Create projects.&lt;/li&gt;&lt;li&gt;Add people to projects with various roles.&lt;/li&gt;&lt;li&gt;Create individual requirements (could be as a wiki page).&lt;/li&gt;&lt;li&gt;Allow project members to create various types of tasks for each requirement. The standard tasks could be requirements analysis, design, implementation, test and documentation tasks.&lt;/li&gt;&lt;li&gt;Assign requirements/tasks to team members.&lt;/li&gt;&lt;li&gt;Create milestones by grouping either requirements or tasks.&lt;/li&gt;&lt;li&gt;Associate tasks to requirements.&lt;/li&gt;&lt;li&gt;Associate bugs to requirements.&lt;/li&gt;&lt;li&gt;Associate part of a project to another project to create a dependency.&lt;/li&gt;&lt;li&gt;Allow discussions between two or more members about some requirement to happen from within a requirement wiki page, so that information is recorded and associated to a requirement appropriately.&lt;/li&gt;&lt;li&gt;Allow time tracking per team member as well as for the whole project team. The time tracking would provide information about context switching, amount of time spent on various projects, etc.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Existing Products:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;There are number of products that are available already, for example, basecamp from 37signals.com, it offers disconnected todo lists and time tracking per requirement basis not continuous time tracking. There are also standalone time tracking tools that detect time spent on IDE, browser, etc and they are not integrated into any project either.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;I think that there is an opportunity for a enterprise product (web 2.0) that is one stop shop for&lt;br /&gt;&lt;ul&gt;&lt;li&gt;organizing project information (projects, requirements, tasks, time, people, milestones, bugs, etc).&lt;/li&gt;&lt;li&gt;tracking time.&lt;/li&gt;&lt;li&gt;enabling efficient collaboration such as Instant Messaging from within a requirement page, etc.&lt;/li&gt;&lt;li&gt;Integrate bug tracking system, wikis, IM, email, blogs, etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2345487674242969997-275160171659018544?l=p6n.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://p6n.blogspot.com/feeds/275160171659018544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2345487674242969997&amp;postID=275160171659018544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/275160171659018544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/275160171659018544'/><link rel='alternate' type='text/html' href='http://p6n.blogspot.com/2007/06/efficient-project-execution-idea.html' title='Efficient Project Execution (An Idea)'/><author><name>Babu</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16195473643674679849'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2345487674242969997.post-1458741230661183825</id><published>2007-06-13T14:05:00.000-07:00</published><updated>2007-06-13T14:41:32.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Deadlock'/><category scheme='http://www.blogger.com/atom/ns#' term='Threads'/><title type='text'>Timed Deadlock</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;     &lt;span style="font-weight: bold;"&gt;What is Timed Deadlock?:&lt;/span&gt;Timed deadlock is a deadlock where the thread t1 holds the lock l1 and wants to acquire a resource (for example a connection from the connection pool) when there are no resources and waits (sleeps) for a resource(s) to be available. In the mean time the thread t2 which has a resource but needs lock l1 to complete its task. The following figure illustrates timed deadlock.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;img style="width: 360px; height: 92px;" src="http://www.weblog.com/files/members/2118/deadlock3.jpg" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;Figure-1: Timed Deadlock&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Example:&lt;/span&gt; The timed deadlock can be found in JBoss 2.4.x, please refer to the &lt;a target="_blank" href="http://jira.jboss.com/jira/browse/JBPORTAL-1401"&gt;Reported Bug&lt;/a&gt;. The situation is caused when multiple to users (n &gt; 20) are trying to access a portal. The connection pool size is set to 20 and the cache for portal meta data is set to expire every 2 minutes. When there are no connections in the connection pool, the requesting thread will be blocked for 30 secs (default).&lt;br /&gt;&lt;br /&gt;The attached thread dump (from the reported bug) indicates that one thread holds a lock and ends up sleeping when trying to acquire a connection from the pool. All the other threads wait for the above lock to be release to finish their work. I am not sure if the other threads are holding connections or connections are not returned to the pool (connection leak).There could be multiple problems in JBoss portal contributing to the timed deadlock.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt; One thing is for sure that threads shouldn't hold a lock and interact with pools, especially the pools that provide waiting(sleep) option.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2345487674242969997-1458741230661183825?l=p6n.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://p6n.blogspot.com/feeds/1458741230661183825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2345487674242969997&amp;postID=1458741230661183825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/1458741230661183825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/1458741230661183825'/><link rel='alternate' type='text/html' href='http://p6n.blogspot.com/2007/06/timed-deadlock.html' title='Timed Deadlock'/><author><name>Babu</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16195473643674679849'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2345487674242969997.post-2062842715562078020</id><published>2007-06-02T04:58:00.000-07:00</published><updated>2007-06-13T14:41:46.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Profiling'/><title type='text'>Effective Profiling</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;     &lt;span style="font-weight: bold;"&gt;J2EE Application and Profiling:&lt;/span&gt; A typical J2EE application contains logical layers/components (Presentation, Business, Data, etc) as shown below in the &lt;span style="font-style: italic; font-weight: bold;"&gt;Figure-1&lt;/span&gt;. &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;When we want to find bottlenecks in a J2EE application, easiest thing to do is to hookup a profiler &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;(OptimizeIt, Jprobe, Jrockit, JProfiler etc), run a test, generate profile data, and find top hotspot methods.  The profilers indicate top bottleneck methods in terms of CPU usage. &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;We try to eliminate top hotspot methods either by making them efficient or by calling them less frequently and rerun tests to check the improvement in terms &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;of application's throughput and/or response time. If the throughput and response time are not achieved, we repeat the above procedure until we achieve desired throughput and response time.&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;   &lt;br /&gt;&lt;br /&gt;  &lt;img style="width: 423px; height: 129px;" src="http://www.weblog.com/files/members/2118/perfig_1.jpg" /&gt;   &lt;br /&gt; &lt;/span&gt; &lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-family:Courier New;" &gt;Figure-1: A typical J2EE Application&lt;/span&gt; &lt;br /&gt;&lt;br /&gt; &lt;span style="font-family:Verdana;"&gt;     &lt;span style="font-weight: bold;"&gt;Problem:&lt;/span&gt; The above procedure is a trial and error effort. The profile data doesn't indicate which layer/component is a bottleneck.&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;Typically profilers use either sampling or instrumentation for measuring &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;CPU used by methods. The instrumentation method is useful when there is only one user running &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;a test. The sampling method is used when an application needs to be profiled with concurrent users running use case(s).&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt; The sampling method doesn't offer complete picture of the system in terms of which components/layers are real &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;bottlenecks.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;   &lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;Effective Profiling:&lt;/span&gt; The information per component/layer &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;may indicate which component/layer needs attention.&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;   &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt; To get per component information, we could disable/enable components under test one by one &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;and run load tests to measure throughput and response time. Enabling/Disabling means either introducing a mock component or caching results of a &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;component/layer/method and serving the same set of results for every request/call. By running tests with the &lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;real component/layer vs caching component/layer we could find out the impact of a component/layer on the overall system performance&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;.&lt;br /&gt;&lt;br /&gt;For example, in &lt;span style="font-weight: bold; font-style: italic;"&gt;Figure-1&lt;/span&gt; shown above we can find out cost of all the layers by load testing application and measure maximum throughput (pages/sec) that can be achieved on a given hardware configuration, lets say it is X&lt;sub&gt;original&lt;/sub&gt; pages/sec.&lt;br /&gt;&lt;br /&gt;Next, we will load test application with cache in Layer3 as shown in &lt;span style="font-weight: bold; font-style: italic;"&gt;Figure-2&lt;/span&gt; to find out the cost associated with Layer3 we could introduce a cache and load test the application to measure throughput, lets say it is X&lt;sub&gt;cache3&lt;/sub&gt; pages/sec.&lt;br /&gt;&lt;br /&gt;&lt;img style="width: 417px; height: 123px;" src="http://www.weblog.com/files/members/2118/perfig_2.jpg" /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-weight: bold; font-style: italic;font-family:Courier New;" &gt;   &lt;br /&gt;Figure-2: Cache in Layer3&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-family:Verdana;"&gt;If X&lt;sub&gt;cache3&lt;/sub&gt; &gt; X&lt;sub&gt;original&lt;/sub&gt; we can find and fix bottlenecks by profiling Layer3. Lets call the measured throughput after fixing all bottlenecks in Layer3 as X&lt;sub&gt;fixed3&lt;/sub&gt; which should be as close as possible to X&lt;sub&gt;cache3&lt;/sub&gt;.&lt;br /&gt;&lt;br /&gt;In &lt;span style="font-weight: bold; font-style: italic;"&gt;Figure-3&lt;/span&gt; shown below, we can find out the cost associated with the Layer2 by introducing a cache in Layer2, lets say the measured maximum throughput is X&lt;sub&gt;cache2&lt;/sub&gt; pages/sec.&lt;br /&gt;&lt;br /&gt;&lt;img style="width: 427px; height: 118px;" src="http://www.weblog.com/files/members/2118/perfig_4.jpg" /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-weight: bold; font-style: italic;font-family:Courier New;" &gt;   &lt;br /&gt;Figure-3: Cache in Layer2 and Layer3&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;We have results of three load test runs as X&lt;sub&gt;original&lt;/sub&gt;, X&lt;sub&gt;fixed3&lt;/sub&gt; and X&lt;sub&gt;cache2&lt;/sub&gt; pages/sec. Next, we will have to decide which layers need attention based on the following conditions.&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;If X&lt;sub&gt;cache2&lt;/sub&gt; = X&lt;sub&gt;fixed3&lt;/sub&gt; &gt; X&lt;sub&gt;original&lt;/sub&gt; we try to find and fix bottlenecks in Layer1.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;If X&lt;sub&gt;fixed3&lt;/sub&gt; &lt;&lt;&gt;cache2 we try to find and fix bottlenecks in Layer2.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;The condition X&lt;sub&gt;fixed3&lt;/sub&gt; &gt;&gt; X&lt;sub&gt;cache2&lt;/sub&gt; may not be possible for obvious reasons.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Verdana;"&gt;X&lt;sub&gt;cache2&lt;/sub&gt; &gt;= X&lt;sub&gt;fixed3&lt;/sub&gt; &gt; X&lt;sub&gt;original &lt;/sub&gt;is always true.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;span style="font-family:Verdana;"&gt;     &lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt; Load testing with the cache in layers or components can provide critical information such as maximum achievable throughput. The information also helps in choosing the right component/layer to profile and find bottlenecks and fix them.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2345487674242969997-2062842715562078020?l=p6n.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://p6n.blogspot.com/feeds/2062842715562078020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2345487674242969997&amp;postID=2062842715562078020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/2062842715562078020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2345487674242969997/posts/default/2062842715562078020'/><link rel='alternate' type='text/html' href='http://p6n.blogspot.com/2007/06/effective-profiling.html' title='Effective Profiling'/><author><name>Babu</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16195473643674679849'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>