run.xml for multiple drivers?

146 views
Skip to first unread message

Shanti Subramanyam (gmail)

unread,
Apr 6, 2012, 6:04:24 PM4/6/12
to faban...@googlegroups.com
I am having trouble getting a benchmark with two drivers to work.
I added another <driverConfig> section to my run.xml with the 2nd driver's name thus:
 <driverConfig name="ConnectDriver">
            <properties>
                <property>
                    <name>sleepTime</name>
                    <value>100</value>
                </property>
            </properties>
  </driverConfig>

I also added both the classes to the benchmark definition in one of the driver classes:
@BenchmarkDefinition(
        name = "Upload Workload",
        version = "0.1",
        drivers = {UploadDriver.class, ConnectDriver.class},
        configPrecedence = true
)

At runtime, I'm getting the following exception:
com.sun.faban.driver.ConfigurationException: No driver configured to run.

Stack Trace:
Class Method Line
com.sun.faban.driver.engine.MasterImpl configureLocal 542
com.sun.faban.driver.engine.MasterImpl runBenchmark 259
com.sun.faban.driver.engine.MasterImpl main 1566


What else am I missing?

Shanti

Sucharitakul, Akara

unread,
Apr 9, 2012, 2:02:11 PM4/9/12
to faban...@googlegroups.com
We can only run one driver in-process. You have to specify the number of agents to run off process to start multiple drivers. There should be an <agents> field somewhere and it seems to be missing.

-Akara

Shanti Subramanyam (gmail)

unread,
Apr 10, 2012, 3:10:54 PM4/10/12
to faban...@googlegroups.com
Thanks much Akara.
I actually had to set the agents for both the drivers :
  <driverConfig ...>
      <agents>1</agents>
      ...
  </driverConfig>

 This works now. But how can I control the 'scale' for each of the drivers? I only want one thread for one of the drivers (all the time) and I want the scale parameter to control the threads for the other driver.
 Is this possible?

Shanti

Sucharitakul, Akara

unread,
Apr 10, 2012, 3:54:35 PM4/10/12
to faban...@googlegroups.com
Currently, the scale will apply to all drivers. Of course, you can make the one driver only execute if the thread id is a certain number (e.g. 0). That's quite a hack. But to control scale on one driver and control threads on another driver would be a feature request.

-Akara

From: Shanti Subramanyam <shanti.su...@gmail.com<mailto:shanti.su...@gmail.com>>
Reply-To: "faban...@googlegroups.com<mailto:faban...@googlegroups.com>" <faban...@googlegroups.com<mailto:faban...@googlegroups.com>>
Date: Tue, 10 Apr 2012 12:10:54 -0700
To: "faban...@googlegroups.com<mailto:faban...@googlegroups.com>" <faban...@googlegroups.com<mailto:faban...@googlegroups.com>>
Subject: Re: run.xml for multiple drivers?

Thanks much Akara.
I actually had to set the agents for both the drivers :
<driverConfig ...>
<agents>1</agents>
...
</driverConfig>

This works now. But how can I control the 'scale' for each of the drivers? I only want one thread for one of the drivers (all the time) and I want the scale parameter to control the threads for the other driver.
Is this possible?

Shanti

On Mon, Apr 9, 2012 at 11:02 AM, Sucharitakul, Akara <asucha...@ebay.com<mailto:asucha...@ebay.com>> wrote:
We can only run one driver in-process. You have to specify the number of agents to run off process to start multiple drivers. There should be an <agents> field somewhere and it seems to be missing.

-Akara

Shanti Subramanyam (gmail)

unread,
Apr 10, 2012, 6:23:59 PM4/10/12
to faban...@googlegroups.com
I don't mind hacks. But basically I will have to put this check in the operation code right? There is no way to actually prevent the operation from being called for the other threads?

Shanti

Sucharitakul, Akara

unread,
Apr 10, 2012, 6:55:02 PM4/10/12
to faban...@googlegroups.com
There is – but that's using the variable load control file to suppress the threads.

-Akara

From: Shanti Subramanyam <shanti.su...@gmail.com<mailto:shanti.su...@gmail.com>>
Reply-To: "faban...@googlegroups.com<mailto:faban...@googlegroups.com>" <faban...@googlegroups.com<mailto:faban...@googlegroups.com>>
Date: Tue, 10 Apr 2012 15:23:59 -0700
To: "faban...@googlegroups.com<mailto:faban...@googlegroups.com>" <faban...@googlegroups.com<mailto:faban...@googlegroups.com>>
Subject: Re: run.xml for multiple drivers?

I don't mind hacks. But basically I will have to put this check in the operation code right? There is no way to actually prevent the operation from being called for the other threads?

Shanti

On Tue, Apr 10, 2012 at 12:54 PM, Sucharitakul, Akara <asucha...@ebay.com<mailto:asucha...@ebay.com>> wrote:
Currently, the scale will apply to all drivers. Of course, you can make the one driver only execute if the thread id is a certain number (e.g. 0). That's quite a hack. But to control scale on one driver and control threads on another driver would be a feature request.

-Akara

Thanks much Akara.
I actually had to set the agents for both the drivers :
<driverConfig ...>
<agents>1</agents>
...
</driverConfig>

This works now. But how can I control the 'scale' for each of the drivers? I only want one thread for one of the drivers (all the time) and I want the scale parameter to control the threads for the other driver.
Is this possible?

Shanti

On Mon, Apr 9, 2012 at 11:02 AM, Sucharitakul, Akara <asucha...@ebay.com<mailto:asucha...@ebay.com><mailto:asucha...@ebay.com<mailto:asucha...@ebay.com>>> wrote:
We can only run one driver in-process. You have to specify the number of agents to run off process to start multiple drivers. There should be an <agents> field somewhere and it seems to be missing.

-Akara

Shanti Subramanyam (gmail)

unread,
Apr 11, 2012, 4:47:28 PM4/11/12
to faban...@googlegroups.com
I worked around the issue in a different way. Since I only wanted a single thread of executing of this 2nd driver, I started a thread in the @OnceBefore method. The thread loops through executing the background operation repeatedly. It stops when it is interrupted by the main driver in the @OnceAfter method.

Shanti

Daniel Y. Li

unread,
Apr 20, 2013, 1:19:44 AM4/20/13
to faban...@googlegroups.com, asucha...@ebay.com
Hi Akara,
     I don't quite get your point here with this statement "You have to specify the number of agents to run off process to start multiple drivers." Can you explain more and clearly on this? Also for a single driver, to have multiple agents means what? All the agents are still driving from the same machine, aren't they? What is the relation or difference between number of agents and simulated number of users (with is reflected in load_scale)? Thank you very much!!

Shanti Subramanyam (gmail)

unread,
Apr 21, 2013, 11:39:48 PM4/21/13
to faban...@googlegroups.com, Sucharitakul, Akara
A single driver having multiple agents means that the multiple agents will run on the same driver machine. The load is divided equally amongst the different agents. For example, if you specify scale as 500 and use 5 agents, each agent will drive 100 users. 
You typically don't need to run multiple agents on the same machine, as each agent can usually run 1000's of users. But for some reason, if you run into scaling or GC issues with one JVM, you can run multiple agents as they run as separate processes.
It is typical to use multiple agents when you use multiple driver machines - in this case, you simply specify all the host names of the driver machines separate by spaces.

Shanti


--
You received this message because you are subscribed to the Google Groups "faban-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to faban-users...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Daniel Y. Li

unread,
May 2, 2013, 3:42:21 PM5/2/13
to faban...@googlegroups.com
Hi Shanti,
    Thanks a lot for your timely response. I greatly appreciate your help, given you might have put Faban aside for a long time by now.

You have explained the relation with drivers and clients well. Now following your instruction, I did the following (separate two drivers by a blank), but only the latter driver is actually working. Also how can I specify the number of clients for each of the driver? If you know how, please modify on my code given below. Thank you very much.
 
<fa:runConfig xmlns="http://faban.sunsource.net/ns/fabandriver" xmlns:fa="http://faban.sunsource.net/ns/faban"xmlns:fh="http://faban.sunsource.net/ns/fabanharness" definition="org.apache.olio.workload.driver.UIDriver">
<fh:description>Enter description for this run here</fh:description>
<fa:hostConfig>
<fa:host>10.151.19.30 10.137.46.147</fa:host>
<fh:enabled>true</fh:enabled>
<fh:cpus>0</fh:cpus>
<fh:tools>vmstat 10</fh:tools>
<fh:userCommands/>
</fa:hostConfig>
<fa:scale>2000</fa:scale>
<fa:runControl>
<fa:rampUp>50</fa:rampUp>
<fa:steadyState>200</fa:steadyState>
<fa:rampDown>50</fa:rampDown>
</fa:runControl>
<outputDir>
/home/ubuntu/web-release/faban/output/OlioDriver.1Y/
</outputDir>
<audit>false</audit>
<threadStart>
<delay>100</delay>
<simultaneous>true</simultaneous>
<parallel>true</parallel>
</threadStart>
<stats>
<maxRunTime>6</maxRunTime>
<interval>30</interval>
</stats>
<runtimeStats enabled="false">
<interval>25</interval>
</runtimeStats>
<driverConfig name="UIDriver">
<agents>1</agents>
<stats>
<interval>30</interval>
</stats>
<runtimeStats target="9988"/>
<properties>
<property name="serverType">php</property>
</properties>
</driverConfig>
</fa:runConfig>

After a successful run, if you click on the tag "statistics", and then choose to let it display in html format, it'll show a figure of

FAULTS with two curves -INTR and CS. I have tried searching through the internet, still don't have a clue on what the Fault here means, as well as INTR and CS, do you know what do they represent? Also in another figure of Kernel Threads, what does the R and B curve stand for?



--
You received this message because you are subscribed to a topic in the Google Groups "faban-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/faban-users/nkC0S42DycA/unsubscribe?hl=en.
To unsubscribe from this group and all its topics, send an email to faban-users...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Best,
 
Ying(Daniel) Li
Ph.D. Candidate
Dept. of Electrical & Computer Engineering
Stony Brook University
Stony Brook, New York 11794
Phone:(631) 632-1878



faults.png
kernel thread.jpg

Shanti Subramanyam (gmail)

unread,
May 2, 2013, 8:29:46 PM5/2/13
to faban...@googlegroups.com
You need to change the #agents to 2. Each agent will then run on one of the drivers. The 'scale' value (i.e. number of emulated users) will automatically be divided between the agents.

Shanti

Daniel Y. Li

unread,
May 2, 2013, 10:27:53 PM5/2/13
to faban...@googlegroups.com
Thanks Shanti, it works now for two drivers. 

Do you know the abbreviations I mentioned in the previous email (screenshot can be found in that email):

After a successful run, if you click on the tag "statistics", and then choose to let it display in html format, it'll show a figure of 

FAULTS with two curves -INTR and CS. I have tried searching through the internet, still don't have a clue on what the Fault here means, as well as INTR and CS, do you know what do they represent? Also in another figure of Kernel Threads, what does the R and B curve stand for?

Shanti Subramanyam (gmail)

unread,
May 2, 2013, 11:01:16 PM5/2/13
to faban...@googlegroups.com
INTR is interrupts, CS is context switches.

Shanti

Daniel Y. Li

unread,
May 2, 2013, 11:23:57 PM5/2/13
to faban...@googlegroups.com
Thanks, that makes sense. but, are  interrupts and context switches considered as Faults?

Also, do you know in the figure of Kernel Threads, what does the R and B curve stand for?
Reply all
Reply to author
Forward
0 new messages