一種基於記憶體的檔案系統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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記憶體檔案系統的再學習記憶體
- 作業系統-記憶體、檔案管理作業系統記憶體
- 聊聊記憶體那些事(基於微控制器系統)記憶體
- Java中讀取檔案6種記憶體安全方式Java記憶體
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- 記一次Golang記憶體分析——基於gopprofGolang記憶體
- win10系統檔案有多大 win10映象檔案佔用多大記憶體Win10記憶體
- linux檔案存在記憶體裡Linux記憶體
- 虛擬記憶體系統——瞭解記憶體的工作原理記憶體
- 基於RT1052 Aworks 記憶體擴容記錄(一)記憶體
- Linux系統檔案系統及檔案基礎篇Linux
- 這一次,終於系統的學習了 JVM 記憶體結構JVM記憶體
- Ubuntu 新增虛擬記憶體檔案Ubuntu記憶體
- 使用記憶體對映檔案(mmap)記憶體
- dump檔案解析之探索.Net的記憶體記憶體
- Python mmap的使用-檔案記憶體對映Python記憶體
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- 檔案系統基礎
- Win10系統下複製檔案時提示記憶體不足如何解決Win10記憶體
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- Sieve—Android 記憶體分析系統Android記憶體
- 作業系統-記憶體管理作業系統記憶體
- 作業系統——記憶體管理作業系統記憶體
- SpringBoot SpringSecurity 介紹(基於記憶體的驗證)Spring BootGse記憶體
- 一個Java基於阻塞的定時消費記憶體佇列Java記憶體佇列
- 5種快速查詢容器檔案系統中檔案的方法
- EXT4檔案系統學習(11)VFS之記憶體結構sb和inode記憶體
- Hadoop基礎(一):分散式檔案系統HDFSHadoop分散式
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- [譯] Dweb: 基於 IPFS 的去中心化 Web 檔案系統 (中英)Web中心化
- LVM中對基於xfs的檔案系統進行擴容LVM
- 基於php的醫療檔案之電子病歷系統PHP
- juicefs:一個基於Redis和雲物件儲存的分散式POSIX檔案系統UIRedis物件分散式
- 基於javaEE的土地檔案管理系統的設計及開發Java
- 計算機作業系統——虛擬記憶體與實體記憶體計算機作業系統記憶體
- 檔案系統(十):一文看懂 UBI 檔案系統
- 【Redis】 redis解析rdb檔案,記憶體排序等Redis記憶體排序
- 二進位制檔案記憶體對映記憶體