關於namespace

zongzw發表於2024-06-11

namespace和cgroup被稱為當下輕量虛擬化技術的核心。

namespace實現資源隔離。
cgroup實現資源限制,主要是針對cpu和mem。

那linux系統下namespace是如何實現資源隔離的呢?
具體都隔離了哪些方面?

資源型別

提到資源隔離,所包含的資源型別包括:cpu 記憶體 網路 儲存空間 程序和上下文環境。
隔離其實就是隔離這些因素。

linux的namespace給我們提供了這些資源的隔離能力:

分別是:

  • system V IPC 訊號量、訊息佇列、共享記憶體
  • 網路棧、裝置、埠號
  • 檔案掛載點
  • 程序編號
  • 使用者和組
  • 主機名

檢視資源的namespace

透過 $ ll /proc/<程序PID>/ns 可以看到當前程序的namespace資訊。

root@ubuntu-server:~# ll /proc/2499/ns
total 0
dr-x--x--x 2 root root 0 Jun 11 06:02 ./
dr-xr-xr-x 9 root root 0 Jun 11 06:01 ../
lrwxrwxrwx 1 root root 0 Jun 11 06:02 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 uts -> 'uts:[4026531838]'

系統呼叫函式

  • unshare 實現在原程序上切換namespace。
  • clone 在建立程序的同時,建立namespace
  • setns 將當前程序加入到已有的namespace中。

這三個函式實現了在程序建立時、後實現對namespace的切換。

https://www.cnblogs.com/sparkdev/p/9365405.html

相關文章