Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Trading Flexibility for Performance: The HPC Story in OpenStack

Trading Flexibility for Performance: The HPC Story in OpenStack

Stephen Finucane

May 27, 2019
Tweet

More Decks by Stephen Finucane

Other Decks in Technology

Transcript

  1. Trading Flexibility for Performance The HPC Story in OpenStack Stephen

    Finucane Software Engineer, Red Hat @stephenfin
  2. $ openstack flavor create --vcpus 8 --ram 8192 --disk 0

    my-flavor $ openstack server create --flavor my-flavor my-server
  3. $ openstack flavor create --vcpus 8 --ram 8192 --disk 0

    my-flavor $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  4. $ openstack flavor create --vcpus 8 --ram 8192 --disk 0

    my-flavor $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor $ openstack server create --flavor my-flavor my-server
  5. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  6. node #0 CPU #0 CPU #1 CPU #2 CPU #3

    $ openstack server create ...
  7. node #0 CPU #0 CPU #1 CPU #2 CPU #3

    $ openstack server create ... $ openstack server create ... $ openstack server create ...
  8. node #0 CPU #0 CPU #1 CPU #2 CPU #3

    $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ... $ openstack server create ...
  9. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  10. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  11. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  12. node #0 node #1 node #2 node #3 node #1

    CPU #0 CPU #1 CPU #2 CPU #3
  13. node #1 CPU #4 CPU #5 CPU #6 CPU #7

    node #0 CPU #0 CPU #1 CPU #2 CPU #3
  14. node #1 CPU #4 CPU #5 CPU #6 CPU #7

    node #0 CPU #0 CPU #1 CPU #2 CPU #3
  15. node #1 CPU #4 CPU #5 CPU #6 CPU #7

    node #0 CPU #0 CPU #1 CPU #2 CPU #3
  16. node #1 CPU #4 CPU #5 CPU #6 CPU #7

    node #0 CPU #0 CPU #1 CPU #2 CPU #3
  17. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  18. node #1 CPU #4 CPU #5 CPU #6 CPU #7

    node #0 CPU #0 CPU #1 CPU #2 CPU #3
  19. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  20. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  21. 1. Disable advanced CPU features (HyperThreading, Power Management, Turbo Boost,

    …) 2. Install host dependencies (real-time kernel, real-time KVM module, real-time tuned host profiles, …) 3. Configure host memory and CPU parameters (enable hugepages, isolate some cores, …) 4. Install guest dependencies (real-time kernel, real-time tuned guest profiles, …)
  22. $ openstack flavor set \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate

    \ --property hw:numa_nodes=2 \ --property hw:numa_cpus.0=0-5 \ --property hw:numa_cpus.1=6,7 \ --property hw:numa_mem.0=6144 \ --property hw:numa_mem.1=2048 \ --property hw:cpu_realtime=yes \ --property hw:cpu_realtime_mask=^0-1 \ --property hw:mem_page_size=1GB \ my-flavor
  23. 1. Document it (make the existing stuff easier to understand)

    2. Improve it (extend existing features and add new ones as necessary) 3. Replace it (replace the existing features with easier-to-use features)
  24. Trading Flexibility for Performance The HPC Story in OpenStack Stephen

    Finucane Software Engineer, Red Hat @stephenfin