詳解Linux系統(tǒng)中的tempfs與/dev/shm
tmpfs 是 Linux/Unix 系統(tǒng)上的一種基于內(nèi)存的文件系統(tǒng),即 tmpfs 使用內(nèi)存或 swap 分區(qū)來存儲文件。
Linux 內(nèi)核中的 VM 子系統(tǒng)負責在后臺管理虛擬內(nèi)存資源 Virtual Memory,即 RAM 和 swap 資源,透明地將 RAM 頁移動到交換分區(qū)或從交換分區(qū)到 RAM 頁,tmpfs 文件系統(tǒng)需要 VM 子系統(tǒng)的頁面來存儲文件。tmpfs 自己并不知道這些頁面是在交換分區(qū)還是在 RAM 中;做這種決定是 VM 子系統(tǒng)的工作。tmpfs 文件系統(tǒng)所知道的就是它正在使用某種形式的虛擬內(nèi)存。
由于 tmpfs 是基于內(nèi)存的,因此速度是相當快的。另外 tmpfs 使用的 VM 資源是動態(tài)的,當刪除 tmpfs 中文件,tmpfs 文件系統(tǒng)驅(qū)動程序會動態(tài)地減小文件系統(tǒng)并釋放 VM 資源,當然在其中創(chuàng)建文件時也會動態(tài)的分配VM資源。另外,tmpfs 不具備持久性,重啟后數(shù)據(jù)不保留。
/dev/shm 就是一個基于 tmpfs 的設(shè)備,在有些 Linux 發(fā)行版中 /dev/shm 是 /run/shm/ 目錄的一個軟鏈接。實際上在很多系統(tǒng)上的 /run 是被掛載為 tmpsf 的。用 df -T 可以查看系統(tǒng)中的磁盤掛載情況:
文件系統(tǒng) 1K-塊 已用 可用 已用% 掛載點 udev 1859684 4 1859680 1% /dev tmpfs 374096 1524 372572 1% /run /dev/sda8 76561456 36029540 36619724 50% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 1870460 27688 1842772 2% /run/shm none 102400 56 102344 1% /run/user
那么,我們就先來說說 /run 目錄?,F(xiàn)在我們知道,該目錄是基于內(nèi)存的,實際上它的前身是 /var/run 目錄,后來被 /run 替換。這是因為 /var/run 文件系統(tǒng)并不是在系統(tǒng)一啟動就是就緒的,而在此之前已經(jīng)啟動的進程就先將自己的運行信息存放在 /dev 中,/dev 同樣是一種 tmpfs,而且是在系統(tǒng)一啟動就可用的。但是 /dev 設(shè)計的本意是為了存放設(shè)備文件的,而不是為了保存進程運行時信息的,所以為了不引起混淆,/dev 中存放進程信息的文件都以 "." 開始命名,也就是都是隱藏文件夾。但是即便是這樣,隨著文件夾的數(shù)量越來越多,/dev 里面也就越來越混亂,于是就引入了替代方案,也就是 /run。實際上在很多系統(tǒng)上 /var/run 目錄仍然存在,但其是 /run 目錄的一個軟鏈接。
/var/run 目錄中主要存放的是自系統(tǒng)啟動以來描述系統(tǒng)信息的文件。比較常見的用途是 daemon 進程將自己的 pid 保存到這個目錄。
/dev/shm/ 是 Linux 下一個非常有用的目錄,它的意思是 Shared memory,也就是共享內(nèi)存。由于它在內(nèi)存上,所以所有系統(tǒng)進程都能共享該目錄。默認情況下它的大小是內(nèi)存的一半。如果希望改變它的大小,可以用 mount 來管理:
mount -o size=4000M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
如果希望永久生效,可以修改 /etc/fstab 文件:
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
利用 /dev/shm 可以做很多事情,這里說一個 Python 的應(yīng)用。用 Python 做數(shù)據(jù)處理時,可能會用到 numpy,通常做數(shù)據(jù)處理時的數(shù)據(jù)量都是很大的,如果有多個進程都需要用到同樣的數(shù)據(jù),那么 /dev/shm 就派上了用場,也就是用共享內(nèi)存技術(shù)。Python 有一個第三方庫可以用來在多個進程間共享 numpy 數(shù)組,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 標準,能夠兼容多個平臺。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解Linux 下開發(fā)微信小程序安裝開發(fā)工具
這篇文章主要介紹了詳解Linux 下開發(fā)微信小程序安裝開發(fā)工具的相關(guān)資料,需要的朋友可以參考下2017-06-06
Ubuntu 18.04上安裝 phpMyAdmin的詳細教程
這篇文章主要介紹了Ubuntu 18.04上安裝 phpMyAdmin的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
Linux之如何設(shè)置CPU Performance模式
這篇文章主要介紹了Linux之如何設(shè)置CPU Performance模式問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
詳解如何在Linux(CentOS)下重置MySQL根(Root)密碼
本篇文章主要介紹了詳解如何在Linux(CentOS)下重置MySQL根(Root)密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
gdb調(diào)試中設(shè)置監(jiān)控點watch,rwatch,awatch的區(qū)別及說明
這篇文章主要介紹了gdb調(diào)試中設(shè)置監(jiān)控點watch,rwatch,awatch的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09

