| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-nova - 2020-01-29 | |||
| 17:11:38 | efried | And if you ask for a NUMA topo, you land on the former, always, exclusively. And the converse. | |
| 17:11:46 | stephenfin | efried: right, thing we're talking about the same thing | |
| 17:11:48 | stephenfin | *think | |
| 17:11:54 | sean-k-mooney | i would prefer to handel it via resouce classes | |
| 17:12:05 | sean-k-mooney | so if you report memory_mb its non numa aware memory | |
| 17:12:12 | efried | Except for the upgrade issue, I think it wouldn't matter. | |
| 17:12:17 | sean-k-mooney | if you reprot mempage_small its numa aware | |
| 17:12:31 | efried | Upgrade is my only concern about doing MEMORY_MB now and pages later. | |
| 17:12:40 | efried | because now you have flavors that straddle both models | |
| 17:12:52 | stephenfin | sean-k-mooney: right, but that's duplication | |
| 17:12:57 | efried | but they are mutually exclusive as to the hosts they work with. | |
| 17:12:58 | sean-k-mooney | same for the cpu if you use VCPU its not numa aware and on the root provider if it SCPU its numa aware shared cpu | |
| 17:13:03 | stephenfin | and instances will have to consume both | |
| 17:13:08 | stephenfin | assuming we report both | |
| 17:13:11 | sean-k-mooney | stephenfin: no the host would only report one or the other | |
| 17:13:18 | efried | We shouldn't have the same resource represented by two different resource classes. We've nacked that idea many times in the past. | |
| 17:13:24 | stephenfin | what determines what type we report? | |
| 17:13:32 | sean-k-mooney | we did it with pcpus and vcpus | |
| 17:14:01 | sean-k-mooney | but if we say that then MEMORY_MB is not the correct baseline for memory | |
| 17:14:02 | efried | eh? No, the PCPU and VCPU counts represent different physical processors. | |
| 17:14:27 | stephenfin | oh, so you're saying instead of having a "turn on NUMA" flag, we have two flags: one for non-NUMA memory and one for NUMA memory? | |
| 17:14:28 | efried | yeah, I think we ought to bite the bullet on memory. If we're ever going to want it to be something other than MEMORY_MB, we should do that now. | |
| 17:14:29 | sean-k-mooney | they represetn different pools of hardware threads | |
| 17:14:40 | sean-k-mooney | but they are both the resouces | |
| 17:14:47 | sean-k-mooney | we just treat them as if they are different | |
| 17:14:48 | efried | my point is, they don't overlap | |
| 17:15:19 | sean-k-mooney | right so i think we should be modeling memory as mempages of a specifc size | |
| 17:15:34 | sean-k-mooney | we already do in the resouce tracker in the host numa toplogy blob | |
| 17:15:39 | efried | If we have N pages that total to M mb of ram, we should *either* model PAGES=N *or* MEMORY_MB=M, but *never* both at the same time. | |
| 17:15:48 | efried | I think we're agreeing on that, just want to be clear. | |
| 17:15:59 | stephenfin | Yup | |
| 17:16:13 | sean-k-mooney | yep although its slightly more complicated | |
| 17:16:26 | efried | sean-k-mooney: I also want us to make sure we're not tying ourselves to libvirt unless that's inherently unavoidable. | |
| 17:16:30 | sean-k-mooney | but in pricipal yes always one or the other | |
| 17:16:40 | efried | I.e. are there other drivers that don't think of their NUMA-based memory in terms of pages? | |
| 17:16:41 | sean-k-mooney | yes i want to add an abstration | |
| 17:16:43 | stephenfin | maybe we should make like the 90s and teach placement about OOP | |
| 17:16:53 | efried | Or that think of them as pages of a different size? | |
| 17:16:54 | sean-k-mooney | so mempages_small and mempages_larage | |
| 17:16:56 | stephenfin | 1GB_PAGES is_a PAGES | |
| 17:17:08 | efried | hahaha, you're a funny guy. | |
| 17:17:14 | sean-k-mooney | with 1G or 2MB large ppages modeld as a trait | |
| 17:17:25 | efried | NO | |
| 17:17:39 | sean-k-mooney | yes because we support hw:mem_page_size=large | |
| 17:17:41 | stephenfin | PAGES_1M, surely? | |
| 17:17:47 | efried | I hate that. | |
| 17:17:53 | stephenfin | PAGES_1M, PAGES_2K, PAGES_1G? | |
| 17:17:54 | sean-k-mooney | and that cant be modeld as pages_2M and pages _1G | |
| 17:17:55 | efried | unless 1M is the only size we can ever have. | |
| 17:18:00 | efried | No | |
| 17:18:13 | efried | we ought to be able to do that with MEMORY_MB with appropriate step_size. | |
| 17:18:33 | sean-k-mooney | my point is we cant make mem_page_size=large work if the resouce class has the size info | |
| 17:18:36 | efried | then you can ask for so many MB, and you'll get the right number of pages chopped up according to that step_size. | |
| 17:18:48 | efried | pretty sure that's what step_size exists for. | |
| 17:18:56 | sean-k-mooney | the step_zize and min/max allocation works | |
| 17:19:09 | stephenfin | how does one determine the step size? | |
| 17:19:15 | efried | it's the page size | |
| 17:19:16 | sean-k-mooney | i have talked about that before | |
| 17:19:24 | efried | the virt driver knows how big a page is, yah? | |
| 17:19:25 | stephenfin | large isn't a page size | |
| 17:19:31 | stephenfin | it's anything bigger than 4k | |
| 17:19:31 | efried | no, 'large' isn't a thing. | |
| 17:19:31 | sean-k-mooney | but we cant explctly request 1G or 2mb pages in that case | |
| 17:19:39 | sean-k-mooney | efried: yes it is | |
| 17:19:43 | stephenfin | which could be 1G on half the compute nodes | |
| 17:19:57 | sean-k-mooney | hw:mem_page_size=large is the recommend way to enable hugepages | |
| 17:20:02 | efried | wait, so there are flavors that care how many pages they get, but not how much memory that ends up being???? | |
| 17:20:16 | sean-k-mooney | yes | |
| 17:20:20 | stephenfin | no | |
| 17:20:23 | sean-k-mooney | well not pages | |
| 17:20:26 | sean-k-mooney | but page size | |
| 17:20:37 | stephenfin | they care about how much memory they get but not the exact size of the pages | |
| 17:20:42 | stephenfin | just so long as it's != 4k | |
| 17:20:58 | stephenfin | 2M, 1G, 8G (on POWER) - it's all fair game | |
| 17:21:13 | sean-k-mooney | stephenfin: that is not alwasy true | |
| 17:21:23 | efried | Did we ever implement required=in:T1,T2,T3? | |
| 17:21:23 | sean-k-mooney | many people do care about the page size | |
| 17:21:29 | sean-k-mooney | no | |
| 17:21:35 | efried | so | |
| 17:21:38 | sean-k-mooney | if we did we could use that | |
| 17:22:01 | sean-k-mooney | although no it would not work because reqired in was for traits | |
| 17:22:05 | efried | But if people care about 'large', where that's allowed to mean "bigger than X", that doesn't work. | |
| 17:22:05 | efried | if people care about specific page sizes, we have a trait that says PAGE_SIZES_HERE_ARE_4K. | |
| 17:22:06 | stephenfin | right, and those people are probably explicitly saying e.g. 'hw:mem_page_size=2k' | |
| 17:22:13 | sean-k-mooney | yes | |
| 17:22:21 | stephenfin | or know that their datacenter is configured with only 2k or 1G pages | |
| 17:22:25 | efried | (is bauzas still listening btw?) | |
| 17:22:32 | stephenfin | bauzas is on kid duty | |
| 17:22:35 | efried | k | |
| 17:22:35 | stephenfin | but has scrollback | |
| 17:22:38 | efried | yuh | |
| 17:23:24 | stephenfin | efried: Still not sure how we do the step_size determination though | |
| 17:23:30 | sean-k-mooney | https://etherpad.openstack.org/p/mem_page_size_and_placement | |
| 17:23:37 | sean-k-mooney | lets go there too | |
| 17:23:39 | efried | stephenfin: Doesn't the virt driver know how big its pages are? | |
| 17:23:44 | sean-k-mooney | yes | |
| 17:23:51 | efried | that's the step_size. | |
| 17:23:52 | sean-k-mooney | and a host can have multiple pages sizes | |
| 17:24:03 | efried | in the same numa cell? | |
| 17:24:15 | sean-k-mooney | a host can have 4k 2mb and 1g in the same cell yes | |