2015-04-16 24 views
1

我想在一臺機器上運行一堆應用程序或容器。我想隔離以下資源的使用:容器的性能隔離(在Linux上)?

  1. CPU
  2. 存儲器
  3. I/O(網絡,磁盤等)

理想情況下,我想實現比例使用所有資源,所以如果一些容器閒置,其他人可以利用它們。靜態預訂(例如,每10個應用10%)並不理想。

我知道我們可以做到這一點的CPU,但我不知道,如果這一概括到一切。將不勝感激詳細的答案(不只是使用「tp/qdisc」/「iptables」的網絡)。

+1

>所有資源的比例使用< >性能隔離<這很難混合在一起。您要麼限制容器資源(限制可以重疊),要麼提供對所有資源的訪問權限,並希望Linux內部的調度程序足夠公平(CFS,CFQ等) – myaut

+0

足夠公平。也許我應該澄清。我的意思是,如果某個容器想要使用4個內核,2 Gb RAM,10Mb/s磁盤和20Mb/s網絡,則應該保證這麼多,但是如果機器上沒有其他東西在運行,我們也應該擴大規模。 – sydraz

回答

5

與對照組(cgroups)可以實現資源隔離:

  • CPU
  • 內存
  • 網絡
  • 磁盤

當兩個或多個進程可能會使用太多很多資源可能會讓其他人得不到公平的機會,你可以使用cgroups來告訴他們:如果你打架對於相同的資源,你們中的一個不能超過60%,另一個不超過30%等等。如果沒有相同資源的競賽,我們只有一個請求者。他可以使用多少他想要的,直到另一個進程將嘗試使用它。

Examples of I/O Throttling

Introduction to Linux Control Groups

關於擴大當機器處於閒置狀態:如果你使用完全公平調度器(CFS),cgroup中能得到更多的分配CPU份額,如果有足夠的空閒CPU週期在系統中可用。

Redhat resource management guide

當一個cgroup中的任務是空閒的,並且不使用任何CPU時間,這 左隨着時間的推移被收集在未使用的CPU週期的全局池。 其他的cgroup被允許從該池

cpusets.txt documentation

而且如果CPU超出其運行隊列的任務時,CPU嘗試從其他繁忙的CPU拉 額外的任務,借用CPU週期幫助他們在空閒之前將會是 。

當然,查找可移動任務和/或空閒CPU需要一定的搜索成本,調度程序可能不會搜索域中每個 時間的所有CPU。事實上,在某些體系結構中,事件 上的搜索範圍僅限於CPU所在的同一個套接字或節點,而 tick上的負載平衡搜索全部。

例如,假設CPU Z選自CPU X.相對較遠,即使CPUŽ 空閒而CPU X和兄弟姐妹都忙,調度器不能遷移從X到Z 喚醒任務B,因爲它是出其搜索範圍。由於 結果,CPU X上的任務B需要等待任務A或在下一個打勾處等待負載平衡 。對於某些特殊情況下的應用,等待 1滴答可能會過長。

很少有其他的方法來實現資源隔離:nice(用於方便的調整),cpulimit - 靜態資源分配,當其他CPU空閒,股票沒有借用到其他進程。

+0

使用閒置資源是否也適用於IO或內存? – sydraz