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

    View full-size slide

  2. Photo by Jackson Jost on Unsplash

    View full-size slide

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

    View full-size slide

  4. Photo by Pero Kalimero on Unsplash

    View full-size slide

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

    View full-size slide

  6. $ 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

    View full-size slide

  7. $ 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

    View full-size slide

  8. Photo by Josep Castells on Unsplash

    View full-size slide

  9. Photo by Paolo Nicolello on Unsplash

    View full-size slide

  10. #1
    CPU Pinning

    View full-size slide

  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

    View full-size slide

  12. node #0
    CPU #0 CPU #1
    CPU #2 CPU #3

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. 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 ...

    View full-size slide

  16. Is it always?

    View full-size slide

  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

    View full-size slide

  18. node #0
    CPU #0 CPU #1
    CPU #2 CPU #3

    View full-size slide

  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

    View full-size slide

  20. #2
    NUMA Awareness

    View full-size slide

  21. $ 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

    View full-size slide

  22. node #0 node #1
    node #2 node #3
    node #1
    CPU #0 CPU #1
    CPU #2 CPU #3

    View full-size slide

  23. node A node B
    Local Access Remote Access
    Memory Channel Interconnect Memory Channel

    View full-size slide

  24. node A node B
    node C node D

    View full-size slide

  25. node A node B
    node C node D

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. $ 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

    View full-size slide

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

    View full-size slide

  32. $ 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

    View full-size slide

  33. Photo by Echo Grid on Unsplash

    View full-size slide

  34. $ 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

    View full-size slide

  35. Hardware
    Host OS/Hypervisor
    Guest OS

    View full-size slide

  36. 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, …)

    View full-size slide

  37. $ 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

    View full-size slide

  38. #1
    CPU Pinning
    #2
    NUMA Awareness
    #3
    Real Time

    View full-size slide

  39. Photo by Paolo Nicolello on Unsplash

    View full-size slide

  40. NFV is complex.

    View full-size slide

  41. HPC is complex.

    View full-size slide

  42. 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)

    View full-size slide

  43. Photo by Marcus Dall Col on Unsplash

    View full-size slide

  44. Trading Flexibility
    for Performance
    The HPC Story in OpenStack
    Stephen Finucane
    Software Engineer, Red Hat
    @stephenfin

    View full-size slide