# Rally and Httperf

**URL:** <https://discuss.elastic.co/t/rally-and-httperf/124457>\
**Category:** Elasticsearch\
**Tags:** rally\
**Created:** [March 18, 2018, 8:18pm UTC](https://discuss.elastic.co/t/rally-and-httperf/124457 "2018-03-18T20:18:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![jlwysf](https://avatars.discourse-cdn.com/v4/letter/j/779978/32.png) [@jlwysf](https://discuss.elastic.co/u/jlwysf)\
**Post date:** [March 18, 2018, 8:18pm UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/1 "2018-03-18T20:18:33Z")

</div>

I'm new to rally, I used to use httperf, I have some questions hope I can get an answer here.

1. In httperf we can set concurrent connections, does Rally also support that?

2. I do see we can set up clients in schedule, does one client means one node in elasticsearch cluster?

3. I have two existing ES cluster and I would like test performances between these two clusters, I assume "pipeline-benchmark only " is the right option, however is there anyway Rally can help get CPU usage, Disk IO during testing?

Does these two testings can run in parallel? Because I always get race tun error;

Thanks

Eric

---

<div class="post-metadata">

**Author:** ![dliappis](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dliappis/32/56174_2.png) [@dliappis](https://discuss.elastic.co/u/dliappis)\
**Post date:** [March 19, 2018, 1:26pm UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/2 "2018-03-19T13:26:56Z")

</div>

Hello @jlwysf,

Some replies below (caveat: I am also currently learning Rally):

> [@jlwysf](#):
>
> I do see we can set up clients in schedule, does one client means one node in elasticsearch cluster?

No, client is an Elasticsearch client (they are actually implemented using the elasticsearch-python client).  
When you increase the clients, e.g. for a bulk operation, you will see more python3 processes getting spawned.

The following links in [docs](http://esrally.readthedocs.io/en/stable/track.html?highlight=clients#defining-operations) and discuss replies ([1](https://discuss.elastic.co/t/any-limitations-with-distributed-load-drivers/107939/11), [2](https://discuss.elastic.co/t/rally-consumes-all-cluster-threads-and-crashes-with-small-clusters/117599/2), [3](https://discuss.elastic.co/t/whats-the-frequnce-for-rally-send-bulk-requests/66665/2)) have more detail.

> [@jlwysf](#):
>
> In httperf we can set concurrent connections, does Rally also support that?

You should take a look at adjusting clients, as mentioned earlier and [running tasks in parallel](http://esrally.readthedocs.io/en/stable/track.html?highlight=parallel#time-based-vs-iteration-based).

The [documentation](http://esrally.readthedocs.io/en/stable/track.html?highlight=parallel#running-tasks-in-parallel) provides some examples and the amount of clients can be decided by Rally or be specified.

> [@jlwysf](#):
>
> is there anyway Rally can help get CPU usage, Disk IO during testing?

Rally has internal telemetry devices through which it stores a number of very useful metric keys, documented [here](http://esrally.readthedocs.io/en/latest/metrics.html#metric-keys). Among these metrics, you will a find a number of cpu utilization and disk\_io related ones. See also this [discuss reply](https://discuss.elastic.co/t/about-running-rally-with-error/63284/4).

Dimitris

---

<div class="post-metadata">

**Author:** ![jlwysf](https://avatars.discourse-cdn.com/v4/letter/j/779978/32.png) [@jlwysf](https://discuss.elastic.co/u/jlwysf)\
**Post date:** [March 19, 2018, 4:02pm UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/3 "2018-03-19T16:02:26Z")

</div>

Hi Dimitris,

Thanks for replying me. I still confused about my second and last question and I haven't saw an answer,

- Regarding my second question, if "client" is the concurrent session you referred to, how many thread are related in one client, how can I know? Does one client is one process? If we only have one client , is that mean we only execute one concurrent session?

Regarding my last question,

- According to you [answer](https://discuss.elastic.co/t/about-running-rally-with-error/63284/4), I haven't seen any index called "rally-\*/metrics/" is that because my existing cluster is not provisioned by esrally or they are reside in somewhere else?

- According to this [answer](https://discuss.elastic.co/t/about-running-rally-with-error/63284/4) I have another question regarding how can I know how many indexing thread I have, does indexing thread is python es client you are talking about earlier?

- Basically I try to run esrally against two existing cluster separately, but I only have one coordinate node, whenever I try to run parallel, simply run "pipeline benchmark only" two times with different target hosts, I got "race run error", I'm wondering is there anyway can solve this problem?

Thanks

Eric

---

<div class="post-metadata">

**Author:** ![dliappis](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dliappis/32/56174_2.png) [@dliappis](https://discuss.elastic.co/u/dliappis)\
**Post date:** [March 19, 2018, 6:17pm UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/4 "2018-03-19T18:17:27Z")

</div>

Hi Eric,

> [@jlwysf](#):
>
> Regarding my second question, if "client" is the concurrent session you referred to, how many thread are related in one client, how can I know? Does one client is one process? If we only have one client , is that mean we only execute one concurrent session?

Rally uses the [Thespian Actor System](http://thespianpy.com) which, in turn, is multi-process based. My understanding is that each client corresponds to one Python3 process. Actors themselves are single threaded. See also [this explanation](https://discuss.elastic.co/t/could-not-clone-from-https-github-com-elastic-rally-tracks/64983/11). For the record, the instrumentation of all of this is done inside [driver.py](https://github.com/elastic/rally/blob/master/esrally/driver/driver.py#L545).

> [@jlwysf](#):
>
> According to you answer, I haven't seen any index called "rally-\*/metrics/" is that because my existing cluster is not provisioned by esrally or they are reside in somewhere else?

Rally stores its metrics in a dedicated Elasticsearch cluster, which is highly recommended anyway so that you can execute queries, use Kibana etc. This is described in the docs [here](https://esrally.readthedocs.io/en/stable/metrics.html#metrics-records) and there's information how to set it up in the [advanced configuration section](https://esrally.readthedocs.io/en/stable/configuration.html#configuration-options).

> [@jlwysf](#):
>
> According to this answer I have another question regarding how can I know how many indexing thread I have, does indexing thread is python es client you are talking about earlier?

Indexing threads refer to Elasticsearch's thread pool for indexing (in Java). As per the [Elasticsearch docs](https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-threadpool.html#modules-threadpool):

> Thread pool type is fixed with a size of # of available processors, queue\_size of 200. The maximum size for this pool is 1 + # of available processors.

> [@jlwysf](#):
>
> Basically I try to run esrally against two existing cluster separately, but I only have one coordinate node, whenever I try to run parallel, simply run "pipeline benchmark only" two times with different target hosts, I got "race run error", I'm wondering is there anyway can solve this problem?

AFAIK you can't use the same Rally coordinator against two different clusters in parallel. It's better that you benchmark your clusters separately and in an isolated manner, also so that the testing results are credible and results from one cluster are not affected by testing the other cluster and vice versa.

Regards,  
Dimitris

---

<div class="post-metadata">

**Author:** ![danielmitterdorfer](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/danielmitterdorfer/32/110510_2.png) [@danielmitterdorfer](https://discuss.elastic.co/u/danielmitterdorfer)\
**Post date:** [April 3, 2018, 8:52am UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/5 "2018-04-03T08:52:17Z")

</div>

> [@jlwysf](#):
>
> Basically I try to run esrally against two existing cluster separately, but I only have one coordinate node, whenever I try to run parallel, simply run "pipeline benchmark only" two times with different target hosts, I got "race run error", I'm wondering is there anyway can solve this problem?

As @dliappis has already answered this is not possible and in fact actively prohibited by Rally (that's why you get that error). The reason is simply to avoid resource contention. Generating load can consume a lot of system resources and we want to avoid that results are skewed by running two benchmarks in parallel.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [May 1, 2018, 8:52am UTC](https://discuss.elastic.co/t/rally-and-httperf/124457/6 "2018-05-01T08:52:20Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
