|
| 1 | +--- |
| 2 | +#--------------------------------------------------------------# |
| 3 | +# Enable hugepage for pg and restart pg cluster [pg_hugepage] |
| 4 | +# if `node_hugepage_count` or `node_hugepage_ratio` changed, it will full backup the pg_cls and restart it gracefully |
| 5 | +# support usage: |
| 6 | +# - `pig install` |
| 7 | +# - `bin/pgsql-add <pg_cls>` |
| 8 | +# - `pgsql.yml -l <pg_cls> -t pg_hugepage` |
| 9 | +#--------------------------------------------------------------# |
| 10 | +# calculation rules: |
| 11 | +# 1. `shared_memory_size_in_huge_pages` (from PG15+): if `node_hugepage_count` is -1 and huge_pages (from PG) != off |
| 12 | +# 2. if `node_hugepage_count` > 0 |
| 13 | +# - `shared_memory_size_in_huge_pages`: if `shared_memory_size_in_huge_pages` > `node_hugepage_count` |
| 14 | +# - `node_hugepage_count` |
| 15 | +# 3. disable hugepage if `node_hugepage_count` is 0 |
| 16 | +# 4. if `node_hugepage_ratio` > 0 |
| 17 | +# - `shared_memory_size_in_huge_pages`: if `shared_memory_size_in_huge_pages` > pages calculated from `node_hugepage_ratio` |
| 18 | +# - page value calculated from `node_hugepage_ratio` |
| 19 | +# All above rules and usages are tested successfully on Rocky Linux 9 |
| 20 | +#--------------------------------------------------------------# |
| 21 | + |
| 22 | +- name: Set default value |
| 23 | + set_fact: |
| 24 | + curr_nr_hugepages: 0 |
| 25 | + new_nr_hugepages: 0 |
| 26 | + changed_when: false |
| 27 | + |
| 28 | + |
| 29 | +- name: enable hugepage for pg |
| 30 | + tags: pg_hugepage |
| 31 | + vars: |
| 32 | + block: |
| 33 | + - import_tasks: util/pg_read_hugepage.yml |
| 34 | + |
| 35 | + - name: calculate hugepage need update |
| 36 | + set_fact: |
| 37 | + hugepages_need_update: "{{ new_nr_hugepages|int != curr_nr_hugepages|int }}" |
| 38 | + changed_when: false |
| 39 | + |
| 40 | + - name: set pt_restart according to hugepages_need_update |
| 41 | + set_fact: |
| 42 | + pt_restart: "{{ hugepages_need_update|bool }}" |
| 43 | + changed_when: false |
| 44 | + |
| 45 | + - name: print nr_hugepages values |
| 46 | + when: new_nr_hugepages is defined and curr_nr_hugepages is defined |
| 47 | + debug: |
| 48 | + msg: | |
| 49 | + curr_nr_hugepages: {{ curr_nr_hugepages|trim }}, new_nr_hugepages: {{ new_nr_hugepages|trim }}, |
| 50 | + hugepages_need_update: {{ hugepages_need_update|bool }}, |
| 51 | + pt_restart: {{ pt_restart|bool }} |
| 52 | + changed_when: false |
| 53 | + |
| 54 | + - name: full backup pg before hugepage update if has primary |
| 55 | + include_tasks: util/pg_backup.yml |
| 56 | + when: hugepages_need_update|bool and pg_role == 'primary' |
| 57 | + |
| 58 | + - name: update hugepage |
| 59 | + include_tasks: util/pg_write_hugepage.yml |
| 60 | + when: hugepages_need_update|bool |
| 61 | + |
| 62 | +... |
0 commit comments