)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"add4b703615efe5b1620dcf1f3034746ce739f9c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-file-backed-memory"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the advent of large capacity memory devices, its now reasonable to run"},{"line_number":12,"context_line":"virtual machines with file backed memory. This enables a much larger total"},{"line_number":13,"context_line":"memory area per compute node"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_8ecd7486","line":11,"range":{"start_line":11,"start_character":50,"end_line":11,"end_character":53},"updated":"2018-05-15 12:30:14.000000000","message":"it\u0027s :)","commit_id":"181dbdb4bcd105c19d158e587ab2dfbf6d323b5e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"33ca20c04d9cc8e47c5d62b78ff80d679b0cd7a5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-file-backed-memory"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the advent of large capacity memory devices, its now reasonable to run"},{"line_number":12,"context_line":"virtual machines with file backed memory. This enables a much larger total"},{"line_number":13,"context_line":"memory area per compute node"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5f7c97a3_2efc603c","line":11,"range":{"start_line":11,"start_character":50,"end_line":11,"end_character":53},"updated":"2018-05-15 12:33:55.000000000","message":"it\u0027s","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"c02022a0887480592a8a85a819afb2eee004202d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Libvirt file backed memory"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-file-backed-memory"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"With the advent of large capacity memory devices, it\u0027s now reasonable to run"},{"line_number":12,"context_line":"virtual machines with file backed memory. This enables a much larger total"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_6ecfaa28","line":9,"updated":"2018-05-15 23:15:05.000000000","message":"FYI, you have to write something more like:\n\n Spec for blueprint libvirt-file-backed-memory\n\nin order for the gerrit bot to link this up with your launchpad blueprint (will add review links to the whiteboard).","commit_id":"fdb00a31c85e9c0682a6b1bb377e4dea60410d7b"}],"specs/rocky/approved/libvirt-file-backed-memory.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Use Cases"},{"line_number":25,"context_line":"---------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Enabling significantly larger memory surface on Compute hosts, using libvirt\u0027s"},{"line_number":28,"context_line":"memory backing file source and QEMU. Enablement per operator choice allows"},{"line_number":29,"context_line":"a decision between native memory performance of RAM and the large memory"},{"line_number":30,"context_line":"area of SSDs and new memory technologies. Operators can configure"},{"line_number":31,"context_line":"the libvirt memory_backing_dir, and the filesystem and/or files within to"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_54962f40","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":35},"updated":"2018-04-23 17:30:25.000000000","message":"If you want to be more consistent with other things, this should be something like:\n\n\"As an operator, I want to be able to leverage libvirt\u0027s support for file-backed memory technologies to expand my compute node capacity.\"","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":25,"context_line":"---------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Enabling significantly larger memory surface on Compute hosts, using libvirt\u0027s"},{"line_number":28,"context_line":"memory backing file source and QEMU. Enablement per operator choice allows"},{"line_number":29,"context_line":"a decision between native memory performance of RAM and the large memory"},{"line_number":30,"context_line":"area of SSDs and new memory technologies. Operators can configure"},{"line_number":31,"context_line":"the libvirt memory_backing_dir, and the filesystem and/or files within to"},{"line_number":32,"context_line":"point to backing devices of their choice."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Proposed change"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_34937b5d","line":32,"range":{"start_line":28,"start_character":37,"end_line":32,"end_character":41},"updated":"2018-04-23 17:30:25.000000000","message":"I would nix all of this since it\u0027s not a use case.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9d09e89d7da3bfcf005ea6d894a3952ac1874f1e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Use Cases"},{"line_number":25,"context_line":"---------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Enabling significantly larger memory surface on Compute hosts, using libvirt\u0027s"},{"line_number":28,"context_line":"memory backing file source and QEMU. Enablement per operator choice allows"},{"line_number":29,"context_line":"a decision between native memory performance of RAM and the large memory"},{"line_number":30,"context_line":"area of SSDs and new memory technologies. Operators can configure"},{"line_number":31,"context_line":"the libvirt memory_backing_dir, and the filesystem and/or files within to"},{"line_number":32,"context_line":"point to backing devices of their choice."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Proposed change"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_f4de63d8","line":32,"range":{"start_line":27,"start_character":0,"end_line":32,"end_character":41},"updated":"2018-04-23 17:38:40.000000000","message":"The \"As an X I want Y\" is really helpful for use cases. As is currently written, it sort of assumes operators want this, but doesn\u0027t explain why. Also, do users want this? Should this be exposed in the API or as a flavor extra spec or image property?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"The proposed change is to add new options in \"nova.conf\" under the \"libvirt\""},{"line_number":38,"context_line":"section to configure file backed memory"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* file_backed_memory"},{"line_number":41,"context_line":"* file_backed_memory_capacity"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_94b927cd","line":38,"updated":"2018-04-23 17:30:25.000000000","message":"I think this should end with ::","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9d09e89d7da3bfcf005ea6d894a3952ac1874f1e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"will not include any options for memory backing. \"file_backed_memory_capacity\""},{"line_number":45,"context_line":"will be ignored when \"file_backed_memory\" is \"False\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"When \"file_backed_memory\" is set to True, the libvirt driver will include a"},{"line_number":48,"context_line":"MemoryBacking element, with a \"source\" subelement with type \"file\", and an"},{"line_number":49,"context_line":"\"access\" subelement with mode \"shared\"."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_d4fa3f41","line":49,"range":{"start_line":47,"start_character":61,"end_line":49,"end_character":39},"updated":"2018-04-23 17:38:40.000000000","message":"For every single VM on that compute host? See user visibility/configurability comment above.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0d78bc82d903a7415983ce37cdd64c3269cb3268","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MemoryBacking element, with a \"source\" subelement with type \"file\", and an"},{"line_number":49,"context_line":"\"access\" subelement with mode \"shared\"."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":53,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":54,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":55,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_d7bc8107","line":56,"range":{"start_line":51,"start_character":0,"end_line":56,"end_character":25},"updated":"2018-04-23 18:03:05.000000000","message":"This is troubling. What this is going to end up doing is adjusting the value of the MEMORY_MB inventory total for the compute node, however a compute node\u0027s RAM is *not* the same thing as this file-backed memory and shouldn\u0027t be considered the same thing (as you know, the latency of NVMe memory is much higher than RAM even if its total memory bandwidth can be similar).\n\nIt seems like you want a new resource class to represent this different type of memory and will need the placement service to track this separately from main memory on the compute node.\n\nAlternately, I suppose you could use the same MEMORY_MB resource class, set up a child resource provider that has an inventory of MEMORY_MB under the compute node root resource provider, and use a trait (similar to the STORAGE_DISK_SSD trait) to differentiate between the two different types of memory.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"17b5c3842c5722fdc1f440d998115146d2de5a80","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MemoryBacking element, with a \"source\" subelement with type \"file\", and an"},{"line_number":49,"context_line":"\"access\" subelement with mode \"shared\"."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":53,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":54,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":55,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_5232bf5f","line":56,"range":{"start_line":51,"start_character":0,"end_line":56,"end_character":25},"in_reply_to":"9f6a8fd7_123d27c3","updated":"2018-04-23 19:05:10.000000000","message":"\u003e Everything on the compute node would be backed by the file-backed\n \u003e memory bit. That means that the actual RAM on the compute node is\n \u003e no longer of any relevance to the rest of nova. If we were going to\n \u003e support starting instances that could be backed by system RAM or\n \u003e this file-backed stuff, then yeah, we\u0027d need two providers with\n \u003e different inventories. That\u0027s not what this is proposing, however.\n\nOK. That wasn\u0027t clear. If that is the case, we will need a mechanism of preventing this new CONF option from being used on existing compute nodes that already have instances on them, then.\n\nOtherwise, existing instances would be consuming main memory (since their libvirt.xml files would not contain the new backing file elements) and new instances would be consuming memory from the backing file. \n\n \u003e That would be a bigger change, akin to compute nodes supporting\n \u003e local and shared storage at the same time, and we know how well\n \u003e that has gone so far :)\n\nIndeed, which is why this was initially so concerning for me.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7c7fb3f1bc9e1b5174d12e41eb8ef68a2ced734d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MemoryBacking element, with a \"source\" subelement with type \"file\", and an"},{"line_number":49,"context_line":"\"access\" subelement with mode \"shared\"."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":53,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":54,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":55,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_2d724e7c","line":56,"range":{"start_line":51,"start_character":0,"end_line":56,"end_character":25},"in_reply_to":"9f6a8fd7_5232bf5f","updated":"2018-04-23 19:38:02.000000000","message":"\u003e OK. That wasn\u0027t clear.\n\nI think it was called out later. See below.\n\n\u003e If that is the case, we will need a mechanism of preventing this new CONF option from being used on existing compute nodes that already have instances on them, then.\n\u003e Otherwise, existing instances would be consuming main memory (since their libvirt.xml files would not contain the new backing file elements) and new instances would be consuming memory from the backing file. \n\nIf you have instances on a compute, you shut down the compute, plug in some magic box and then boot back up in this file-backed config, instances that get re-started could be backed by the new mechanism without needing any other change (just re-writing their xml, which we do on things like a hard reboot). Remember, this is non-persisted memory backing only.\n\nPerhaps you\u0027re concerned with restarting the compute service only after tweaking this config and having instances still running against system memory? If so, that\u0027s pretty much the same situation as if you changed something like the storage config to point to ceph instead of local disk. The difference here is that the instances *can* be reconfigured to use the file-backed memory without moving them or doing something more complicated. That\u0027s not the case with local-\u003eceph in the storage example, as you\u0027d have to move the actual data before you could start up.\n\nIMHO, on compute service restart we can just check running instances (as we do) to make sure that they\u0027re consistent with the state of that flag and warn if not. We don\u0027t do that for storage config changes, so I\u0027m not sure it\u0027s really required, but we could.\n\n\u003e Indeed, which is why this was initially so concerning for me.\n\nOkay, this spec eliminates that scope specifically on L80-L83.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"daf2c46a6931f5a61039881441919d9348c7f734","unresolved":false,"context_lines":[{"line_number":48,"context_line":"MemoryBacking element, with a \"source\" subelement with type \"file\", and an"},{"line_number":49,"context_line":"\"access\" subelement with mode \"shared\"."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":53,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":54,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":55,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_123d27c3","line":56,"range":{"start_line":51,"start_character":0,"end_line":56,"end_character":25},"in_reply_to":"9f6a8fd7_d7bc8107","updated":"2018-04-23 18:28:28.000000000","message":"Everything on the compute node would be backed by the file-backed memory bit. That means that the actual RAM on the compute node is no longer of any relevance to the rest of nova. If we were going to support starting instances that could be backed by system RAM or this file-backed stuff, then yeah, we\u0027d need two providers with different inventories. That\u0027s not what this is proposing, however. That would be a bigger change, akin to compute nodes supporting local and shared storage at the same time, and we know how well that has gone so far :)","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":55,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"},{"line_number":60,"context_line":"an underlying backing store for pages in-use by the virt, but will keep those"},{"line_number":61,"context_line":"pages within main system memory."}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_d4c23f34","line":58,"updated":"2018-04-23 17:30:25.000000000","message":"Extra line here","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":56,"context_line":"used memory for instances"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"NOTE: \"shared\" access mode is required, as \"private\" access will not utilize"},{"line_number":60,"context_line":"an underlying backing store for pages in-use by the virt, but will keep those"},{"line_number":61,"context_line":"pages within main system memory."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_f4d423eb","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":5},"updated":"2018-04-23 17:30:25.000000000","message":"I think this needs to be \"..note:\" syntax, if you look at other specs with similar notes.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":63,"context_line":"NOTE: During migration, the destination compute node must be checked for the"},{"line_number":64,"context_line":"\"file_backed_memory\" option, and add or remove the MemoryBacking element and"},{"line_number":65,"context_line":"subelements as appropriate, to ensure memory is appropriately allocated during"},{"line_number":66,"context_line":"the migration process"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Alternatives"},{"line_number":69,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_d4f0ff93","line":66,"updated":"2018-04-23 17:30:25.000000000","message":"How is that going to happen? Some details here would be good. I assume there is some prior art with some of the other things we have to tweak during migration you can point to.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"6eaccc5a98553d5ad105ec425ee1fedb2d4a55dc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"NOTE: During migration, the destination compute node must be checked for the"},{"line_number":64,"context_line":"\"file_backed_memory\" option, and add or remove the MemoryBacking element and"},{"line_number":65,"context_line":"subelements as appropriate, to ensure memory is appropriately allocated during"},{"line_number":66,"context_line":"the migration process"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"Alternatives"},{"line_number":69,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_678a956a","line":66,"in_reply_to":"9f6a8fd7_d4f0ff93","updated":"2018-04-24 14:26:04.000000000","message":"From the above \"NOTE\" on migration, I\u0027m assuming you just mean the guest XML config may look different on the other side when migrating -- that shouldn\u0027t be a problem, as it is just backend configuration (which doesn\u0027t affect guest ABI).\n\nIt should be handled just like how disk backend config is handled -- i.e. just like how it is possible to tell libvirt to look for the disk in a different location when necessary.\n\nUnless there\u0027s anything that I\u0027m missing from Kove\u0027s File System implementation, migration should Just Work transparently.  I\u0027m sure testing will show.\n\n(FWIW, I also double-checked the above this morning with libvirt \u0026 QEMU upstream folks who worked on this area.)","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":68,"context_line":"Alternatives"},{"line_number":69,"context_line":"------------"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Operators could achieve this by manually updating domain XML of guests."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In Nova, the available memory capacity could be detected dynamically. Due to"},{"line_number":74,"context_line":"the variety of ways the memory backing directory could be configured within"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_f4ed03b7","line":71,"updated":"2018-04-23 17:30:25.000000000","message":"No they can\u0027t. Nova will overwrite the XML at will. Don\u0027t even put this in here :)","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Operators could achieve this by manually updating domain XML of guests."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In Nova, the available memory capacity could be detected dynamically. Due to"},{"line_number":74,"context_line":"the variety of ways the memory backing directory could be configured within"},{"line_number":75,"context_line":"libvirt and on the system, this would require implementing an external call"},{"line_number":76,"context_line":"point to determine the available capacity, or require vendor-specific code"},{"line_number":77,"context_line":"included in Nova. Either option would significantly increase the scope of this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_1440b7a4","line":74,"range":{"start_line":74,"start_character":58,"end_line":74,"end_character":68},"updated":"2018-04-23 17:30:25.000000000","message":"...and the underlying technology?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9d09e89d7da3bfcf005ea6d894a3952ac1874f1e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"Alternatives"},{"line_number":69,"context_line":"------------"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Operators could achieve this by manually updating domain XML of guests."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"In Nova, the available memory capacity could be detected dynamically. Due to"},{"line_number":74,"context_line":"the variety of ways the memory backing directory could be configured within"},{"line_number":75,"context_line":"libvirt and on the system, this would require implementing an external call"},{"line_number":76,"context_line":"point to determine the available capacity, or require vendor-specific code"},{"line_number":77,"context_line":"included in Nova. Either option would significantly increase the scope of this"},{"line_number":78,"context_line":"spec."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In Nova, file backed memory could be enabled via a flavor extra-spec, allowing"},{"line_number":81,"context_line":"for control per individual instance. This results in an inconsistent use of RAM"},{"line_number":82,"context_line":"and backing devices, leading to a confusing / conflicting memory capacity"},{"line_number":83,"context_line":"calculation on the compute node."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Data model impact"},{"line_number":86,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_3487fbb7","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":32},"updated":"2018-04-23 17:38:40.000000000","message":"This is giving alternatives to the \"how\" (which is good, but not sufficient), but I think alternatives to the \"what\" would also be interesting. What happens if we don\u0027t do file backed memory at all? What are the downsides of that, that this spec solves?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"As the instance memory will now be contained within a file on a filesystem,"},{"line_number":99,"context_line":"instance memory will be accessible to any process owned by a user with"},{"line_number":100,"context_line":"permissions neccisary to access the files."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Notifications impact"},{"line_number":103,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_34e5bb09","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":21},"updated":"2018-04-23 17:30:25.000000000","message":"necessary\n\nAlso, root on the system can read system memory anyway, so this is not necessarily opening any new surfaces. Maybe just add something about that to avoid freaking people out?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"82a27daa1b4e5839926caee263a528afb41a3e10","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"New config options would need to be explicitly enabled to take effect."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Prior to enabling new config options, an operator should configure the libvirt"},{"line_number":124,"context_line":"memory_backing_dir in \"qemu.conf\" to point to their selected backing store,"},{"line_number":125,"context_line":"such as a filesystem on an NVMe device."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_ade3bed8","line":124,"range":{"start_line":123,"start_character":71,"end_line":124,"end_character":33},"updated":"2018-04-23 19:54:04.000000000","message":"libvirt.conf or qemu.conf?  or nova.conf?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"9e9c7328581086b0cc187fc411e9128c86be4cb2","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"New config options would need to be explicitly enabled to take effect."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Prior to enabling new config options, an operator should configure the libvirt"},{"line_number":124,"context_line":"memory_backing_dir in \"qemu.conf\" to point to their selected backing store,"},{"line_number":125,"context_line":"such as a filesystem on an NVMe device."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_9e105959","line":124,"range":{"start_line":123,"start_character":71,"end_line":124,"end_character":33},"in_reply_to":"9f6a8fd7_6d3da6db","updated":"2018-04-24 12:06:49.000000000","message":"Yes, what Dan said.  But Jay, just for clarity\u0027s sake, the \"qemu.conf\" is the libvirt QEMU driver, and  it\u0027s located here: /etc/libvirt/qemu.conf.  And this is the relevant bit:\n    ...\n    # This directory is used for memoryBacking source \n    # if configured as file.\n    # NOTE: big files will be stored here\n    # memory_backing_dir \u003d \"/var/lib/libvirt/qemu/ram\"\n    ...\n\nI would probably mention that for completeness\u0027 sake.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dac26fd66e94b815822d991d0608384e11e5ab59","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"New config options would need to be explicitly enabled to take effect."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Prior to enabling new config options, an operator should configure the libvirt"},{"line_number":124,"context_line":"memory_backing_dir in \"qemu.conf\" to point to their selected backing store,"},{"line_number":125,"context_line":"such as a filesystem on an NVMe device."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_6d3da6db","line":124,"range":{"start_line":123,"start_character":71,"end_line":124,"end_character":33},"in_reply_to":"9f6a8fd7_ade3bed8","updated":"2018-04-23 20:06:07.000000000","message":"This is not a nova thing, it\u0027s between libvirt and qemu -- we never need to know about it. So, not nova.conf.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9d09e89d7da3bfcf005ea6d894a3952ac1874f1e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"primary author and contact."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Primary assignee:"},{"line_number":150,"context_line":"  \u003claunchpad-id or None\u003e"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Other contributors:"},{"line_number":153,"context_line":"  \u003claunchpad-id or None\u003e"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_f4a50348","line":150,"updated":"2018-04-23 17:38:40.000000000","message":"So you\u0027re not going to work on this yourself?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":156,"context_line":"----------"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* Add new configuration options to nova.conf"},{"line_number":159,"context_line":"* Check for configuration options within libvirt driver"},{"line_number":160,"context_line":"* Generate additional libvirt domain XML as needed"},{"line_number":161,"context_line":"* Validate / correct libvirt domain XML during migration process"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_34261b17","line":159,"updated":"2018-04-23 17:30:25.000000000","message":"Extend this to say \"...and report the file-backed capacity value instead of system memory\"","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Dependencies"},{"line_number":164,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Testing"},{"line_number":169,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_748573ce","line":166,"updated":"2018-04-23 17:30:25.000000000","message":"What version of libvirt and qemu?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"9e9c7328581086b0cc187fc411e9128c86be4cb2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Dependencies"},{"line_number":164,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"None"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Testing"},{"line_number":169,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_8c47cebc","line":166,"in_reply_to":"9f6a8fd7_748573ce","updated":"2018-04-24 12:06:49.000000000","message":"libvirt:\n - Upstream: v3.10.0\n - But for CentOS / RHEL: libvirt-3.9.0-11.el7\n\nFor QEMU version, Nova doesn\u0027t need to care -- at least for the \"libvirt creating predictable file names for QEMU\u0027s `memory-backend-file` (which was introduced in QEMU 2.1.0) -- Nova\u0027s current MIN_QEMU_VERSION (2.5.0) satisfies that requirement.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":174,"context_line":"Tests will be needed for the edge cases of migrating between a host with the"},{"line_number":175,"context_line":"new options enabled, and a host without the new options enabled, to ensure the"},{"line_number":176,"context_line":"memory is allocated from the correct source."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Documentation Impact"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_346b7b1e","line":177,"updated":"2018-04-23 17:30:25.000000000","message":"Can we test this in the gate? Could we have a weird experimental job that creates a large ramdisk, uses it as the file-backed destination, just to make sure that plumbing works?","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"9e9c7328581086b0cc187fc411e9128c86be4cb2","unresolved":false,"context_lines":[{"line_number":174,"context_line":"Tests will be needed for the edge cases of migrating between a host with the"},{"line_number":175,"context_line":"new options enabled, and a host without the new options enabled, to ensure the"},{"line_number":176,"context_line":"memory is allocated from the correct source."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Documentation Impact"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_677cd582","line":177,"in_reply_to":"9f6a8fd7_346b7b1e","updated":"2018-04-24 12:06:49.000000000","message":"Yeah, just to test if the configuration handling is working, we can probably test it with a manually created \u0027hugetlbfs\u0027 or \u0027tmpfs\u0027 directory.  As only Kove can do the actual functional testing.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6f5e75120b2b65dbff92297818a18da7bb62c874","unresolved":false,"context_lines":[{"line_number":192,"context_line":".. list-table:: Revisions"},{"line_number":193,"context_line":"   :header-rows: 1"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"   * - Release Name"},{"line_number":196,"context_line":"     - Description"},{"line_number":197,"context_line":"   * - Rocky"},{"line_number":198,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_94636742","line":196,"range":{"start_line":195,"start_character":0,"end_line":196,"end_character":18},"updated":"2018-04-23 17:30:25.000000000","message":"nix this","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"72c17ea3a53a02d2b35471630a062f4cfc7cf26c","unresolved":false,"context_lines":[{"line_number":192,"context_line":".. list-table:: Revisions"},{"line_number":193,"context_line":"   :header-rows: 1"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"   * - Release Name"},{"line_number":196,"context_line":"     - Description"},{"line_number":197,"context_line":"   * - Rocky"},{"line_number":198,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_9729298b","line":196,"range":{"start_line":195,"start_character":0,"end_line":196,"end_character":18},"in_reply_to":"9f6a8fd7_94636742","updated":"2018-04-23 17:43:30.000000000","message":"Umm, no :) Those are the headers in the table.","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c3c6e5c29211fc8acb9d7bf62af5989e9695f1f5","unresolved":false,"context_lines":[{"line_number":192,"context_line":".. list-table:: Revisions"},{"line_number":193,"context_line":"   :header-rows: 1"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"   * - Release Name"},{"line_number":196,"context_line":"     - Description"},{"line_number":197,"context_line":"   * - Rocky"},{"line_number":198,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":1,"id":"9f6a8fd7_1742f93e","line":196,"range":{"start_line":195,"start_character":0,"end_line":196,"end_character":18},"in_reply_to":"9f6a8fd7_9729298b","updated":"2018-04-23 17:44:38.000000000","message":"Dang, I always forget that. Thanks :)","commit_id":"bf0d6c7b88cc58e5465744bb4fbaa4c18317106f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"Proposed change"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"The proposed change is to add new options in \"nova.conf\" under the \"libvirt\""},{"line_number":34,"context_line":"section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* file_backed_memory"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_95b02adf","line":33,"range":{"start_line":33,"start_character":68,"end_line":33,"end_character":75},"updated":"2018-04-24 16:59:47.000000000","message":"nit: and here","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"Proposed change"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"The proposed change is to add new options in \"nova.conf\" under the \"libvirt\""},{"line_number":34,"context_line":"section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* file_backed_memory"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_d5ba22bf","line":33,"range":{"start_line":33,"start_character":46,"end_line":33,"end_character":55},"updated":"2018-04-24 16:59:47.000000000","message":"nit: double backticks here please (``)","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in \"nova.conf\" under the \"libvirt\""},{"line_number":34,"context_line":"section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* file_backed_memory"},{"line_number":37,"context_line":"* file_backed_memory_capacity"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For \"file_backed_memory\", the default is \"False\", meaning the libvirt driver"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_75c9d656","line":36,"range":{"start_line":36,"start_character":2,"end_line":36,"end_character":20},"updated":"2018-04-24 16:59:47.000000000","message":"nit: and here","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* file_backed_memory"},{"line_number":37,"context_line":"* file_backed_memory_capacity"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For \"file_backed_memory\", the default is \"False\", meaning the libvirt driver"},{"line_number":40,"context_line":"will not include any options for memory backing. \"file_backed_memory_capacity\""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_15c41a3f","line":37,"range":{"start_line":37,"start_character":2,"end_line":37,"end_character":29},"updated":"2018-04-24 16:59:47.000000000","message":"nit: and here","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"* file_backed_memory"},{"line_number":37,"context_line":"* file_backed_memory_capacity"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For \"file_backed_memory\", the default is \"False\", meaning the libvirt driver"},{"line_number":40,"context_line":"will not include any options for memory backing. \"file_backed_memory_capacity\""},{"line_number":41,"context_line":"will be ignored when \"file_backed_memory\" is \"False\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_35bfdeaa","line":39,"range":{"start_line":39,"start_character":5,"end_line":39,"end_character":23},"updated":"2018-04-24 16:59:47.000000000","message":"here","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"* file_backed_memory"},{"line_number":37,"context_line":"* file_backed_memory_capacity"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For \"file_backed_memory\", the default is \"False\", meaning the libvirt driver"},{"line_number":40,"context_line":"will not include any options for memory backing. \"file_backed_memory_capacity\""},{"line_number":41,"context_line":"will be ignored when \"file_backed_memory\" is \"False\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_f5e2c6d4","line":39,"range":{"start_line":39,"start_character":42,"end_line":39,"end_character":47},"updated":"2018-04-24 16:59:47.000000000","message":"here","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"* file_backed_memory_capacity"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For \"file_backed_memory\", the default is \"False\", meaning the libvirt driver"},{"line_number":40,"context_line":"will not include any options for memory backing. \"file_backed_memory_capacity\""},{"line_number":41,"context_line":"will be ignored when \"file_backed_memory\" is \"False\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When \"file_backed_memory\" is set to True, the libvirt driver will include a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_55d37204","line":40,"range":{"start_line":40,"start_character":50,"end_line":40,"end_character":77},"updated":"2018-04-24 16:59:47.000000000","message":"OK I\u0027ll stop now, you get the idea :)","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":48,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":49,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":50,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":51,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":52,"context_line":"used memory for instances"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. note:: \"shared\" access mode is required, as \"private\" access will not"},{"line_number":55,"context_line":"          utilize an underlying backing store for pages in-use by the virt,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_75255608","line":52,"range":{"start_line":50,"start_character":38,"end_line":52,"end_character":25},"updated":"2018-04-24 16:59:47.000000000","message":"So this means that if a compute node has file_backed_memory, it\u0027s \"real\" RAM is completely unused by instances, right?","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"dc3488d2ea06d1b084fe9e2c909abb66541c9d89","unresolved":false,"context_lines":[{"line_number":47,"context_line":"\"file_backed_memory_capacity\" will control what the libvirt driver reports"},{"line_number":48,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":49,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":50,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":51,"context_line":"calculated from the value in \"file_backed_memory_capacity\" minus the currently"},{"line_number":52,"context_line":"used memory for instances"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. note:: \"shared\" access mode is required, as \"private\" access will not"},{"line_number":55,"context_line":"          utilize an underlying backing store for pages in-use by the virt,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_70924459","line":52,"range":{"start_line":50,"start_character":38,"end_line":52,"end_character":25},"in_reply_to":"9f6a8fd7_75255608","updated":"2018-04-25 15:55:30.000000000","message":"The \"real\" RAM will get used by the kernel as pagecache for the actual backing store, but not directly used or associated by a single instance.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"used memory for instances"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. note:: \"shared\" access mode is required, as \"private\" access will not"},{"line_number":55,"context_line":"          utilize an underlying backing store for pages in-use by the virt,"},{"line_number":56,"context_line":"          but will keep those pages within main system memory."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. note:: During migration, the destination compute node must be checked for"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_35427eac","line":55,"range":{"start_line":55,"start_character":66,"end_line":55,"end_character":74},"updated":"2018-04-24 16:59:47.000000000","message":"\"the virt driver\", perhaps?","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Performance Impact"},{"line_number":113,"context_line":"------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When the \"file_backed_memory\" option is enabled, instance memory performance"},{"line_number":116,"context_line":"will be dependent on the backing store, as configured by the operator."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_35535e3b","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":70},"updated":"2018-04-24 16:59:47.000000000","message":"I think this is the thing I have the most trouble wrapping my head around. Let\u0027s consider a simple example, using Kove\u0027s very own xpd [1] appliance. I\u0027m told we don\u0027t like to mention specific brands in specs, but just for discussion\u0027s sake.\n\nLet\u0027s say there\u0027s a cloud with some computes attached to an xpd, and some with regular old RAM. The user boots an instance, and has no way of knowing on which compute he\u0027ll end up. Will he see significant memory performance differences between regular old RAM and the xpd? Is there a latency and/or bandwidth penalty for using the xpd? And it can only get worse if we go to other cheaper backing technologies, like SSDs?\n\nThat being said, I\u0027m pretty sure we can avoid the previous\u0027s paragraph\u0027s uncertainty by using flavor extra specs, host aggregates and AggregateInstanceExtraSpecsFilter to schedule xpd-enabled flavors to host aggregates with xpd appliances. So I think I answered my own question, but perhaps spelling this out more explicitly in the spec would be nice.\n\n[1] http://kove.net/xpd","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"dc3488d2ea06d1b084fe9e2c909abb66541c9d89","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Performance Impact"},{"line_number":113,"context_line":"------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When the \"file_backed_memory\" option is enabled, instance memory performance"},{"line_number":116,"context_line":"will be dependent on the backing store, as configured by the operator."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_50d38004","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":70},"in_reply_to":"9f6a8fd7_35535e3b","updated":"2018-04-25 15:55:30.000000000","message":"The performance impact is dependent both on the backing store performance, and the instance workload.\n\nSince the main system memory on the compute node is being used as pagecache for the backing store, performance for a cache-friendly workload has very little impact, while some workloads with essentially random access patterns will have higher impacts.\n\nThe latency and bandwidth of the backing store then defines how much that impact actually is. A memory device such as Kove\u0027s XPD will have less impact than SSDs, and SSDs will have less impact than spinning disks, etc.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f89e0b9d524aa86b147d751f5a4f18307d6c457b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Performance Impact"},{"line_number":113,"context_line":"------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When the \"file_backed_memory\" option is enabled, instance memory performance"},{"line_number":116,"context_line":"will be dependent on the backing store, as configured by the operator."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_793c56e0","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":70},"in_reply_to":"9f6a8fd7_50d38004","updated":"2018-04-25 17:20:18.000000000","message":"Thanks for the explanation! So, essentially, file backed memory is a fast (-ish, depending on the underlying technology) swap.\n\nAnd despite the performance hit not being as bad as I initially thought, there will still be one, albeit highly dependant on workload and underlying technology, so I think users should be made aware what kind of instance they\u0027re getting.\n\nThat can be done with flavor extra_specs, and would be the operator\u0027s responsibility, but I think it\u0027d be worth mentioning in the spec.\n\nAlso, while using the AggregateInstanceExtraSpecsFilter as I explained above is fine for now, using aggregates and filters is the \"old\" way of doing things. Ideally, there would be a follow up spec/patch to this that would add a compute node resource provider trait (is that the right word? The placement folks can pick me up on this) that can be selected for via placement.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"805af5e49f414079eeaba43a4ffdf88198c9e356","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Performance Impact"},{"line_number":113,"context_line":"------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When the \"file_backed_memory\" option is enabled, instance memory performance"},{"line_number":116,"context_line":"will be dependent on the backing store, as configured by the operator."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_fdc7f194","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":70},"in_reply_to":"9f6a8fd7_793c56e0","updated":"2018-04-25 17:33:33.000000000","message":"Right now operators can set a memory overcommit (which we default to 1.5x) that will cause the host to swap (likely to something very slow) and cause the same sort of behavior. CPU overcommit (which is default-on at an insane level) will cause the same sort of thing. Without flavors configured and advertised for isolation, this is expected noisy-neighbor potential.\n\nI don\u0027t think there\u0027s really anything different about this, except that overcommit would be much (much) faster if using something like the one described. Sure, segregation by aggregates and full disclosure to your users would be ideal, but nothing about the potential perf impact is unique to this, IMHO.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a073117e84f49728c75720c0fc966346f122a962","unresolved":false,"context_lines":[{"line_number":112,"context_line":"Performance Impact"},{"line_number":113,"context_line":"------------------"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"When the \"file_backed_memory\" option is enabled, instance memory performance"},{"line_number":116,"context_line":"will be dependent on the backing store, as configured by the operator."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"Other deployer impact"},{"line_number":119,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_9dd83553","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":70},"in_reply_to":"9f6a8fd7_fdc7f194","updated":"2018-04-25 17:41:55.000000000","message":"Aha, good points, thanks Dan. I was coming at this from the same angle as NUMA and/or hugepages (for example) for some reason, which is completely wrong. This isn\u0027t about breaking the cloud paradigm to improve performance. The cloud paradigm is kept, and operators actually gain a way to have higher memory capacities with similar-ish performance, without actually investing in RAM.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e19b61ca39c49b928a219683aa08a0363914d81e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"Dependencies"},{"line_number":159,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"Qemu \u003e\u003d 2.6.0"},{"line_number":162,"context_line":"Libvirt \u003e\u003d 4.0.0"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"Testing"},{"line_number":165,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_f5364603","line":162,"range":{"start_line":161,"start_character":0,"end_line":162,"end_character":16},"updated":"2018-04-24 16:59:47.000000000","message":"nit: make this a list please","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"24e7f273a5bd263acac1d72b990d57a65550b10b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"new options enabled, and a host without the new options enabled, to ensure the"},{"line_number":172,"context_line":"memory is allocated from the correct source."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"An integration test will also be created to test this by creating a large"},{"line_number":175,"context_line":"ramdisk, enabling these settings, and validating that an instance is utilizing"},{"line_number":176,"context_line":"memory within files on that ramdisk."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Documentation Impact"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_b2f7968b","line":176,"range":{"start_line":174,"start_character":0,"end_line":176,"end_character":36},"updated":"2018-04-24 00:29:18.000000000","message":"I don\u0027t think we can do this in the upstream gate - tempest\u0027s scope is explicitly only stuff that can be asserted via the public APIs. This would require checking stuff on the host, which tempest can do. I would very much like for this do be done, perhaps in a 3rd party CI, but I think we\u0027re going to be limited to functional tests that assert stuff about the instance XML.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d573098244a86b857885c98e6c32f9d711f7a448","unresolved":false,"context_lines":[{"line_number":171,"context_line":"new options enabled, and a host without the new options enabled, to ensure the"},{"line_number":172,"context_line":"memory is allocated from the correct source."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"An integration test will also be created to test this by creating a large"},{"line_number":175,"context_line":"ramdisk, enabling these settings, and validating that an instance is utilizing"},{"line_number":176,"context_line":"memory within files on that ramdisk."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"Documentation Impact"},{"line_number":179,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9f6a8fd7_fdf15202","line":176,"range":{"start_line":174,"start_character":0,"end_line":176,"end_character":36},"in_reply_to":"9f6a8fd7_b2f7968b","updated":"2018-04-24 13:41:57.000000000","message":"The first part is what I suggested, which would be a devstack thing and would be fine for our gate I think. The latter wouldn\u0027t be possible with tempest, other than just by inspection of the logs.\n\nZack, I think I would edit this to say that such a test layout should be possible and that you\u0027ll explore the feasibility of it as part of this spec. Such changes to devstack and the test layout might be difficult to land, and in that case, we\u0027d just fall back on unit tests.","commit_id":"c831c30c875608ffe7ef4fcbd52be40baed70a0e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"baa11ec766bf13282166af1dd16a3ccc29383e66","unresolved":false,"context_lines":[{"line_number":41,"context_line":"``file_backed_memory_capacity`` will be ignored when ``file_backed_memory`` is"},{"line_number":42,"context_line":"``False``"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When ``file_backed_memory`` is set to True, the libvirt driver will include a"},{"line_number":45,"context_line":"MemoryBacking element for all instances on the compute node, with a ``source``"},{"line_number":46,"context_line":"subelement with type ``file``, and an ``access`` subelement with mode"},{"line_number":47,"context_line":"``shared``."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f6a8fd7_46972e3b","line":44,"range":{"start_line":44,"start_character":38,"end_line":44,"end_character":42},"updated":"2018-04-25 19:55:28.000000000","message":"nit: backticks for consistency with the ``False`` above?","commit_id":"46b77342bc374b6461344f8c0039f97bc2a796b9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"baa11ec766bf13282166af1dd16a3ccc29383e66","unresolved":false,"context_lines":[{"line_number":42,"context_line":"``False``"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"When ``file_backed_memory`` is set to True, the libvirt driver will include a"},{"line_number":45,"context_line":"MemoryBacking element for all instances on the compute node, with a ``source``"},{"line_number":46,"context_line":"subelement with type ``file``, and an ``access`` subelement with mode"},{"line_number":47,"context_line":"``shared``."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f6a8fd7_66859206","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":13},"updated":"2018-04-25 19:55:28.000000000","message":"nit: ditto, but for ``source`` right after","commit_id":"46b77342bc374b6461344f8c0039f97bc2a796b9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"baa11ec766bf13282166af1dd16a3ccc29383e66","unresolved":false,"context_lines":[{"line_number":50,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":51,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":52,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":53,"context_line":"calculated from the value in ``file_backed_memory_capacity`` minus the"},{"line_number":54,"context_line":"currently used memory for instances. System memory will be used as a cache"},{"line_number":55,"context_line":"for the file backed memory through the kernel pagecache."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":".. note:: ``shared`` access mode is required, as ``private`` access will not"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f6a8fd7_06ce1662","line":54,"range":{"start_line":53,"start_character":61,"end_line":54,"end_character":35},"updated":"2018-04-25 19:55:28.000000000","message":"How do we deal with overcommit? Include it in the calculation like we normally would, or are there reasons not to support overcommit with file backed memory?","commit_id":"46b77342bc374b6461344f8c0039f97bc2a796b9"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"1d4e00a0e4e3c16aac69ae96b9eec7c5f60a21b6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":51,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":52,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":53,"context_line":"calculated from the value in ``file_backed_memory_capacity`` minus the"},{"line_number":54,"context_line":"currently used memory for instances. System memory will be used as a cache"},{"line_number":55,"context_line":"for the file backed memory through the kernel pagecache."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":".. note:: ``shared`` access mode is required, as ``private`` access will not"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f6a8fd7_ec9981c3","line":54,"range":{"start_line":53,"start_character":61,"end_line":54,"end_character":35},"in_reply_to":"9f6a8fd7_06ce1662","updated":"2018-04-25 21:06:43.000000000","message":"With file backed memory, overcommit likely wouldn\u0027t work at all, as each instance would allocate as much space on the backing store as it\u0027s configured for, and once the backing store is full, new instances will simply fail allocate their memory within the backing store, and fail to start.","commit_id":"46b77342bc374b6461344f8c0039f97bc2a796b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d5d3e53dc3df6605b7f18e4b7105623b12bde42","unresolved":false,"context_lines":[{"line_number":50,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"},{"line_number":51,"context_line":"dependent on the backing store(s) in use, libvirt must report a value other"},{"line_number":52,"context_line":"than the real system memory capacity. Available capacity will then be"},{"line_number":53,"context_line":"calculated from the value in ``file_backed_memory_capacity`` minus the"},{"line_number":54,"context_line":"currently used memory for instances. System memory will be used as a cache"},{"line_number":55,"context_line":"for the file backed memory through the kernel pagecache."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":".. note:: ``shared`` access mode is required, as ``private`` access will not"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f6a8fd7_37e8227a","line":54,"range":{"start_line":53,"start_character":61,"end_line":54,"end_character":35},"in_reply_to":"9f6a8fd7_ec9981c3","updated":"2018-04-25 22:34:51.000000000","message":"Yeah, so since we already have to change what libvirt exports as available inventory (to use the configured static value), we can just also always expose a 1.0 ratio. In the doc for file_backed_memory_capacity, we just say \"and this makes it ignore the configured ratio.\"\n\nIf an operator manually tells placement something other than that, then I guess they deserve the hell that comes after that :)","commit_id":"46b77342bc374b6461344f8c0039f97bc2a796b9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"01314dafb30bcd97ec8ac2e4c72f96f646fb0b7d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_904132ac","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"updated":"2018-05-14 12:53:50.000000000","message":"What about just using the file_backed_memory_capacity, so if set to something upper than 0 we enable the feature?\n\nAlso do we want something like an unlimited capacity value?\n\nIn such case I would say:\n\n-1: disabled\n0: unlimited\nN: ...","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cb344f685f87f96dd8ee59b01d3ad9f9599119ea","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_d59786eb","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"in_reply_to":"5f7c97a3_050e35e4","updated":"2018-05-15 07:19:12.000000000","message":"Not sure I follow, why 0 isn\u0027t a reasonable option to mean disabled?","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"91d253fc32f3a0de759f6e0e16979b115d2ecd12","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_050e35e4","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"in_reply_to":"5f7c97a3_73010006","updated":"2018-05-14 20:24:27.000000000","message":"I agree with Dan, \"unlimited\" really isn\u0027t a reasonable option here.\n\nSince 0 isn\u0027t a reasonable option either, I have no issues with going to a single entry (It also helps define the default for file_backed_memory_capacity).\n\nOnly reason for going with 2 options was consistency with checksum_base_images and checksum_interval_seconds (Which are deprecated)","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cb40d22dca57a40af9ceb928c18a6c9975acc41d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_73010006","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"in_reply_to":"5f7c97a3_904132ac","updated":"2018-05-14 13:44:17.000000000","message":"I think we should avoid more config options where -1 has a special meaning. I also think \"unlimited\" is not ever going to be a reasonable option here, since it\u0027s not unlimited.\n\nSo, if other people think that zero means disabled and non-zero means enabled at that size, then that\u0027s okay with me.","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"01314dafb30bcd97ec8ac2e4c72f96f646fb0b7d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"When ``file_backed_memory`` is set to ``True``, the libvirt driver will"},{"line_number":45,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_d081eac4","line":49,"range":{"start_line":47,"start_character":22,"end_line":49,"end_character":39},"updated":"2018-05-14 12:53:50.000000000","message":"Instead of silently override that setting we should probably check whether ram_allocation_ratio is set to 1.0 during service startup when the feature is enabled. Seems reasonable to stop the service to start under such circumstances.","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cb344f685f87f96dd8ee59b01d3ad9f9599119ea","unresolved":false,"context_lines":[{"line_number":44,"context_line":"When ``file_backed_memory`` is set to ``True``, the libvirt driver will"},{"line_number":45,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_d5f22670","line":49,"range":{"start_line":47,"start_character":22,"end_line":49,"end_character":39},"in_reply_to":"5f7c97a3_25b811e3","updated":"2018-05-15 07:19:12.000000000","message":"If I can be a little bit pushy I would like we avoid such condition in the code [0]. Also as noted by Dan the options are influencing the service so it seems reasonable to stop process of starting-up whether some options configured are incompatibles.\n\n[0] https://review.openstack.org/#/c/567876/3/nova/virt/libvirt/driver.py@6463","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7ee867299a24f64d034f77087fd205d08635edd5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"When ``file_backed_memory`` is set to ``True``, the libvirt driver will"},{"line_number":45,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_25b811e3","line":49,"range":{"start_line":47,"start_character":22,"end_line":49,"end_character":39},"in_reply_to":"5f7c97a3_6534c993","updated":"2018-05-14 20:27:41.000000000","message":"It\u0027s okay (and desirable) to block service startup if the config is fundamentally broken. It\u0027s better than either failing late at runtime or not doing a thing that the operator thinks is enabled.\n\nThat said, just overriding is not breaking late, and not likely to be something they are confused about, unless of course, they\u0027re setting and both and confused about why the service seems to start and not report the non-1.0 ratio they\u0027re configuring. They\u0027re much more apt to notice a failed start than a warning flying by at startup.\n\nAgain, either way is okay with me.","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cb40d22dca57a40af9ceb928c18a6c9975acc41d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"When ``file_backed_memory`` is set to ``True``, the libvirt driver will"},{"line_number":45,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_1650ba0a","line":49,"range":{"start_line":47,"start_character":22,"end_line":49,"end_character":39},"in_reply_to":"5f7c97a3_d081eac4","updated":"2018-05-14 13:44:17.000000000","message":"I\u0027m also okay with this, but could go either way.","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"91d253fc32f3a0de759f6e0e16979b115d2ecd12","unresolved":false,"context_lines":[{"line_number":44,"context_line":"When ``file_backed_memory`` is set to ``True``, the libvirt driver will"},{"line_number":45,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_6534c993","line":49,"range":{"start_line":47,"start_character":22,"end_line":49,"end_character":39},"in_reply_to":"5f7c97a3_d081eac4","updated":"2018-05-14 20:24:27.000000000","message":"It seems like we\u0027d be causing a service startup failure, in a condition where we know there\u0027s only one valid option for the config.\n\nMaybe we continue overriding, but issue a warning at startup if ram_allocation_ratio is not set to 1.0?","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"01314dafb30bcd97ec8ac2e4c72f96f646fb0b7d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Upgrade impact"},{"line_number":138,"context_line":"--------------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Implementation"},{"line_number":143,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_50e39aa4","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":4},"updated":"2018-05-14 12:53:50.000000000","message":"What about to add a note saying that during upgrade the instances live-migrated to a compute where the service is configured to use that feature will be updated to have their memory backed on file as-well?","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cb40d22dca57a40af9ceb928c18a6c9975acc41d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Upgrade impact"},{"line_number":138,"context_line":"--------------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Implementation"},{"line_number":143,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_d66ec2c7","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":4},"in_reply_to":"5f7c97a3_50e39aa4","updated":"2018-05-14 13:44:17.000000000","message":"That\u0027s not really an upgrade thing. If you have instances on a non-file-backed node and migrate them to a file-backed one, you\u0027ll have this behavior even if you\u0027re not upgrading. I think that\u0027s covered on L63.\n\nHowever, what does need to be mentioned here is whatever the handling of migrating to/from older nodes that won\u0027t know to check or adjust the xml for the file-backed-ness of the older node (per ongoing discussion in the code patch).","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cb344f685f87f96dd8ee59b01d3ad9f9599119ea","unresolved":false,"context_lines":[{"line_number":137,"context_line":"Upgrade impact"},{"line_number":138,"context_line":"--------------"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"None"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Implementation"},{"line_number":143,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_558b76c1","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":4},"in_reply_to":"5f7c97a3_d66ec2c7","updated":"2018-05-15 07:19:12.000000000","message":"Yes good point.","commit_id":"c13ce725ff3c31f160b8251b2e78466857c6266f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"add4b703615efe5b1620dcf1f3034746ce739f9c","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-file-backed-memory"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"With the advent of large capacity memory devices, its now reasonable to run"},{"line_number":14,"context_line":"virtual machines with file backed memory. This enables a much larger total"},{"line_number":15,"context_line":"memory area per compute node"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_0ea724bf","line":13,"range":{"start_line":13,"start_character":50,"end_line":13,"end_character":53},"updated":"2018-05-15 12:30:14.000000000","message":"it\u0027s","commit_id":"181dbdb4bcd105c19d158e587ab2dfbf6d323b5e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"add4b703615efe5b1620dcf1f3034746ce739f9c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_4ed43ce9","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"updated":"2018-05-15 12:30:14.000000000","message":"recommend just having a single CONF option called file_backed_memory, an optional integer, defaulted to None and when set describes the total capacity of the backing device.","commit_id":"181dbdb4bcd105c19d158e587ab2dfbf6d323b5e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"add4b703615efe5b1620dcf1f3034746ce739f9c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_8ec9f459","line":49,"updated":"2018-05-15 12:30:14.000000000","message":"Hmm... While I understand why you want to do this, unfortunately the places where CONF.ram_allocation_ratio is set are different from where you will be processing the file_backend_memory_capacity.\n\nIn particular, you won\u0027t actually have access to change the *stored* value of ram_allocation_ratio (in the cell DB\u0027s compute_nodes.ram_allocation_ratio field and the placement DB\u0027s inventories.allocation_ratio field) from the virt driver layer.\n\nThe best I believe you can do in this regard is put a big old warning on your new CONF options that the CONF.ram_allocation_ratio should always be set to 1.0 when libvirt.file_backed_memory is set.","commit_id":"181dbdb4bcd105c19d158e587ab2dfbf6d323b5e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"33ca20c04d9cc8e47c5d62b78ff80d679b0cd7a5","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-file-backed-memory"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"With the advent of large capacity memory devices, its now reasonable to run"},{"line_number":14,"context_line":"virtual machines with file backed memory. This enables a much larger total"},{"line_number":15,"context_line":"memory area per compute node"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_4ef75c5a","line":13,"range":{"start_line":13,"start_character":50,"end_line":13,"end_character":53},"updated":"2018-05-15 12:33:55.000000000","message":"it\u0027s","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"33ca20c04d9cc8e47c5d62b78ff80d679b0cd7a5","unresolved":false,"context_lines":[{"line_number":33,"context_line":"The proposed change is to add new options in ``nova.conf`` under the"},{"line_number":34,"context_line":"``libvirt`` section to configure file backed memory:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"* ``file_backed_memory``"},{"line_number":37,"context_line":"* ``file_backed_memory_capacity``"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"For ``file_backed_memory``, the default is ``False``, meaning the libvirt"},{"line_number":40,"context_line":"driver will not include any options for memory backing."}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_ceeb6c75","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":33},"updated":"2018-05-15 12:33:55.000000000","message":"Recommend a single option:\n\n [libvirt]\n file_backed_memory\n\nan optional integer value that, when non-None, indicates the amount of memory available in the file-backed memory store.\n\nI don\u0027t see a need for multiple options.","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"33ca20c04d9cc8e47c5d62b78ff80d679b0cd7a5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_8ed814ef","line":49,"updated":"2018-05-15 12:33:55.000000000","message":"Please see note on prior revision. This is not possible due to the mess of how ram_allocation_ratio is set (or not set). See the discussion on this spec for more information:\n\nhttps://review.openstack.org/#/c/552105/\n\nLong story short, the best option I think is for you to just put a giant warning on the libvirt.file_backed_memory CONF option help text to ensure that ram_allocation_ratio is set to 1.0 when file_backed_memory is non-None.","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"173ba46b17551dd94dfcfdb71f2e6a6374078886","unresolved":false,"context_lines":[{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_e6944839","line":49,"in_reply_to":"5f7c97a3_603ca02e","updated":"2018-05-15 18:07:39.000000000","message":"sure that would work as well.","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b339bbc4d6e7223e267cf334087fa667ff2ae645","unresolved":false,"context_lines":[{"line_number":46,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":47,"context_line":"with mode ``shared``. As overcommit is not expected to work with file backed"},{"line_number":48,"context_line":"memory, this setting overrides the value of ``ram_allocation_ratio`` in"},{"line_number":49,"context_line":"``nova.conf``, using the value ``1.0``."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"``file_backed_memory_capacity`` will control what the libvirt driver reports"},{"line_number":52,"context_line":"for the total memory capacity of the compute node. As the memory capacity is"}],"source_content_type":"text/x-rst","patch_set":6,"id":"5f7c97a3_603ca02e","line":49,"in_reply_to":"5f7c97a3_8ed814ef","updated":"2018-05-15 16:40:52.000000000","message":"Or to do what sahid suggested and bail on startup if file_backed_memory is nonzero and allocation_ratio is not 1.0. I forgot about the planned change to how those are enforced, so fail on startup sounds better now.","commit_id":"eaf326e7cdb857145525dc777d61b1e8234b0444"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f75b61ac88386e3b0a1ce9a452460ceabd82025","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"``file_backed_memory`` will default to ``0``, indicating file backed memory is"},{"line_number":40,"context_line":"disabled. When set to non-zero, the libvirt driver will include elements"},{"line_number":41,"context_line":"to enable file backed memory within instances."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When ``file_backed_memory`` is set to non-zero, the libvirt driver will"},{"line_number":44,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_576b3ef0","line":41,"updated":"2018-05-17 14:42:26.000000000","message":"You don\u0027t say what this value with correspond to if _not_ set to 0. I\u0027m assuming GB?","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"07cd1d0af49817bc59c14a5809f1ff046af5e30f","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"``file_backed_memory`` will default to ``0``, indicating file backed memory is"},{"line_number":40,"context_line":"disabled. When set to non-zero, the libvirt driver will include elements"},{"line_number":41,"context_line":"to enable file backed memory within instances."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When ``file_backed_memory`` is set to non-zero, the libvirt driver will"},{"line_number":44,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_6b9df855","line":41,"in_reply_to":"5f7c97a3_576b3ef0","updated":"2018-05-21 17:38:24.000000000","message":"The value will correspond to MiB.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6cfefdb5a9f723c3e7d32e4e6cf59ae355016761","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"``file_backed_memory`` will default to ``0``, indicating file backed memory is"},{"line_number":40,"context_line":"disabled. When set to non-zero, the libvirt driver will include elements"},{"line_number":41,"context_line":"to enable file backed memory within instances."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When ``file_backed_memory`` is set to non-zero, the libvirt driver will"},{"line_number":44,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_eb334812","line":41,"in_reply_to":"5f7c97a3_6b9df855","updated":"2018-05-21 17:46:02.000000000","message":"Memory is in MB almost everywhere else (i.e. MEMORY_MB in placement parlance and in a flavor) so I had assumed it would be MB.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"390f59c5adae00d55da11082d3067c23bf72206d","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"``file_backed_memory`` will default to ``0``, indicating file backed memory is"},{"line_number":40,"context_line":"disabled. When set to non-zero, the libvirt driver will include elements"},{"line_number":41,"context_line":"to enable file backed memory within instances."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When ``file_backed_memory`` is set to non-zero, the libvirt driver will"},{"line_number":44,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_b3aeb82b","line":41,"in_reply_to":"5f7c97a3_eb334812","updated":"2018-05-30 15:06:25.000000000","message":"Units are inconsistently represented all over the place in Nova for memory (and disk), unfortunately :(\n\nIn the configuration options and user guide, we use \"MB\" (megabyte).\n\nIn most of libvirt virt driver, we use the units.Mi (mebibyte) unit when referring to guest memory...\n\nexcept... we use kibibytes when doing NUMA cell memory (go figure...):\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/config.py#L179-L180\n\nwe also use kibibytes when referring to memory backing *page* sizes:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/config.py#L2040\n\nI do believe, though, that explicit is better than implicit here.\n\nI think `file_backed_memory_bytes` would be best and store the actual number of bytes, making the confusion about MB vs MiB a non-factor.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2f75b61ac88386e3b0a1ce9a452460ceabd82025","unresolved":false,"context_lines":[{"line_number":41,"context_line":"to enable file backed memory within instances."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"When ``file_backed_memory`` is set to non-zero, the libvirt driver will"},{"line_number":44,"context_line":"include a ``MemoryBacking`` element for all instances on the compute node,"},{"line_number":45,"context_line":"with a ``source`` subelement with type ``file``, and an ``access`` subelement"},{"line_number":46,"context_line":"with mode ``shared``."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_579d7e08","line":44,"range":{"start_line":44,"start_character":10,"end_line":44,"end_character":27},"updated":"2018-05-17 14:42:26.000000000","message":"link? https://libvirt.org/formatdomain.html#elementsMemoryBacking","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"ebf90766f28bc4eca223cbc1aa95eb86f80ddf2d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_02bc8fb9","line":170,"updated":"2018-05-18 09:44:25.000000000","message":"Isn\u0027t there also another work item here, which is that Nova lso expose\nthe just-added libvirt tunable \u0027discard\u0027 for the \u0027MemoryBacking\u0027\nelement[1].\n\nTalking to the libvirt developer who implemented the \u0027discard\u0027 XML\nattribute, he said he has implemented it based on a requirement that\ncame in via OpenStack.\n\nAbout \u0027discard\u0027, from[1]:\n\n    \"When set and supported by hypervisor the memory content is discarded\n    just before guest shuts down (or when DIMM module is unplugged). \n    Please note that this is just an optimization and is not guaranteed\n    to work in all cases (e.g. when hypervisor crashes). Since 4.4.0\n    (QEMU/KVM only)\"\n\nIn QEMU parlance, libvirt has wired up the following part of the QEMMU\ncommand-line \"memory-backend-file.discard-data\u003dyes\":\n\n    \"The new option can be used to indicate that the file contents can\n    be destroyed and don\u0027t need to be flushed to disk when QEMU exits\n    or when the memory backend object is removed.\"\n\n[1] https://libvirt.org/formatdomain.html#elementsMemoryBacking\n[2] https://lists.gnu.org/archive/html/qemu-devel/2017-08/msg04899.html","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"07cd1d0af49817bc59c14a5809f1ff046af5e30f","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_0be484ab","line":170,"in_reply_to":"5f7c97a3_02bc8fb9","updated":"2018-05-21 17:38:24.000000000","message":"I agree this should be implemented, once it\u0027s widely available, as another spec or spec-less blueprint to add this libvirt feature.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"891a9981bb0dd1ee8c55887c0cab233529f61fac","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_4cecf6f2","line":170,"in_reply_to":"5f7c97a3_02bc8fb9","updated":"2018-05-18 14:55:58.000000000","message":"discard is introduced in 4.4.0, It would be better to have an other \"I guess\" spec-less blueprint to implement this feature. That looks out of the scope of that one.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":6962,"name":"Kashyap Chamarthy","email":"kchamart@redhat.com","username":"kashyapc"},"change_message_id":"fbcf50b646c2e0b18d127e5e21c4d01158513ca7","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_45d344d6","line":170,"in_reply_to":"5f7c97a3_0be484ab","updated":"2018-05-22 06:54:07.000000000","message":"Alright; it should be out in the next release.  For the rest, looks good to me, FWIW.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"86eb2318ced5a657e619ecfda2b0bd9e3384d668","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_b137cbfe","line":170,"in_reply_to":"5f7c97a3_45d344d6","updated":"2018-05-25 12:17:34.000000000","message":"I registered a blueprint\n\n  https://blueprints.launchpad.net/nova/+spec/memory-backend-file-discard","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f81f304331221f7574c7a1c702c08d1bb5e51696","unresolved":false,"context_lines":[{"line_number":167,"context_line":"Other contributors:"},{"line_number":168,"context_line":"  None"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"* Add new configuration options to nova.conf"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_8b273465","line":170,"in_reply_to":"5f7c97a3_4cecf6f2","updated":"2018-05-21 17:16:11.000000000","message":"Yeah I think that has to come afterwards, but should be straightforward once available.","commit_id":"be8fdbdf064c8621cfdd9b6842db9e178660a5ef"}]}
