不懂就问,为啥要关掉交换内存

2021-12-20 11:20:03 +08:00
 phub2020

难道交换内存机制不是好东西嘛?为啥有老哥想要关掉,觉得交换内存不好。我不太能理解,如果本身内存买的不高,交换内存机制不更可以突破使用上限嘛?

8063 次点击
所在节点    Apple
46 条回复
ShadowPower
2021-12-20 14:04:16 +08:00
现在内存已经足够便宜,已经用不上磁盘来做交换了。
64GB 物理内存开了 64GB 的 ZRAM ,许多内存数据都是程序、文本、全 0 或者全 1 的内容,压缩率可以达到 25%。只要用 16GB 的物理内存就可以代替 64GB 的 swapfile 。
然后还有 48GB 的物理内存可用,最终可以装下 112GB 的内存页面。

以我的需求来看,够用了。
WuSiYu
2021-12-20 14:21:29 +08:00
一件比较违反常识的事是,哪怕内存足够,swap 也是有用的,举个例子:有些程序可能几天都不会动一下,与其让它占内存,不如扔到 swap 里,内核用这些空间当 cache ,性能反而会更高
GrayXu
2021-12-20 15:25:27 +08:00
@WuSiYu 对比就是 程序指定的数据 和 未指定的数据,哪些更可能在未来被调用?从这个角度上来看,开 swap 的收益应该是程序优化的差(即自己调度的没有 OS 调度的好)才会体现出来吧。 [只讨论服务器场景]
minsheng
2021-12-20 15:30:23 +08:00
@GrayXu 说个最简单的情况,内存漏了,比如说每关一个标签页漏一下,这种场景就天生适合内存交换……

Apple 的 Cocoa 框架有些很迷的东西,有一个 autorelease pool 。这个是古时候的技术了,在 Apple 上了 ARC 自动引用计数之后似乎程序员就接触不到了,所以我也不是很清楚。但是我观察到,调用一些系统框架的时候,这些框架依然会使用这玩意,导致对象虽然释放了,但内存不会,要等一段不明时间才会莫名其妙释放掉。这种情况感觉也用得上。
felixcode
2021-12-20 15:39:04 +08:00
@WuSiYu
一般说内存够都是说内存既足以用于 cache 也同时可以关 swap 。内存够的话服务器和桌面环境都能满足。
唯一想到内存足够的情况下需要开启 swap 的理由就是避免意外的内存泄漏,而这大多是内核或程序设计的问题了。
felixcode
2021-12-20 15:40:15 +08:00
@felixcode
避免意外的内存泄漏 -》 避免意外的内存泄漏造成的系统崩溃。
clrss
2021-12-20 15:42:50 +08:00
1. M1 Mac 的 TBW 增长确实不正常, 一个月几十 T, 比我 Intel 机型 2 年的还多
2. 现在 SSD 1000 次的擦写值确实只能支持几百 TBW
2.1. 用掉 80% TBW 以后, 可以认为报废了. 不可能真的等丢数据了再换
3. 集成式 SSD 没法简单的更换
4. M1 的性能 5 年不过时 8 年不淘汰. 就这样报废整机是不是不太甘心?
nikolai
2021-12-20 15:53:51 +08:00
虽然都吐槽硬盘写入高,但我还没见过 MacBook 的硬盘写坏的
shika
2021-12-20 15:59:54 +08:00
在 Linux 下,我的理解是不管你内存有多大,swap 不管大小如何设置,还是要有的,MAC 下 swap 工作机制不一样?
felixcode
2021-12-20 16:05:20 +08:00
@nikolai
https://medium.com/codex/my-macbook-air-m1-is-dead-a394e3581e95
https://news.ycombinator.com/item?id=27065953

虽然文章没直接说是写入量过大造成的,但的确是高负载使用,很可能和写入量有关,而且硬盘坏了之后直接丢了 800G 的数据。
xqk111
2021-12-20 16:08:05 +08:00
这个还能设置?
Cielsky
2021-12-20 17:01:21 +08:00
@felixcode 内存够多为什么会用到 swap 呢?此时关与不关有什么区别
felixcode
2021-12-20 17:12:22 +08:00
@Cielsky
内存够多依然会用到 swap ,跟设置的策略有关,linux 下是通过修改内核的 vm_swappiness 参数(默认 60 )来调整策略的,如果设为 0 的话就不使用 swap, 很多建议设置为 1 。
具体计算方法可以看这篇文章。
https://access.redhat.com/solutions/103833
neptuno
2021-12-20 17:28:35 +08:00
有些人 64g 内存确实不需要吧,而且 m1 写入确实夸张了,导致有些人比较焦虑
WuSiYu
2021-12-20 17:29:38 +08:00
@felixcode 这只是一种观点了,它的前提是内存永远都是不够用的,毕竟除了被动的缓存,内核还可以主动的预读。不过实际上会有大内存+轻载的情况,此时内存本身都有闲置,自然就没 swap 什么事了
从另一个角度讲,这个观点认为,如果 swap 被用到了,往往是利大于弊的,而如果 swap 使用为 0 ,那除了占用一点硬盘空间之外也不会有副作用(况且 macos 的 swap 可以自动缩放)
至于内存泄漏,我觉得在 macos 上是个相当现实的问题。。。
gps949
2021-12-20 17:30:04 +08:00
提速?都 64G 内存了,还用 swap 感觉就是故意摸鱼
alexkkaa
2021-12-20 17:39:34 +08:00
mac 内存普遍偏小 swap 还是有用的。但是当你用上 64g 内存,swap 常年 0 占用很正常
beimenjun
2021-12-20 17:46:51 +08:00
其实多少也和 Apple 在大内存的内存策略无法被人信任有关系。

Apple 很多内存策略很迷,内存还剩几百 G ,但是使用的部分超过 50%,就开始 Compress 内存了。
dengshen
2021-12-20 23:07:38 +08:00
有内存不用偏偏占用几 g 的 swap 。我也想关掉,并不是怕写硬盘
icyalala
2021-12-21 00:27:17 +08:00
你要愿意接受内存不够时 OOM 杀 App ,那大可以关闭 swap 。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/823272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX