Our "go off and do everything" playbook is now taking an uncomfortable 
number of minutes to run against a single host, even when there are no 
changes. This feels like a lot to me.

I have pipelining and ControlPersist enabled, and I'm pretty sure they're 
working. The hosts are about 10ms away, according to ping, and high spec 
(lots of idle cpu and ram and ssds).

For an example, I was playing with the file module, just checking the same 
directory exists over and over again. A lot of our plays do this; copy 
directories or files one by one (but also loads of other things). Maybe 
with_items: would be faster.

In ssh:
% time (for i in {1..20}; do ssh -o 
ControlPath=/home/faux/.ansible/cp/%h-%r -o ControlMaster=auto -o 
ControlPersist=180s xmas mkdir -p /tmp/ansible/foo; done) 0.65s user 0.06s 
system 47% cpu 1.490 total

In ansible:
% ansible-playbook -vvvv -i short-hosts.lst perf-playbook.yml 4.73s user 
1.65s system 45% cpu 13.953 total

Nearly ten times slower? Does this match other people's expectations?



--

Exact setup:

# ansible.cfg:

[defaults]
pipelining=True
forks=50

[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=180s
control_path = %(directory)s/%%h-%%r


## playbook

- hosts:
    - all
  gather_facts: False
  tasks:
    - name: create directory 1
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 2
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 3
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 4
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 5
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 6
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 7
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 8
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 9
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 10
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 11
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 12
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 13
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 14
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 15
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 16
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 17
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 18
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 19
      file: name=/tmp/ansible/foo state=directory
    - name: create directory 20
      file: name=/tmp/ansible/foo state=directory


## a step, with timings (| ts '[%Y-%m-%d %H:%M:%.S]'):

[2016-08-30 13:29:17.970906] TASK [create directory 20] 
*****************************************************
[2016-08-30 13:29:17.970941] task path: 
/home/faux/code/glue/infrastructure/ansible/perf-playbook.yml:43
[2016-08-30 13:29:18.016202] <xmas> ESTABLISH SSH CONNECTION FOR USER: None
[2016-08-30 13:29:18.016544] <xmas> SSH: EXEC ssh -C -vvv -o ControlMaster=auto 
-o ControlPersist=180s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o 
PasswordAuthentication=no -o ConnectTimeout=10 -o 
ControlPath=/home/faux/.ansible/cp/%h-%r xmas '/bin/sh -c '"'"'( umask 77 && 
mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1472560158.02-23318569809518 `" 
&& echo ansible-tmp-1472560158.02-23318569809518="` echo 
$HOME/.ansible/tmp/ansible-tmp-1472560158.02-23318569809518 `" ) && sleep 
0'"'"''
[2016-08-30 13:29:18.066649] <xmas> PUT /tmp/tmptEKKtW TO 
/home/faux/.ansible/tmp/ansible-tmp-1472560158.02-23318569809518/file
[2016-08-30 13:29:18.071041] <xmas> SSH: EXEC sftp -b - -C -vvv -o 
ControlMaster=auto -o ControlPersist=180s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o 
PasswordAuthentication=no -o ConnectTimeout=10 -o 
ControlPath=/home/faux/.ansible/cp/%h-%r '[xmas]'
[2016-08-30 13:29:18.247611] <xmas> ESTABLISH SSH CONNECTION FOR USER: None
[2016-08-30 13:29:18.248089] <xmas> SSH: EXEC ssh -C -vvv -o ControlMaster=auto 
-o ControlPersist=180s -o KbdInteractiveAuthentication=no -o 
PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o 
PasswordAuthentication=no -o ConnectTimeout=10 -o 
ControlPath=/home/faux/.ansible/cp/%h-%r -tt xmas '/bin/sh -c 
'"'"'LANG=en_GB.UTF-8 LC_ALL=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 
/usr/bin/python 
/home/faux/.ansible/tmp/ansible-tmp-1472560158.02-23318569809518/file; rm -rf 
"/home/faux/.ansible/tmp/ansible-tmp-1472560158.02-23318569809518/" > /dev/null 
2>&1 && sleep 0'"'"''
[2016-08-30 13:29:18.532505] ok: [xmas] => {"changed": false, "diff": {"after": 
{"path": "/tmp/ansible/foo"}, "before": {"path": "/tmp/ansible/foo"}}, "gid": 
1005, "group": "faux", "invocation": {"module_args": {"backup": null, 
"content": null, "delimiter": null, "diff_peek": null, "directory_mode": null, 
"follow": false, "force": false, "group": null, "mode": null, "name": 
"/tmp/ansible/foo", "original_basename": null, "owner": null, "path": 
"/tmp/ansible/foo", "recurse": false, "regexp": null, "remote_src": null, 
"selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, 
"state": "directory", "validate": null}, "module_name": "file"}, "mode": 
"0775", "owner": "faux", "path": "/tmp/ansible/foo", "size": 4096, "state": 
"directory", "uid": 1004}


## ping:

rtt min/avg/max/mdev = 9.707/9.857/9.954/0.091 ms



-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/c8a0d2a1-49b4-4414-815f-0d9865a229bc%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to