一種基於記憶體的檔案系統tmpfs
若你經常使用 ,你會發現 df -Th 後,一定會有 tmpfs 型別的檔案系統掛載在 /dev/shm 下面,雖然你大機率不會關注到它。
$ df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 910M 0 910M 0% /dev tmpfs tmpfs 919M 0 919M 0% /dev/shm tmpfs tmpfs 919M 896K 918M 1% /run tmpfs tmpfs 919M 0 919M 0% /sys/fs/cgroup /dev/vda1 ext4 40G 11G 27G 28% / tmpfs tmpfs 184M 0 184M 0% /run/user/0
而這個 tmpfs 就是明哥今天要介紹的主角。
tmpfs,顧名思義,是臨時檔案系統,是一種基於記憶體的檔案系統。
它和虛擬磁碟 ramdisk比較類似像,但不完全相同,和ramdisk一樣,tmpfs可以使用RAM,但它也可以使用swap分割槽來儲存,而且傳統的ramdisk是個塊裝置,要用mkfs來格式化它,才能真正地使用它;而tmpfs是一個檔案系統,並不是塊裝置,只是安裝它,就可以使用了。tmpfs是最好的基於RAM的檔案系統。
這意味著,你往掛載了 tmpfs 的目錄下寫入的檔案,都會直接寫入記憶體中。
假如你想佔用機器 10G 的記憶體,那我只要先建立一個臨時目錄 /tmp/memory ,並指定 tmpfs 的檔案系統型別及大小 10240M 掛載到該目錄下。
$ mount -t tmpfs -o size=10240M tmpfs /tmp/memory
接著我們使用 dd ,往該目錄下寫入多少內容,就會佔用多少記憶體,由於我們的目的是佔用記憶體,因此 if 直接使用 /dev/zero
$ dd if=/dev/zero of=/tmp/memory/block
當 dd 寫入完成後,你再使用 free 去檢視可用記憶體,會發現剩餘的記憶體可分配的記憶體少了 10G。
如果你想用完機器的所有記憶體,完全可以在 mount 的時候,指定 size 為機器的記憶體大小,但你要清楚你在做什麼,否則執行完 dd ,你的機器可能就掛了。
利用上面這個方法,其實還可以做更多的事情,比如你在機器你有兩個 NUMA Node ,但你只想佔用 NUMA Node 0 的記憶體,那就可以指定 NUMA Node 0 的記憶體,怎麼辦呢?
首先利用 lscpu 找到 NUMA Node 0 上的所有 cpu 核
$ node0_cpus=$(lscpu | grep "NUMA node0" | awk '{print $NF}')
然後使用 taskset 工具加 -c 引數來指定對應的 cpu 核來執行建立 tmpfs 目錄和 dd 的過程
$ cat > /root/mem_alloc.sh <<EOF #!/bin/bash tmpdir=`mktemp` mount -t tmpfs -o size=1024M tmpfs ${tmpdir} dd if=/dev/zero of=${tmpdir}/block EOF $ taskset -c "${node0_cpus}" sh /root/mem_alloc.sh
執行完成後,如果你所佔用的記憶體,沒有超過 NUMA Node 0 的本地記憶體,那麼你使用 numactl 就會發現上面命令都只佔用了 NUMA Node0 的記憶體。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2848871/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 虛擬記憶體檔案系統TMPFS記憶體
- 淺析 Linux 的共享記憶體與 tmpfs 檔案系統Linux記憶體
- tmpfs檔案系統
- Linux AS 使用記憶體檔案系統Linux記憶體
- linux /dev/shm與tmpfs檔案系統Linuxdev
- [CareerCup] 8.9 An In-memory File System 記憶體檔案系統記憶體
- 聊聊記憶體那些事(基於微控制器系統)記憶體
- 記一次Golang記憶體分析——基於gopprofGolang記憶體
- Java中讀取檔案6種記憶體安全方式Java記憶體
- 基於檔案的學生資訊管理系統
- win10系統檔案有多大 win10映象檔案佔用多大記憶體Win10記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- eclipse 增加記憶體的方法、修改配置檔案 記憶體優化Eclipse記憶體優化
- 一種避免 iOS 記憶體碎片的方法iOS記憶體
- 這一次,終於系統的學習了 JVM 記憶體結構JVM記憶體
- 記憶體對映檔案詳解-----C++實現(即一塊記憶體和一個檔案相對映對應)記憶體C++
- 基於AWS的檔案同步服務系統架構架構
- 基於RT1052 Aworks 記憶體擴容記錄(一)記憶體
- TimesTen-建立例項時提示記憶體、檔案系統無法分配記憶體
- linux檔案存在記憶體裡Linux記憶體
- dump檔案解析之探索.Net的記憶體記憶體
- Win10系統怎麼刪除並禁止生成“系統錯誤記憶體轉儲檔案”Win10記憶體
- Linux系統檔案系統及檔案基礎篇Linux
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- 作業系統的虛擬記憶體作業系統記憶體
- Win10系統下複製檔案時提示記憶體不足如何解決Win10記憶體
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- 虛擬記憶體,實體記憶體,頁面檔案,還有工作管理員記憶體
- 基於sys檔案系統的LED驅動的移植【原創】
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- Linux基礎:如何找出你的系統所支援的最大記憶體Linux記憶體
- Centos 7 建立一個swap檔案增加虛擬記憶體CentOS記憶體
- 一個記憶體檔案對映使用者類 (轉)記憶體
- Python mmap的使用-檔案記憶體對映Python記憶體
- RxJava記憶體洩漏的一種解決方案RxJava記憶體