前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志V853芯片swap功能简介与tina上swap分区使用方法

全志V853芯片swap功能简介与tina上swap分区使用方法

作者头像
阿志小管家
发布2024-02-02 16:31:23
970
发布2024-02-02 16:31:23
举报
swap功能简介

1、概念介绍

swap:系统内存紧张时进行的内存回收操作。

swap分区:在swap内存回收操作中,被回收的匿名页会回写到swap分区。

系统没有swap分区的时候,依旧会进行swap操作,swap操作不一定会操作到swap分区。

2、swap分区介绍

linux系统支持各种块设备、文件作为swap分区,且容量可以叠加。比如同时使用spinor上的swap裸分区和TF卡上的文件叠加作为swap分区。申请成功的swap容量可以通过free命令查看.

代码语言:javascript
复制
​             total       used       free     shared    buffers     cached
Mem:        511776     506952       4824          0        512        836
-/+ buffers/cache:     505604       6172
Swap:         1020         44        976
各存储基于TINA SDK使用swap的方法

1、swap分区使用方法

swap分区的使能依赖mkswap命令和swapon命令。对于TINA SDK大部分存储来说。只需要make menuconfig选中mkswap、swapon命令,且在sys_partition(_nor).fex分区表中分配一个作为swap分区的裸分区即可。

代码语言:javascript
复制
root@(none):/# free
             total       used       free     shared    buffers     cached
Mem:        511776      16820     494956          0       1260       2068
-/+ buffers/cache:      13492     498284
Swap:            0          0          0

root@(none):/# mkswap /dev/by-name/swap
Setting up swapspace version 1, size = 1020 KiB
no label, UUID=c714a274-5c8b-44e9-87f0-e6ce39226621

root@(none):/# swapon /dev/by-name/swap
[  223.756712] Adding 1020k swap on /dev/by-name/swap.  Priority:-1 extents:1 across:1020k SS
root@(none):/# free
             total       used       free     shared    buffers     cached
Mem:        511776      16820     494956          0       1356       2128
-/+ buffers/cache:      13336     498440
Swap:         1020          0       1020

2、存储使用差异

大部分存储都可以使用上文介绍的方式来使能swap分区,mkswap的前提是你可以获得一个可读可写的块设备/文件,比如mtdblockn、mmcblk0pn、nandn。

对于ubi nand来说,tina系统默认使用squashfs+ubifs来获得一个可读写的overlay,其中squashfs就依赖于块设备,但对于ubi nand来说,提供给squashfs的ubiblock必须是只读的,只读的ubiblock+只读文件系统squashfs的搭配。所以尽管在用户态可以创建出ubiblock,创建出来的ubiblock也是只读的,不满足mkswap的需求。此时尝试基于可读写的overlay创建文件,利用ubifs上的文件来作为swap,测试发现mkswap可以成功,但是并不能swapon。

基于以上,提出了两种方法:

(1)直接不使用ubi nand的逻辑分区,即不使用mtdblock上的ubiblock,直接使用mtdblock,操作底层的物理块设备,pstore/blk在ubi nand上也是此种做法,但是这种做法的风险点在于,mtdblock并没有磨损平衡,只有坏块处理。所以对应的swap分区寿命不长。

(2)不使用tina squashfs+overlay的做法,直接使用mkfs.ubifs制作一个可读可写的rootfs,内核关闭readonly-ubi块的配置,让系统可以顺利创建出可读可写的ubiblock。但是需要牺牲根文件系统只读的功能,在掉电等存储不稳定的场景下,根文件系统有可能被损坏。在保证存储稳定性的情况下,这种方法应该是优选。

小知识

1、swap分区没有被用完,为什么依旧会oom

内核触发kswapd进行内存回收时,会对匿名页和文件页进行回收(有更多仲裁方法,不展开叙述),其中文件页的回收方法是清除缓存的文件内容,并不需要回写flash,因为文件页的实际文件一直保存在flash中,下一次读文件时,需要重新从flash中读回文件,无法直接从缓存中获取文件内容;匿名页的回收方法是写到swap分区(当存在swap分区的时候)。所以当你内存临界,且在系统仲裁下已经没有可以回收的匿名页时,尽管swap分区没有用完,依旧会触发oom。

2、CPU占用率和内存的取舍

/proc/sys/vm/swappiness节点描述系统对swap分区的使用原则,0表示最大限度使用物理内存,100表示最大限度使用swap分区。在内存紧张的情况下,可以使用swap分区,但是频繁使用swap分区必然导致CPU占用率的升高,此时可以通过调节swappiness节点来对CPU占用率和内存进行平衡。

原贴链接:https://bbs.aw-ol.com/topic/1626/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • swap功能简介
  • 各存储基于TINA SDK使用swap的方法
  • 小知识
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档