OCaml.org 叢集環境影響的最新資訊

重點摘要:我們監控 OCaml.org 叢集中 19 台機器,每週產生的二氧化碳當量 (CO2e) 大約為 70 公斤。 此處為討論串

自 OCaml.org 重新設計以來,我們作為一個社群,承諾我們對環境的影響負責。第一步,我們的目標是透過計算我們使用的總能量來準確量化我們的影響。有必要建立目前活動的基準,以確定我們未來所做的任何變更是否能減少我們的 CO2e 排放量。

這不是一個容易識別的數字,因為有 大量的機器叢集日夜不停地運行,提供諸如 ocaml-ciopam-repo-cidocker 基礎映像檔以及像 ocaml.org 本身和 federated watch.ocaml.org 等服務。這些機器涵蓋多種架構、作業系統和類型 (例如,虛擬與裸機),因此很難建構可攜式工具來監控每台機器。

我們在過去幾個月裡建構了新工具並部署了監控裝置,以盡可能提供準確的數據。

使用支援 IPMI 的機器進行監控

收集電力使用數據的一種方法是使用智慧平台管理介面 (IPMI)。IPMI 是一組介面的規格,可讓您管理和監控電腦。IPMI 使用的控制器通常是基板管理控制器 (BMC)。監控伺服器的感測器 (包括功耗、溫度和風扇速度) 通常會向 BMC 回報。

Clarke 是我們建構的一個工具,為不同的監控和回報功耗的方法提供一個通用介面。它可以利用 ipmitool 收集功耗數據,並透過 Prometheus 回報。

我們已在多台支援 IPMI 的機器上安裝了 Clarke,並修改了 OCluster 以擷取每台機器的 Prometheus 輸出結果。

量化電力碳排放強度

許多需要電力運行的系統都由國家電網供電。電網的電力通常來自各種發電活動,不同活動的組合通常稱為 電網的能源結構

從這種結構中,可以計算出平均「碳排放強度」。碳排放強度是指為供應一度電所產生的二氧化碳當量 (CO2e) 排放量。單位為每度電的二氧化碳當量 (gCO2e/kWh)。為什麼是 CO2e?二氧化碳 (CO2) 並非唯一的溫室氣體 (例如,還有水蒸氣、甲烷等)。「二氧化碳當量」單位讓我們可以換算各種溫室氣體,以便公平地比較不同的排放活動。

幸運的是,我們可以使用 IMPI 監控的機器都位於劍橋。我們可以利用 carbon-intensity API 取得英國國家電網的即時數據。事實上,我們開發了一個同名工具 carbon-intensity,以抽象化各種 API,為擷取碳排放強度值提供一個單一的通用介面。

type t
(** A configuration parameter for the API *)

val get_intensity : t -> int option
(** [get_intensity t] returns the current gCO2/kWh if available. *)

總排放量的數值

有了叢集的總功耗和碳排放強度值,我們現在可以計算出能源使用造成的總排放量。以單一台機器為例,假設功耗讀數為 250W。我們也知道取樣功耗讀數的頻率,例如每 10 秒一次。我們可以使用這些值來計算 kWh 值。

(250 / 1000) * (10 / 3600) = 0.000694

如果電網目前的回報碳排放強度為 100gC02e/kWh,那麼此特定時間點的排放量為

0.000694 * 100 = 0.0694gCO2

為了方便理解,以一個人從 倫敦希斯洛機場到貝爾法斯特國際機場 (約 500 公里) 的單程旅程來說,二氧化碳當量約為 160 公斤。如果上述虛構的機器始終耗用 250W,而且電網始終具有相同的碳排放強度,則需要約 266 天才能達到相同的排放量。

我們可以對每台機器、每 10 秒執行一次此計算,並將它們加總,以得出這些機器在一段任意時間 (例如一週) 內的總排放量。

目前,我們監控的 19 台機器每週產生的二氧化碳當量大約為 70 公斤。這會隨著叢集上的目前負載和電網的碳排放強度而波動。在撰寫本文時,電網今天的碳排放強度最大值為 125gCO2e/kWh,最小值為 55gCO2e/kWh

後續步驟

公開提供的儀表板

目前無法公開取得排放量背後的數據。我們希望為感興趣的人提供一個簡單的儀表板,讓他們可以查看即時數據。

沒有 IPMI 的機器

並非所有機器都支援 IPMI。一種可能的解決方案是直接從硬體取得電源資訊。Variorum 是一個「與供應商無關的函式庫,用於公開電力和效能功能」。透過 Variorum,我們可以存取諸如 Intel 的 RAPL 介面等資訊。我們已開發 此函式庫的 OCaml 繫結,這些繫結已納入 Clarke。雖然 Variorum 回報的功耗值可能不是完美或全面的,但它們會是很好的替代數據,可讓監控更多類型的機器。

其他排放

隱含能源和碳排放量也佔我們對環境影響的很大一部分。隱含碳排放量反映了建立並最終處置運行我們軟體的機器所需的碳污染量。這些數字不一定很容易計算,但我們可以開始嘗試計算我們使用的硬體的隱含碳排放量,以及新硬體更換速度慢或損壞的硬體的速度 (以及舊硬體的處置方式)。

透過結合這些數據,我們可以更真實地了解我們的碳足跡,讓我們更有機會在長期內將我們的影響降到最低。

碳感知解決方案

現在我們已經對我們的環境影響有了一些概念,這是開始思考如何將其降到最低的好時機。例如

  • 針對低優先順序作業的碳感知排程。carbon-intensity API 支援對電網碳排放強度進行相當準確的預測,利用此預測,我們可以排程 Docker 基礎映像檔的建置,使其僅在碳排放強度較低時發生。
  • 透過更好的求解來減少建置次數。目前,許多套件會在建置期間一次安裝其相依性。這表示 求解器服務會找出所需的確切套件和相依性,並在單一建置步驟中安裝它們。這也表示,如果一個下游套件發生變更,則整個建置步驟會失效,導致完全重建。我們可以將安裝程序分成多個步驟來協助減輕這個問題,特別是對於像 dune 這樣的大型且更穩定的套件。

結論

OCaml.org 背後的社群一直努力履行我們對永續性的承諾。我們的第一個目標是建立一種方法,來測量 OCaml.org 叢集在特定時間內消耗多少二氧化碳當量。我們在過去幾個月裡開發了一種方法,可以很好地估計該數字。

為了獲得更準確的結果,還有許多工作要做,例如計算隱含的能源和碳排放量,以及能夠測量更多類型機器的能源消耗。我們的目標是建立碳感知解決方案,將 OCaml.org 叢集對環境的影響降到最低。