- 論壇徽章:
- 0
|
Linux kernel 2.6.20 new feature: net namespace
在Linux協(xié)議棧中引入網(wǎng)絡(luò)命名空間, 是為了支持網(wǎng)絡(luò)協(xié)議棧的多個(gè)實(shí)例, 而這些協(xié)議棧的隔離就是由命名空間來實(shí)現(xiàn)的(有點(diǎn)像進(jìn)程的線性地址空間, 協(xié)議棧不能訪問其他協(xié)議棧的私有數(shù)據(jù)).
需要納入命名空間的元素包括進(jìn)程, 套接字, 網(wǎng)絡(luò)設(shè)備. 進(jìn)程創(chuàng)建的套接字必須屬于某個(gè)命名空間, 套接字的操作也必須在命名空間內(nèi)進(jìn)行, 網(wǎng)絡(luò)設(shè)備也必須屬于某個(gè)命名空間, 但可能會(huì)改變, 因?yàn)榫W(wǎng)絡(luò)設(shè)備屬于公共資源.
為了實(shí)現(xiàn)網(wǎng)絡(luò)命名空間, 整個(gè)協(xié)議棧的代碼都需要更新, 工作量非常大.
試想有兩個(gè)并行的協(xié)議棧, 那么所有協(xié)議棧相關(guān)的全局變量都必須修改為協(xié)議棧私有. 最好的辦法就是讓這些全局變量成為一個(gè)per net namespace變量的成員, 然后為協(xié)議棧的函數(shù)調(diào)用都加入一個(gè)namespace參數(shù).
但是內(nèi)核開發(fā)者面臨幾個(gè)問題:
1. 最好讓現(xiàn)有的內(nèi)核代碼隱式的使用命名空間內(nèi)的變量, 而不要更新所有的內(nèi)核代碼, 否則工作量太大;
2. 性能損耗應(yīng)該非常小, 使得使用命名空間與否對(duì)用戶沒有影響;
Ref:
[1] http://lwn.net/Articles/219597/
[2] http://lwn.net/Articles/218595/ |
|