詳解Linux系統(tǒng)中的tempfs與/dev/shm
tmpfs 是 Linux/Unix 系統(tǒng)上的一種基于內(nèi)存的文件系統(tǒng),即 tmpfs 使用內(nèi)存或 swap 分區(qū)來(lái)存儲(chǔ)文件。
Linux 內(nèi)核中的 VM 子系統(tǒng)負(fù)責(zé)在后臺(tái)管理虛擬內(nèi)存資源 Virtual Memory,即 RAM 和 swap 資源,透明地將 RAM 頁(yè)移動(dòng)到交換分區(qū)或從交換分區(qū)到 RAM 頁(yè),tmpfs 文件系統(tǒng)需要 VM 子系統(tǒng)的頁(yè)面來(lái)存儲(chǔ)文件。tmpfs 自己并不知道這些頁(yè)面是在交換分區(qū)還是在 RAM 中;做這種決定是 VM 子系統(tǒng)的工作。tmpfs 文件系統(tǒng)所知道的就是它正在使用某種形式的虛擬內(nèi)存。
由于 tmpfs 是基于內(nèi)存的,因此速度是相當(dāng)快的。另外 tmpfs 使用的 VM 資源是動(dòng)態(tài)的,當(dāng)刪除 tmpfs 中文件,tmpfs 文件系統(tǒng)驅(qū)動(dòng)程序會(huì)動(dòng)態(tài)地減小文件系統(tǒng)并釋放 VM 資源,當(dāng)然在其中創(chuàng)建文件時(shí)也會(huì)動(dòng)態(tài)的分配VM資源。另外,tmpfs 不具備持久性,重啟后數(shù)據(jù)不保留。
/dev/shm 就是一個(gè)基于 tmpfs 的設(shè)備,在有些 Linux 發(fā)行版中 /dev/shm 是 /run/shm/ 目錄的一個(gè)軟鏈接。實(shí)際上在很多系統(tǒng)上的 /run 是被掛載為 tmpsf 的。用 df -T 可以查看系統(tǒng)中的磁盤(pán)掛載情況:
文件系統(tǒng) 1K-塊 已用 可用 已用% 掛載點(diǎn) 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
那么,我們就先來(lái)說(shuō)說(shuō) /run 目錄?,F(xiàn)在我們知道,該目錄是基于內(nèi)存的,實(shí)際上它的前身是 /var/run 目錄,后來(lái)被 /run 替換。這是因?yàn)?/var/run 文件系統(tǒng)并不是在系統(tǒng)一啟動(dòng)就是就緒的,而在此之前已經(jīng)啟動(dòng)的進(jìn)程就先將自己的運(yùn)行信息存放在 /dev 中,/dev 同樣是一種 tmpfs,而且是在系統(tǒng)一啟動(dòng)就可用的。但是 /dev 設(shè)計(jì)的本意是為了存放設(shè)備文件的,而不是為了保存進(jìn)程運(yùn)行時(shí)信息的,所以為了不引起混淆,/dev 中存放進(jìn)程信息的文件都以 "." 開(kāi)始命名,也就是都是隱藏文件夾。但是即便是這樣,隨著文件夾的數(shù)量越來(lái)越多,/dev 里面也就越來(lái)越混亂,于是就引入了替代方案,也就是 /run。實(shí)際上在很多系統(tǒng)上 /var/run 目錄仍然存在,但其是 /run 目錄的一個(gè)軟鏈接。
/var/run 目錄中主要存放的是自系統(tǒng)啟動(dòng)以來(lái)描述系統(tǒng)信息的文件。比較常見(jiàn)的用途是 daemon 進(jìn)程將自己的 pid 保存到這個(gè)目錄。
/dev/shm/ 是 Linux 下一個(gè)非常有用的目錄,它的意思是 Shared memory,也就是共享內(nèi)存。由于它在內(nèi)存上,所以所有系統(tǒng)進(jìn)程都能共享該目錄。默認(rèn)情況下它的大小是內(nèi)存的一半。如果希望改變它的大小,可以用 mount 來(lái)管理:
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 可以做很多事情,這里說(shuō)一個(gè) Python 的應(yīng)用。用 Python 做數(shù)據(jù)處理時(shí),可能會(huì)用到 numpy,通常做數(shù)據(jù)處理時(shí)的數(shù)據(jù)量都是很大的,如果有多個(gè)進(jìn)程都需要用到同樣的數(shù)據(jù),那么 /dev/shm 就派上了用場(chǎng),也就是用共享內(nèi)存技術(shù)。Python 有一個(gè)第三方庫(kù)可以用來(lái)在多個(gè)進(jìn)程間共享 numpy 數(shù)組,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 標(biāo)準(zhǔn),能夠兼容多個(gè)平臺(tái)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
詳解Linux 下開(kāi)發(fā)微信小程序安裝開(kāi)發(fā)工具
這篇文章主要介紹了詳解Linux 下開(kāi)發(fā)微信小程序安裝開(kāi)發(fā)工具的相關(guān)資料,需要的朋友可以參考下2017-06-06
Ubuntu 18.04上安裝 phpMyAdmin的詳細(xì)教程
這篇文章主要介紹了Ubuntu 18.04上安裝 phpMyAdmin的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Linux之如何設(shè)置CPU Performance模式
這篇文章主要介紹了Linux之如何設(shè)置CPU Performance模式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
詳解如何在Linux(CentOS)下重置MySQL根(Root)密碼
本篇文章主要介紹了詳解如何在Linux(CentOS)下重置MySQL根(Root)密碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
linux下/etc/passwd文件的選項(xiàng)說(shuō)明
/etc/passwd 文件是系統(tǒng)的主要文件之一。該文件中包含了所有用戶(hù)登錄名清單;為所有用戶(hù)指定了主目錄;在登錄時(shí)使用的 shell 程序名稱(chēng)等。該文件還保存了用戶(hù)口令;給每個(gè)用戶(hù)提供系統(tǒng)識(shí)別號(hào)。2008-06-06
Linux使用join -a1來(lái)合并兩個(gè)文件
今天小編就為大家分享一篇關(guān)于Linux使用join -a1來(lái)合并兩個(gè)文件,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
gdb調(diào)試中設(shè)置監(jiān)控點(diǎn)watch,rwatch,awatch的區(qū)別及說(shuō)明
這篇文章主要介紹了gdb調(diào)試中設(shè)置監(jiān)控點(diǎn)watch,rwatch,awatch的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

