将ansible异步与fio / iperf结合

问题描述

使用异步异步功能,我试图同时在multipls机器上运行fio和iperf。 用法是执行两个剧本的python子进程。

问题是fio剧本无法识别出fio命令实际上已经完成运行(因此,在超时时使剧本失败),该剧本的实际任务如下:

  - name: Execute the fio tests according to vm roles
    shell: "fio --output-format=json --output out_{{ vnf_name }}_{{inventory_hostname}}.json --section {{ 
            vm_role }} {{ vnf_name }}.fio"
    args:
     chdir: "{{ fio_dir }}"
    become: true
    async: '{{final_time}}'
    poll: 0
    register: fio_status

 - name: poll fio status
   async_status:
     jid: "{{ fio_status.ansible_job_id }}"
   register: fio_job_result
   until: fio_job_result.finished
   retries: 30
   delay: "{{((final_time| int) / 30) | int}}"

可配置:

[defaults]
forks = 200
host_key_checking = False
log_path = /var/log/ansible.log

解决方法

将 fio 命令设置为 time_based 和 runtime。

  • --time_based

  • --runtime=120

    sudo fio --filename=设备名称 --direct=1 --rw=randread --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based - -group_reporting --name=iops-test-job --eta-newline=1 --readonly

有关详细信息,请参阅https://fio.readthedocs.io/en/latest/fio_doc.html#time-related-parameters