<div dir="ltr"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px;font-weight:bold;white-space:nowrap">Merlijn:</span><br class="gmail_msg"></div><div class="gmail_msg">I definitely agree that having the same term mean different things on different platforms is a really bad idea. I don't think we can change the concept of constraints as minimums at this point, but maybe a new concept of limits (to match lxd terminology) could be added. Limits really only make sense for containers, so we would either have to error out, or warn the user and ignore it if you specified a limit when deploying a base machine. </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><b class="gmail_msg">Mike:</b></div>The problem with trying to figure out how much "unused" RAM a host has is that it gets thrown out the window if you ever deploy any unit to the host machine, or if you deploy a unit in a container without a RAM constraint. Those units may then use as much RAM as they want.<div class="gmail_msg"><br class="gmail_msg"></div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Thu, Jan 12, 2017 at 3:22 PM Mike Pontillo <<a href="mailto:mike.pontillo@canonical.com" class="gmail_msg" target="_blank">mike.pontillo@canonical.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg">On Thu, Jan 12, 2017 at 11:20 AM, Nate Finch <span dir="ltr" class="gmail_msg"><<a href="mailto:nate.finch@canonical.com" class="gmail_msg" target="_blank">nate.finch@canonical.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="gmail_msg">I'm implementing constraints for lxd containers and provider... and stumbled on an impedance mismatch that I don't know how to handle.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">It seems as though lxd limits (what in juju we would call constraints) are implemented as maximums, not minimums. For containers sharing a host, this makes sense. If you say "don't use more than 2 gigs of ram" then you know the max that container will use, and thus how much leftover you can expect the host to have for other containers. </div><div class="gmail_msg"><br class="gmail_msg"></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">Is the second part (how much leftover you can expect the host to have for other containers) captured somewhere? Because it seems to me that the important question Juju needs to be asking is, "how over-provisioned is the host I'm about to deploy on?", so that containers can be intelligently load-balanced across the infrastructure.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Assuming Juju has full control over the hosts it is deploying containers onto[2], I think one thing to do might be to allow the admin to specify ratios (maybe separate for each of CPU, RAM, disk) to indicate how over-provisioned to allow hosts and containers to be to be.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Let's take as an example a host with 16 GB of RAM, where you want to deploy 16 containers with a constraint of "at least 1G of RAM". There could be two relevant over-provisioning ratios: one to specify how over-provisioned a container hypervisor can be, and the other to specify how much more RAM than the constraint specifies the container can be allowed to use. This idea is perhaps a little naive; I'm not sure where one would specify these values.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">If that sounds confusing, maybe it's easier to look at an example[1]:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><table cellspacing="0" cellpadding="0" dir="ltr" border="1" style="table-layout:fixed;font-size:13px;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid rgb(204,204,204)" class="gmail_msg"><colgroup class="gmail_msg"><col width="65" class="gmail_msg"><col width="98" class="gmail_msg"><col width="158" class="gmail_msg"><col width="197" class="gmail_msg"><col width="126" class="gmail_msg"><col width="100" class="gmail_msg"></colgroup><tbody class="gmail_msg"><tr style="height:43px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">Host RAM (GB)</td><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">Minimum RAM Constraint (GB)</td><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">Host Over-provisioning Ratio</td><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">Container Over-provisioning Ratio</td><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">Allowed number of containers for host</td><td style="padding:2px 3px;vertical-align:bottom;font-weight:bold;word-wrap:break-word" class="gmail_msg">RAM Limit per Container (GB)</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">8</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">32</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">32</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">2.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">4.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">32</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">4</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">4.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">256</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">4</td></tr><tr style="height:21px" class="gmail_msg"><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">16.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1.00</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">256</td><td style="padding:2px 3px;vertical-align:bottom;text-align:right" class="gmail_msg">1</td></tr></tbody></table></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Regards,<br class="gmail_msg"></div><div class="gmail_msg">Mike</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">[1]: <a href="https://docs.google.com/spreadsheets/d/1j6-98nB5AA_viHK9nF42MPpbZf35wv2N2gDi8DrhepU/view" class="gmail_msg" target="_blank">https://docs.google.com/spreadsheets/d/1j6-98nB5AA_viHK9nF42MPpbZf35wv2N2gDi8DrhepU/view</a> </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">[2]: (so that the numbers aren't thrown off by other juju deployments, or non-juju deployments to the same hypervisor)</div></div></div></div>
</blockquote></div></div>