常見問題
本頁面收集了 Gthulhu 和 SCX GoLand Core 使用過程中的常見問題與解答。
安裝相關問題
Q: 如何確認我的核心支援 sched_ext?
A: 您可以通過以下方式檢查:
# 方法 1: 檢查核心配置
grep -r "CONFIG_SCHED_CLASS_EXT" /boot/config-$(uname -r)
# 方法 2: 檢查 /proc/config.gz
zcat /proc/config.gz | grep "CONFIG_SCHED_CLASS_EXT"
# 方法 3: 檢查 sched_ext 目錄
ls /sys/kernel/sched_ext/ 2>/dev/null || echo "sched_ext 不支援"
如果輸出包含 CONFIG_SCHED_CLASS_EXT=y
,表示您的核心支援 sched_ext。
Q: 編譯時出現 "libbpf not found" 錯誤該怎麼辦?
A: 這通常是因為 libbpf 沒有正確安裝。請按照以下步驟解決:
# Ubuntu/Debian
sudo apt install libbpf-dev
# CentOS/RHEL/Fedora
sudo dnf install libbpf-devel
# 或者手動編譯 libbpf
git clone https://github.com/libbpf/libbpf.git
cd libbpf/src
make
sudo make install
Q: 為什麼需要 Clang 17+?
A: Clang 17+ 提供了更完整的 BPF 支援,包括:
- 更好的 BPF CO-RE (Compile Once, Run Everywhere) 支援
- 最新的 BPF 指令集支援
- 更穩定的 BPF 程式編譯
如果您的系統沒有 Clang 17+,可以這樣安裝:
執行相關問題
Q: 執行時提示 "Operation not permitted" 錯誤
A: 這是權限問題,BPF 程式載入需要 root 權限:
# 正確的執行方式
sudo ./main
# 或者使用 Docker
docker run --privileged=true --pid host --rm gthulhu:latest /gthulhu/main
Q: 調度器啟動後系統變慢了怎麼辦?
A: 這可能是由於以下原因:
-
調度參數不適合您的工作負載:
-
記憶體不足:
-
BPF 程式性能問題:
解決方案:
- 暫停調度器:sudo pkill -f "./main"
- 檢查系統日誌:dmesg | tail -50
- 調整調度參數或回報問題
Q: 如何停止調度器?
A: 您可以使用以下方式停止調度器:
# 方法 1: Ctrl+C (如果在前景執行)
^C
# 方法 2: 發送 SIGTERM 信號
sudo pkill -TERM -f "./main"
# 方法 3: 發送 SIGINT 信號
sudo pkill -INT -f "./main"
# 方法 4: 強制終止 (不推薦)
sudo pkill -KILL -f "./main"
性能相關問題
Q: 如何監控調度器性能?
A: 您可以使用多種工具監控調度器性能:
-
系統工具:
-
BPF 工具:
-
調度器內建監控:
Q: 調度器相比 CFS 有什麼優勢?
A: Gthulhu 調度器的主要優勢:
特性 | CFS | Gthulhu |
---|---|---|
延遲最佳化 | 基本 | 專業化 |
任務分類 | 統一處理 | 自動分類 |
CPU 拓撲感知 | 有限 | 完整支援 |
動態調整 | 靜態參數 | 即時調整 |
使用者空間擴展 | 不支援 | 完全支援 |
Q: 如何調整調度器參數?
A: 目前支援的調整方式:
-
環境變數:
-
編譯時參數 (修改
main.bpf.c
): -
執行時 API (計劃中):
除錯相關問題
Q: 如何開啟調試模式?
A: 您可以通過以下方式開啟調試:
-
環境變數:
-
BPF 追蹤:
-
系統日誌:
Q: 遇到 BPF 驗證器錯誤怎麼辦?
A: BPF 驗證器錯誤通常表示程式有問題:
-
檢查錯誤訊息:
-
常見問題:
- 無界迴圈:確保所有迴圈都有明確的退出條件
- 記憶體越界:檢查陣列存取是否在範圍內
-
指標使用:確保指標在使用前經過 NULL 檢查
-
驗證 BPF 程式:
Q: 如何回報問題?
A: 如果遇到問題,請按照以下步驟:
-
收集系統資訊:
-
收集錯誤日誌:
-
在 GitHub 提交 Issue:
- 前往 Gthulhu Issues
- 選擇適合的 Issue 模板
- 附上系統資訊和錯誤日誌
- 描述重現步驟
開發相關問題
Q: 如何參與開發?
A: 歡迎參與開發!請參考:
- 查看貢獻指南:contributing.md
-
了解程式碼結構:
-
設定開發環境:
Q: 如何新增自訂的調度策略?
A: 您可以通過以下方式客製化:
-
修改 BPF 程式 (
main.bpf.c
): -
修改 Go 程式 (
main.go
): -
使用 SCX GoLand Core API:
兼容性問題
Q: 支援哪些 Linux 發行版?
A: 理論上支援所有具備以下條件的發行版:
- 核心版本: 6.12+
- sched_ext 支援: 已啟用
- 架構: x86_64
已測試的發行版: - Ubuntu 24.04+ - Fedora 39+ - Arch Linux (最新)
計劃支援: - CentOS/RHEL 9+ - openSUSE Tumbleweed - Debian 13+
Q: 能在容器中執行嗎?
A: 可以,但需要特殊權限:
# Docker 執行
docker run --privileged=true --pid host --rm gthulhu:latest
# Podman 執行
podman run --privileged --pid host --rm gthulhu:latest
# Kubernetes 執行 (需要特殊配置)
# 請參考 examples/kubernetes/ 目錄
Q: 與其他調度器衝突嗎?
A: Gthulhu 會替換系統預設調度器,因此:
- 不能與其他 sched_ext 調度器同時執行
- 不會影響即時調度類別 (SCHED_FIFO, SCHED_RR)
- 會替換 CFS 調度器的功能