)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"5f900d3a49813f161b632e654f3212c58dcfff38","unresolved":false,"context_lines":[{"line_number":10,"context_line":"introduced in recent libvirt/qemu releases."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8ae0b5af77aa7c6eccd42d67dc703d4ac9d2b07b"},{"line_number":13,"context_line":"Implements: blueprint libvirt-iothreads"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1af94dfe_b5b2264a","line":13,"updated":"2016-03-18 16:07:31.000000000","message":"I\u0027ll add Alex here a author in the next ps and when other feedback is coming.","commit_id":"cfbcbc58b401dd435693e071e95ed0b7f7d46534"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"fe9936362293e35cdb971d850b1227d204f6a03c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0b16a57f_f789d7d0","updated":"2026-01-25 12:15:08.000000000","message":"Why this was closed?","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"}],"specs/mitaka/approved/libvirt-exploit-new-io-features.rst":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2b71ea42ede193335252e1e1463c94e1d8e33888","unresolved":false,"context_lines":[{"line_number":71,"context_line":"created when the instance is spawned. When cinder volumes are attched"},{"line_number":72,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":73,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":74,"context_line":"virDomainDelIOThread)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"2) Guest IO model"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_76a05091","line":74,"updated":"2015-10-05 14:09:37.000000000","message":"I think we need to consider the use of I/O threads in far more depth than this. There are a variety of different usage patterns for a start, eg one thread per device, one thread per vCPU, one thread per NUMA node, and so one. I\u0027m not at all convinced one per device is the right option. Indeed that presentation you link to from Stefan says one-per-device is only suitable if the number of devices is less than the number of vCPUs.\n\nWe also need to consider how we handle I/O thread placement when we have guest NUMA pinning, and also strict CPU pinning in effect. This in turn may also require us to consider association between guest devices and guest NUMA nodes.\n\nIOW, there\u0027s alot more to this feature than just allocating I/O threads per device.","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"fc68b24b5d40812aa8fce3e012e4ec4167430c24","unresolved":false,"context_lines":[{"line_number":71,"context_line":"created when the instance is spawned. When cinder volumes are attched"},{"line_number":72,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":73,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":74,"context_line":"virDomainDelIOThread)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"2) Guest IO model"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_1ddb1b7e","line":74,"in_reply_to":"7a2fa921_76a05091","updated":"2015-10-06 07:29:02.000000000","message":"Thanks for your input! I\u0027ll try to dig deeper and add more details regarding the different algorithms and also consider the NUMA aspects.","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2b71ea42ede193335252e1e1463c94e1d8e33888","unresolved":false,"context_lines":[{"line_number":80,"context_line":"that are attached via iSCSI or fibre channel. "},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Open question: which other disk types (ceph etc) should use native IO mode"},{"line_number":83,"context_line":"by default?"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_361df8bd","line":83,"updated":"2015-10-05 14:09:37.000000000","message":"The docs you mention in the references section don\u0027t provide any clear performance numbers comparing the aio\u003dthreads vs aio\u003dnative settings - unless I missed it, there\u0027s just an assertion that aio\u003dthreads is mostly better. I want to see some clear benchmark numbers to backup any performance claims before we change stuff, particularly if we\u0027re going down the route of using different settings based on type of storage.\n\nI\u0027m trying to get the Red Hat performance team to publish what data they have on this subject, so we have something to refer to","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"fc68b24b5d40812aa8fce3e012e4ec4167430c24","unresolved":false,"context_lines":[{"line_number":80,"context_line":"that are attached via iSCSI or fibre channel. "},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Open question: which other disk types (ceph etc) should use native IO mode"},{"line_number":83,"context_line":"by default?"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_ddbb630d","line":83,"in_reply_to":"7a2fa921_361df8bd","updated":"2015-10-06 07:29:02.000000000","message":"It would be great to get more performance measurements on this topic. I\u0027ll also try to get more results. Do you have a specific tool in mind that would be adequate as a benchmark?","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2b71ea42ede193335252e1e1463c94e1d8e33888","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Open question: which other disk types (ceph etc) should use native IO mode"},{"line_number":83,"context_line":"by default?"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_960e4ce4","line":84,"updated":"2015-10-05 14:09:37.000000000","message":"These two new features you describe are pretty much independent of each other in term of design \u0026 implementation, so I think it would be preferable to have a separate spec covering each. I can see the discussion around each of these items potentially getting quite involved, and it would  be undesirable to hold up one feature while the other is debated, \u0026 vica-verca","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"fc68b24b5d40812aa8fce3e012e4ec4167430c24","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Open question: which other disk types (ceph etc) should use native IO mode"},{"line_number":83,"context_line":"by default?"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_1d49db31","line":84,"in_reply_to":"7a2fa921_960e4ce4","updated":"2015-10-06 07:29:02.000000000","message":"I agree, I\u0027ll use this blueprint/spec for the iothread stuff and rename it accordingly, and also add a second one for guest IO mode.","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2b71ea42ede193335252e1e1463c94e1d8e33888","unresolved":false,"context_lines":[{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"None"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"Data model impact"},{"line_number":91,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a2fa921_56dbd4ed","line":88,"updated":"2015-10-05 14:09:37.000000000","message":"You suggested a particular allocation model for i/o threads of one per device. There are alternative allocation strategies I mention, which should be listed here at least with reasons why you\u0027re proposal is better than the alternatives.","commit_id":"f14ef29e00ad3efc8bdbbc237e7b0be4710b03e1"}],"specs/mitaka/approved/libvirt-iothreads.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-iothreads"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Iothreads were introduced in recent libvirt and qemu releases for"},{"line_number":14,"context_line":"improving disk IO performance and scalability."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature enhances the nova libvirt driver to exploit iothreads when"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_5656c55c","line":13,"updated":"2015-10-08 18:57:19.000000000","message":"Which specific releases?  That\u0027s important to know for deployers, CI testing, and conditional restrictions in the driver for whether or not it can perform the capability.\n\nAlso, which architectures/platforms are supported? x, p and z?","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-iothreads"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Iothreads were introduced in recent libvirt and qemu releases for"},{"line_number":14,"context_line":"improving disk IO performance and scalability."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature enhances the nova libvirt driver to exploit iothreads when"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_118110fb","line":13,"in_reply_to":"7a2fa921_5656c55c","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":40,"context_line":"This feature should be very helpful for end users that run workloads where"},{"line_number":41,"context_line":"disk IO performance is critical."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Project Priority"},{"line_number":44,"context_line":"-----------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_d6ef3585","line":43,"updated":"2015-10-08 18:57:19.000000000","message":"Remove the priority section since it was recently dropped from the template.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"This feature should be very helpful for end users that run workloads where"},{"line_number":41,"context_line":"disk IO performance is critical."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Project Priority"},{"line_number":44,"context_line":"-----------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"None"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_11983069","line":43,"in_reply_to":"7a2fa921_d6ef3585","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"For each disk device that is used by an instance, a dedicated IO thread"},{"line_number":64,"context_line":"will be created. IO threads for the initial disks of an instance are"},{"line_number":65,"context_line":"created when the instance is spawned. When cinder volumes are attched"},{"line_number":66,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":67,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":68,"context_line":"virDomainDelIOThread)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_b6a15948","line":65,"updated":"2015-10-08 18:57:19.000000000","message":"s/attched/attached/","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"For each disk device that is used by an instance, a dedicated IO thread"},{"line_number":64,"context_line":"will be created. IO threads for the initial disks of an instance are"},{"line_number":65,"context_line":"created when the instance is spawned. When cinder volumes are attched"},{"line_number":66,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":67,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":68,"context_line":"virDomainDelIOThread)."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_319bec67","line":65,"in_reply_to":"7a2fa921_b6a15948","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"534b3feebcaa1800f3b5d99fc9d312d6ab9def3b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":67,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":68,"context_line":"virDomainDelIOThread)."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TODO: think about how IO thread placement would be handled when guest NUMA"},{"line_number":71,"context_line":"pinning or strict CPU pinning are used"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_4958f1fa","line":69,"updated":"2015-10-06 09:15:59.000000000","message":"Also note that in the future I/O threads will be usable from other types of device NICs, PCI devices, etc","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"3f98d7c8829953f53bfcc1c6fa19a84cbe681030","unresolved":false,"context_lines":[{"line_number":66,"context_line":"or detached from an instance during runtime, IO threads are added or"},{"line_number":67,"context_line":"deleted via the available libvirt APIs (virDomainAddIOThread,"},{"line_number":68,"context_line":"virDomainDelIOThread)."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TODO: think about how IO thread placement would be handled when guest NUMA"},{"line_number":71,"context_line":"pinning or strict CPU pinning are used"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_57b647dd","line":69,"in_reply_to":"7a2fa921_4958f1fa","updated":"2015-10-06 11:17:32.000000000","message":"I\u0027ll keep that in mind, but right now would like to limit my work to disk devices, unless you see a problem with that.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"564504af07b407999d22b2b3a6465258c44150e3","unresolved":false,"context_lines":[{"line_number":68,"context_line":"virDomainDelIOThread)."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TODO: think about how IO thread placement would be handled when guest NUMA"},{"line_number":71,"context_line":"pinning or strict CPU pinning are used"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"TODO: think about association between guest devices and guest NUMA nodes"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_ee87755f","line":71,"updated":"2015-10-06 14:02:49.000000000","message":"This placement should also be considered when you will dynamically attach new volumes to guest.\n\nCan we want I/O threads to bin pinned on cpu_system ?\nhttps://review.openstack.org/#/c/225893/3/specs/mitaka/approved/libvirt-emulator-threads-policy.rst,cm","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6dbc3734d56f99941a3f4547b0698114ad8d89a7","unresolved":false,"context_lines":[{"line_number":68,"context_line":"virDomainDelIOThread)."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TODO: think about how IO thread placement would be handled when guest NUMA"},{"line_number":71,"context_line":"pinning or strict CPU pinning are used"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"TODO: think about association between guest devices and guest NUMA nodes"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_58688487","line":71,"in_reply_to":"7a2fa921_5d4ab6ad","updated":"2015-10-07 11:20:59.000000000","message":"Yes I also think you will need a mechanism like hw_cpu_io to reserve host CPUs dedicated for union of iothreads. At least in a first time then we probably want to tune this to dedicate host CPU to a specific iothreads.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"7881618849b4ffba5a96a96b3b4d26bfbb4baad0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"virDomainDelIOThread)."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"TODO: think about how IO thread placement would be handled when guest NUMA"},{"line_number":71,"context_line":"pinning or strict CPU pinning are used"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"TODO: think about association between guest devices and guest NUMA nodes"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_5d4ab6ad","line":71,"in_reply_to":"7a2fa921_ee87755f","updated":"2015-10-07 11:03:39.000000000","message":"Interesting to read the emulator-threads-policy blueprint! I wonder if a similar mechanism (\"hw_cpu_io\u003d2\") could be used to enable iothreads via the flavor. Originally I thought that it would be a good idea to enable iothreads transparently, but it seems difficult to find a \"one size fits all\" approach with regards to the number of iothreads.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":83,"context_line":"* one iothread per device while the number of devices is lower than the"},{"line_number":84,"context_line":"  number of vCPUs, then distribute additional devices across the iothreads"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"TODO: evaluate which algorithm makes most sense"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Data model impact"},{"line_number":89,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_56600501","line":86,"updated":"2015-10-08 18:57:19.000000000","message":"Given there are several TODOs in here, is this a work in progress?  If so, you should mark it as such.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"* one iothread per device while the number of devices is lower than the"},{"line_number":84,"context_line":"  number of vCPUs, then distribute additional devices across the iothreads"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"TODO: evaluate which algorithm makes most sense"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Data model impact"},{"line_number":89,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_f1a1f494","line":86,"in_reply_to":"7a2fa921_56600501","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Data model impact"},{"line_number":89,"context_line":"-----------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The data model within nova should not be affected by this feature. Changes"},{"line_number":92,"context_line":"are limited to the libvirt driver and guest XML definitions."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_765d0146","line":91,"updated":"2015-10-08 18:57:19.000000000","message":"Just put None in this section.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Data model impact"},{"line_number":89,"context_line":"-----------------"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"The data model within nova should not be affected by this feature. Changes"},{"line_number":92,"context_line":"are limited to the libvirt driver and guest XML definitions."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_51b9c8ca","line":91,"in_reply_to":"7a2fa921_765d0146","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Performance Impact"},{"line_number":116,"context_line":"------------------"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The performance of nova services should not be affected by this change."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Other deployer impact"},{"line_number":121,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_f637d1fc","line":118,"updated":"2015-10-08 18:57:19.000000000","message":"Well, I guess the point is to increase performance...","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"Performance Impact"},{"line_number":116,"context_line":"------------------"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"The performance of nova services should not be affected by this change."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Other deployer impact"},{"line_number":121,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_71bc04bb","line":118,"in_reply_to":"7a2fa921_f637d1fc","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Other deployer impact"},{"line_number":121,"context_line":"---------------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Iothreads will only be effective when the libvirt and qemu versions are"},{"line_number":124,"context_line":"recent enough to support these features."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_162dada7","line":123,"updated":"2015-10-08 18:57:19.000000000","message":"Again, need to be clear about what those minimum versions are and on which platforms.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Other deployer impact"},{"line_number":121,"context_line":"---------------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"Iothreads will only be effective when the libvirt and qemu versions are"},{"line_number":124,"context_line":"recent enough to support these features."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_11afd07d","line":123,"in_reply_to":"7a2fa921_162dada7","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":142,"context_line":"----------"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"* Create iothreads for disks during instance spawn"},{"line_number":145,"context_line":"* Create and remove iothreads for cinder volumes that are attched/detached"},{"line_number":146,"context_line":"* Handle iothreads during live migration"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_f61ef16e","line":145,"updated":"2015-10-08 18:57:19.000000000","message":"s/attched/attached/","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"50e7d824e6d0f5c727a4f50927f38a16ac8565d1","unresolved":false,"context_lines":[{"line_number":142,"context_line":"----------"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"* Create iothreads for disks during instance spawn"},{"line_number":145,"context_line":"* Create and remove iothreads for cinder volumes that are attched/detached"},{"line_number":146,"context_line":"* Handle iothreads during live migration"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_f1c81457","line":145,"in_reply_to":"7a2fa921_f61ef16e","updated":"2015-10-09 13:48:38.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Live migration, where iothreads need to be"},{"line_number":163,"context_line":"enabled/disabled based on the capabilities of the target"},{"line_number":164,"context_line":"hypervisor, also need to be tested via unit tests."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"For tempest, the new code should be tested already in existing tests."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_185abb2a","line":164,"updated":"2015-10-08 18:57:19.000000000","message":"Honestly I don\u0027t think unit tests will be sufficient here, but we also have pretty much no way of having a new enough libvirt/qemu with an existing multi-node job in the community CI system today to test this.  You should probably go into more details about impacts to live migration with this change above.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"0387f817f1707a23891272775bdf09d05eef46db","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Live migration, where iothreads need to be"},{"line_number":163,"context_line":"enabled/disabled based on the capabilities of the target"},{"line_number":164,"context_line":"hypervisor, also need to be tested via unit tests."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"For tempest, the new code should be tested already in existing tests."},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa80f949_ac6d1fce","line":164,"in_reply_to":"7a2fa921_185abb2a","updated":"2015-11-03 12:22:05.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":163,"context_line":"enabled/disabled based on the capabilities of the target"},{"line_number":164,"context_line":"hypervisor, also need to be tested via unit tests."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"For tempest, the new code should be tested already in existing tests."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_387697a4","line":166,"updated":"2015-10-08 18:57:19.000000000","message":"There are no API changes so yeah, nothing related for Tempest.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"0387f817f1707a23891272775bdf09d05eef46db","unresolved":false,"context_lines":[{"line_number":163,"context_line":"enabled/disabled based on the capabilities of the target"},{"line_number":164,"context_line":"hypervisor, also need to be tested via unit tests."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"For tempest, the new code should be tested already in existing tests."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa80f949_8c65bbe2","line":166,"in_reply_to":"7a2fa921_387697a4","updated":"2015-11-03 12:22:05.000000000","message":"Done","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":169,"context_line":"Documentation Impact"},{"line_number":170,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Wiki pages that cover IO configuration with libvirt/qemu as a hypervsior"},{"line_number":173,"context_line":"should be updated."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_18715ba8","line":172,"updated":"2015-10-08 18:57:19.000000000","message":"Do any exist?  If so, link them here.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a547074e5d6a79c796dbd4b430e18eb524a50250","unresolved":false,"context_lines":[{"line_number":187,"context_line":"History"},{"line_number":188,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"None"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7a2fa921_985d6b17","line":190,"updated":"2015-10-08 18:57:19.000000000","message":"There is a table in the template for this where the first entry is basically initial revision.","commit_id":"a533224fc0235d24cc79f744cb49bff272fa17a6"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"256bb267f87bfee924e2602214eaabfaa3bb9833","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"When migrating instances from an old (e.g. Liberty) to a new (Mitaka)"},{"line_number":131,"context_line":"compute node, iothreads are not enabled automatically as the migration"},{"line_number":132,"context_line":"is performed by libvirt and disks cannot be reconfigured danymically to"},{"line_number":133,"context_line":"use iothreads."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba8a016a_b3e937b9","line":132,"updated":"2015-11-19 14:13:46.000000000","message":"nit: dynamically","commit_id":"520e7021fd5c803213a1060c482ac611f489433b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"238f0d2b023446ab688427d8cd4173d191328ee8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"When migrating instances from an old (e.g. Liberty) to a new (Mitaka)"},{"line_number":131,"context_line":"compute node, iothreads are not enabled automatically as the migration"},{"line_number":132,"context_line":"is performed by libvirt and disks cannot be reconfigured danymically to"},{"line_number":133,"context_line":"use iothreads."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1af94dfe_1b622e0a","line":132,"in_reply_to":"ba8a016a_b3e937b9","updated":"2016-03-18 15:37:59.000000000","message":"Done","commit_id":"520e7021fd5c803213a1060c482ac611f489433b"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"256bb267f87bfee924e2602214eaabfaa3bb9833","unresolved":false,"context_lines":[{"line_number":130,"context_line":"When migrating instances from an old (e.g. Liberty) to a new (Mitaka)"},{"line_number":131,"context_line":"compute node, iothreads are not enabled automatically as the migration"},{"line_number":132,"context_line":"is performed by libvirt and disks cannot be reconfigured danymically to"},{"line_number":133,"context_line":"use iothreads."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"},{"line_number":136,"context_line":"versions need to be checked on the destination host to make sure"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba8a016a_d3cabb1a","line":133,"updated":"2015-11-19 14:13:46.000000000","message":"so migration succeeds, but libvirt will ignore the iothreads?","commit_id":"520e7021fd5c803213a1060c482ac611f489433b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"238f0d2b023446ab688427d8cd4173d191328ee8","unresolved":false,"context_lines":[{"line_number":130,"context_line":"When migrating instances from an old (e.g. Liberty) to a new (Mitaka)"},{"line_number":131,"context_line":"compute node, iothreads are not enabled automatically as the migration"},{"line_number":132,"context_line":"is performed by libvirt and disks cannot be reconfigured danymically to"},{"line_number":133,"context_line":"use iothreads."},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"},{"line_number":136,"context_line":"versions need to be checked on the destination host to make sure"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1af94dfe_3618e174","line":133,"in_reply_to":"ba8a016a_d3cabb1a","updated":"2016-03-18 15:37:59.000000000","message":"Yes. The instance\u0027s disks won\u0027t use iothreads although it would be possible on that host as it provides the necessary Nova code and libvirt/qemu version.\n\nA cold migration however (which is a rebuild on another host) will result in an instances which uses iothreads.","commit_id":"520e7021fd5c803213a1060c482ac611f489433b"}],"specs/newton/approved/libvirt-iothreads.rst":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bbbc99f0a98e85185a3a7df73c67db77ca298b3","unresolved":false,"context_lines":[{"line_number":112,"context_line":"the number of iothreads reaches the number of vCPUs. When the number"},{"line_number":113,"context_line":"of disks exceeds the number of vCPUs, the additional disks will be"},{"line_number":114,"context_line":"assigned to the existing iothreads in a round robin manner."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Implications for NUMA node placement"},{"line_number":118,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa0719c6_c4605438","line":115,"updated":"2016-03-22 12:36:29.000000000","message":"I\u0027dont think it\u0027s how we should to move with that feature. We should to partition vcpus used for guest and host cpus used for iothreads. and that should be introduced by a new unit which will reserve on host some cpus. like cpu_system then a new property to do the correlation between devices, iothreads and cpu_system. Also it\u0027s important to have possibility to handle NUMA topology.\n\nThat say I think this spec is dependent of [1] and should to reflect that new property \u0027cpu_system\u0027 to provide new options related. This spec can\u0027t be implemented before.\n\n[1] https://review.openstack.org/#/c/284094/1/specs/newton/approved/libvirt-emulator-threads-policy.rst","commit_id":"cfbcbc58b401dd435693e071e95ed0b7f7d46534"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bbbc99f0a98e85185a3a7df73c67db77ca298b3","unresolved":false,"context_lines":[{"line_number":175,"context_line":"Data model impact"},{"line_number":176,"context_line":"-----------------"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"None"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"REST API impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa0719c6_24d790c0","line":178,"updated":"2016-03-22 12:36:29.000000000","message":"You will probably have to introduce update on InstanceNUMATopology etc...","commit_id":"cfbcbc58b401dd435693e071e95ed0b7f7d46534"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bbbc99f0a98e85185a3a7df73c67db77ca298b3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"Other end user impact"},{"line_number":197,"context_line":"---------------------"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"None"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"Performance Impact"},{"line_number":202,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa0719c6_c4ee948a","line":199,"updated":"2016-03-22 12:36:29.000000000","message":"New flavor and image roperties will be introduced","commit_id":"cfbcbc58b401dd435693e071e95ed0b7f7d46534"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bbbc99f0a98e85185a3a7df73c67db77ca298b3","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"Primary assignee:"},{"line_number":234,"context_line":"  mzoeller"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Work Items"},{"line_number":237,"context_line":"----------"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"fa0719c6_24fe7038","line":235,"updated":"2016-03-22 12:36:29.000000000","message":"You should to refer the initial author of that spec.","commit_id":"cfbcbc58b401dd435693e071e95ed0b7f7d46534"}],"specs/ocata/approved/libvirt-iothreads.rst":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"26d8044234cd019695ef9fd6e676615559c25677","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Libvirt: iothreads for disk devices"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_ca418f3b","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":42},"updated":"2016-10-11 13:29:46.000000000","message":"@myself: fix the rst format issues.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5fa54d7b1e94290b8b54ab987c83ea53208b803a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"For exploiting iothreads, qemu 2.1 should be the minimum requirement. For"},{"line_number":85,"context_line":"libvirt, the actual version minimum depends on implementation details"},{"line_number":86,"context_line":"(for example, will it be required to add/remove iothreads during the"},{"line_number":87,"context_line":"runtime of an instance). Version 1.2.8 is the absolute minimum."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Details on the proposed solution"},{"line_number":90,"context_line":"--------------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_9720b0f9","line":87,"updated":"2016-10-11 08:44:12.000000000","message":"dataplane refers to the experimental interface to configuring threaded i/o for the block driver, which was never supported by libvirt.\n\nThe final supported interfaces is called i/o threads and is the only one supported with libvirt. \n\nThe description here mixes the terminology making it confusing, hence could you rewrite this entire section to remove all mention of dataplane and qemu \u003c 2.1\n\nWe definitely need hotplug support as Nova does disk hotplug. It makes no sense to allow iothreads at startup if we can\u0027t do the same at hotplug.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"26d8044234cd019695ef9fd6e676615559c25677","unresolved":false,"context_lines":[{"line_number":84,"context_line":"For exploiting iothreads, qemu 2.1 should be the minimum requirement. For"},{"line_number":85,"context_line":"libvirt, the actual version minimum depends on implementation details"},{"line_number":86,"context_line":"(for example, will it be required to add/remove iothreads during the"},{"line_number":87,"context_line":"runtime of an instance). Version 1.2.8 is the absolute minimum."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Details on the proposed solution"},{"line_number":90,"context_line":"--------------------------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_1904cb15","line":87,"in_reply_to":"fa6399be_9720b0f9","updated":"2016-10-11 13:29:46.000000000","message":"@danpb: I agree, it doesn\u0027t make sense without the disk hotplug support. I\u0027ll rewrite this section for ps11.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5fa54d7b1e94290b8b54ab987c83ea53208b803a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"operations are executed on the same pCPUs as the guest, iothreads"},{"line_number":123,"context_line":"will be pinned to the same set of pCPUs. This approach is identical"},{"line_number":124,"context_line":"to the current approach of pinning emulator threads to the set of"},{"line_number":125,"context_line":"pCPUs of the guest."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Implications for guest migration"},{"line_number":128,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_226ec0c9","line":125,"updated":"2016-10-11 08:44:12.000000000","message":"Pinning to the union of the pCPUs used by the guest vCPUs is reasonable as a first approximation. If the guest has multiple virtual NUMA nodes though, it will span multiple host NUMA nodes. In that scenario it feels like it might make sense to pin the i/o threads to a single host NUMA node. Doing this though, would also require that we configure custom PCI topology in the guest, so that we can associate the block device with a specific guest NUMA node.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"26d8044234cd019695ef9fd6e676615559c25677","unresolved":false,"context_lines":[{"line_number":122,"context_line":"operations are executed on the same pCPUs as the guest, iothreads"},{"line_number":123,"context_line":"will be pinned to the same set of pCPUs. This approach is identical"},{"line_number":124,"context_line":"to the current approach of pinning emulator threads to the set of"},{"line_number":125,"context_line":"pCPUs of the guest."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"Implications for guest migration"},{"line_number":128,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_bcce6d81","line":125,"in_reply_to":"fa6399be_226ec0c9","updated":"2016-10-11 13:29:46.000000000","message":"@danpb: Frankly, I still don\u0027t fully understand NUMA and its implications. :-/  I\u0027m working on a change series in Nova (starting with https://review.openstack.org/#/c/384871/) which should also help me to understand this area, as I learn best when actually coding a thing. I\u0027m grateful for pointers to reading material though.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"26d8044234cd019695ef9fd6e676615559c25677","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"},{"line_number":141,"context_line":"versions need to be checked on the destination host to make sure"},{"line_number":142,"context_line":"they are recent enough to support iothreads. If the versions are"},{"line_number":143,"context_line":"too old, an exception will be raised."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_5c7e31e5","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":51},"updated":"2016-10-11 13:29:46.000000000","message":"@myself: I don\u0027t see any hypervisor version check on the target host for any of the other features. That seems odd to me, as there are other version dependent features too (e.g. MIN_LIBVIRT_REALTIME_VERSION, ...)","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"8004250b7e06805266218b58fa4076cd5ee99678","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"When migrating an instance that uses iothreads, the libvirt/qemu"},{"line_number":141,"context_line":"versions need to be checked on the destination host to make sure"},{"line_number":142,"context_line":"they are recent enough to support iothreads. If the versions are"},{"line_number":143,"context_line":"too old, an exception will be raised."},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_e0558fc6","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":51},"in_reply_to":"fa6399be_5c7e31e5","updated":"2016-10-11 14:51:55.000000000","message":"The hypervisor version check is done in conductor:\n\nhttps://github.com/openstack/nova/blob/c824982e6a3d6660697e503f7236377cc8202d41/nova/conductor/tasks/live_migrate.py#L140\n\nThis means there won\u0027t be the case where a live-migration  to an older hypervisor is done. I\u0027ll remove that paragraph.","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"26d8044234cd019695ef9fd6e676615559c25677","unresolved":false,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"   * - Release Name"},{"line_number":312,"context_line":"     - Description"},{"line_number":313,"context_line":"   * - Newton"},{"line_number":314,"context_line":"     - Introduced"}],"source_content_type":"text/x-rst","patch_set":10,"id":"fa6399be_5c8d5130","line":313,"range":{"start_line":313,"start_character":7,"end_line":313,"end_character":13},"updated":"2016-10-11 13:29:46.000000000","message":"@myself: That needs to be Ocata","commit_id":"81f8d8057de4727a8c24fcfe7cad0a4c06faca2b"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"2d837ab7b5f8a0f599781b8cad4d110187196f8f","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-iothreads"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Iothreads were introduced in recent libvirt and qemu releases for"},{"line_number":14,"context_line":"improving disk IO performance and scalability."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature enhances the Nova libvirt driver to exploit iothreads when"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_3a40bf56","line":13,"range":{"start_line":13,"start_character":29,"end_line":13,"end_character":61},"updated":"2017-02-19 13:28:16.000000000","message":"+1 , I\u0027d also drop the use of recent here","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/libvirt-iothreads"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Iothreads were introduced in recent libvirt and qemu releases for"},{"line_number":14,"context_line":"improving disk IO performance and scalability."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature enhances the Nova libvirt driver to exploit iothreads when"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_16a62310","line":13,"range":{"start_line":13,"start_character":29,"end_line":13,"end_character":61},"updated":"2016-11-16 11:33:47.000000000","message":"a reference would be helpful here","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"2d837ab7b5f8a0f599781b8cad4d110187196f8f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"improving disk IO performance and scalability."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature enhances the Nova libvirt driver to exploit iothreads when"},{"line_number":17,"context_line":"they are available in the underlying libvirt/qemu release. To make"},{"line_number":18,"context_line":"life easier for operators and users, iothreads will be enabled"},{"line_number":19,"context_line":"transparently without adding new configuration parameters."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_9a81ab92","line":17,"range":{"start_line":17,"start_character":45,"end_line":17,"end_character":49},"updated":"2017-02-19 13:28:16.000000000","message":"nit - s/qemu/QEMU/g","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":30,"context_line":"outside of the qemu context. Iothreads must be allocated and assigned"},{"line_number":31,"context_line":"to disk devices via libvirt APIs and the guest XML definition."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Iothreads also allow to control which pCPUs are used to execute IO"},{"line_number":34,"context_line":"operations. Without iothreads, qemu processes IO operations on a"},{"line_number":35,"context_line":"random pCPU in the system. The placement of the guest with regards"},{"line_number":36,"context_line":"to NUMA characteristics of the host or a strict CPU pinning of the"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_40402257","line":33,"range":{"start_line":33,"start_character":21,"end_line":33,"end_character":31},"updated":"2017-02-19 19:11:00.000000000","message":"\"us to control\" or \"nova to control\" or \"control over\"","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":35,"context_line":"random pCPU in the system. The placement of the guest with regards"},{"line_number":36,"context_line":"to NUMA characteristics of the host or a strict CPU pinning of the"},{"line_number":37,"context_line":"guest is ignored. In contrast, the CPU affinity of iothreads is"},{"line_number":38,"context_line":"configurable, which allows to allign the processing of IO with the"},{"line_number":39,"context_line":"guest CPU workload."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Currently Nova does not enable iothreads. By sticking with the default"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_602526c1","line":38,"range":{"start_line":38,"start_character":20,"end_line":38,"end_character":36},"updated":"2017-02-19 19:11:00.000000000","message":"\"align\" is misspelled. Also again \"allows us\" or \"allows nova\"","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":60,"context_line":"processing in parallel. IO threads can be allocated dynamically and disk"},{"line_number":61,"context_line":"devices need to be assigned to a specific IO thread."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"For more background on iothreads, see the `References`_."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Required libvirt/qemu versions"},{"line_number":66,"context_line":"------------------------------"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_80221ab8","line":63,"updated":"2017-02-19 19:11:00.000000000","message":"I think this whole section is already covered above and can be removed.","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":94,"context_line":"implementation will allocate one iothread per disk of a guest until"},{"line_number":95,"context_line":"the number of iothreads reaches the number of vCPUs. When the number"},{"line_number":96,"context_line":"of disks exceeds the number of vCPUs, the additional disks will be"},{"line_number":97,"context_line":"assigned to the existing iothreads in a round robin manner."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Implications for NUMA node placement"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_cbfef304","line":97,"updated":"2017-02-19 19:11:00.000000000","message":"This seems reasonable to me. Just to be clear, if my instance does not have explicit pCPU pinning of its vCPUs, will creating a new thread per disk (up to the number of vCPUs) then allow me to effectively chew up double the number of my vCPUs? Meaning, I can burn N vCPUs of CPU time like normal, plus generate N CPUs worth of IO traffic that would get serviced by other pCPUs on the system I wouldn\u0027t normally be able to consume?","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":113,"context_line":"When migrating instances from an old (e.g. Mitaka) to a new (Newton)"},{"line_number":114,"context_line":"compute node, iothreads are not enabled automatically as the migration"},{"line_number":115,"context_line":"is performed by libvirt and disks cannot be reconfigured dynamically to"},{"line_number":116,"context_line":"use iothreads. The migration will suceed bug the instance\u0027s disks won\u0027t"},{"line_number":117,"context_line":"use iothreads although it would be possible on that host."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"A cold migration however (which is a rebuild on another host) will"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_96e87312","line":116,"range":{"start_line":116,"start_character":34,"end_line":116,"end_character":44},"updated":"2016-11-16 11:33:47.000000000","message":"*succeed, but","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":116,"context_line":"use iothreads. The migration will suceed bug the instance\u0027s disks won\u0027t"},{"line_number":117,"context_line":"use iothreads although it would be possible on that host."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"A cold migration however (which is a rebuild on another host) will"},{"line_number":120,"context_line":"result in an instances which uses iothreads."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_a02f1ea0","line":119,"range":{"start_line":119,"start_character":37,"end_line":119,"end_character":44},"updated":"2017-02-19 19:11:00.000000000","message":"rebuild means something different for nova, so it\u0027s probably a good idea to avoid using this to describe cold migration. I think most people reading this will understand why cold migration is different so I think you can remove the parenthetical here.","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":136,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Cloud application developers usually do not like tweaking a large"},{"line_number":139,"context_line":"amount of configuration settings for their instances. Instead,"},{"line_number":140,"context_line":"the default setup should work for most workloads, which is what"},{"line_number":141,"context_line":"this spec tries to provide."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Make the Nova scheduler aware of iothreads"},{"line_number":144,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_a0063e1e","line":141,"range":{"start_line":139,"start_character":54,"end_line":141,"end_character":27},"updated":"2017-02-19 19:11:00.000000000","message":"Thank you for that :)","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"The IO throughput seen by user instances will be improved by this change,"},{"line_number":183,"context_line":"especially when multiple disks are used in parallel by the guest. See"},{"line_number":184,"context_line":"`[1]`_ for a performance comparison between traditional qemu IO and"},{"line_number":185,"context_line":"iothreads."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"The performance of Nova services like compute and scheduler should not be"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_1642a310","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":6},"updated":"2016-11-16 11:33:47.000000000","message":"you don\u0027t need these backticks","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":193,"context_line":"Iothreads will only be effective when the libvirt and qemu versions are"},{"line_number":194,"context_line":"recent enough to support these features."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"See the secion \"Proposed change\" for a discussion on required libvirt/qemu"},{"line_number":197,"context_line":"versions."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_365cffec","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":14},"updated":"2016-11-16 11:33:47.000000000","message":"section","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"2d837ab7b5f8a0f599781b8cad4d110187196f8f","unresolved":false,"context_lines":[{"line_number":215,"context_line":"----------"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"* Create iothreads for disks during instance spawn"},{"line_number":218,"context_line":"* Create and remove iothreads for cinder volumes that are attached/detached"},{"line_number":219,"context_line":"* Handle iothreads during live migration"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_3d5c3925","line":218,"range":{"start_line":218,"start_character":0,"end_line":218,"end_character":75},"updated":"2017-02-19 13:28:16.000000000","message":"This needs to be documented in more detail under the proposed solution section. Are we sure that can we increase the total number of iothreads and any associated pinning of a running domain?","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5918105a59334abfdd6c43a1df57ebbbe2b4df18","unresolved":false,"context_lines":[{"line_number":234,"context_line":"via unit tests."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"Live migration, where iothreads need to be enabled/disabled based on the"},{"line_number":237,"context_line":"capabilities of the target hypervisor, also need to be tested via unit tests."},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"For tempest, the new code should be tested already in existing tests"},{"line_number":240,"context_line":"and there are no API changes introduced for this spec."}],"source_content_type":"text/x-rst","patch_set":11,"id":"da36d5c6_40174251","line":237,"updated":"2017-02-19 19:11:00.000000000","message":"Above you said that not much can be done during a live migration, but also excluded the case where a new host migrates an instance to an older one. Will this be possible or will libvirt refuse to migrate an instance with io threads to a host that cannot honor them?","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":250,"context_line":"References"},{"line_number":251,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"* _`[1]` Exploiting The Latest KVM Features For Optimized Virtualized"},{"line_number":254,"context_line":"  Enterprise Storage Performance (2013):"},{"line_number":255,"context_line":"  http://events.linuxfoundation.org/sites/events/files/slides/CloudOpen2013_Khoa_Huynh_v3.pdf"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_9604f3c0","line":253,"range":{"start_line":253,"start_character":0,"end_line":253,"end_character":69},"updated":"2016-11-16 11:33:47.000000000","message":"Format this as a reference:\n\n  .. _[1] Exploiting The Latest KVM Features For Optimized Virtualized","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5540efa255fe86197556160396ecb5fb46073779","unresolved":false,"context_lines":[{"line_number":278,"context_line":"History"},{"line_number":279,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"Optional section for Newton intended to be used each time the spec"},{"line_number":282,"context_line":"is updated to describe new design, API or any database schema"},{"line_number":283,"context_line":"updated. Useful to let reader understand what\u0027s happened along the"},{"line_number":284,"context_line":"time."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":".. list-table:: Revisions"},{"line_number":287,"context_line":"   :header-rows: 1"}],"source_content_type":"text/x-rst","patch_set":11,"id":"7a77a97e_362a3f2d","line":284,"range":{"start_line":281,"start_character":0,"end_line":284,"end_character":4},"updated":"2016-11-16 11:33:47.000000000","message":"You can drop this","commit_id":"9866bf3ded6bc1efb4375f2d1d0df369bc7b0cd8"}]}
