V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Radeon
V2EX  ›  macOS

这两天优化缩减 El Capitan 下的 SSD 写入次数,和大家分享一下

  •  
  •   Radeon · 2015-10-23 13:23:56 +08:00 · 8318 次点击
    这是一个创建于 3319 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1) 禁用 /var/vm/sleepimage

    网上的攻略一般是说要 sudo pmset -a hibernatemode 0 ,然后 sudo rm /var/vm/sleepimage

    其实除了要设置这个,在 El Capitan 里还要
    sudo pmset -a standby 0
    sudo pmset -a autopoweroff 0

    这个在 pmset 的 man 里面写得很清楚

    2) 禁用 dynamic_pager (虚拟内存)

    如果机器内存上限够大的话,不妨配足然后禁用虚拟内存。 El Capitan 之前的 OS X 的做法是

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

    在 El Capitan 下,需要先禁用 SIP (System Integration Protect)
    先按住 CMD+R 重启电脑,进 Recovery Mode ,然后选择 Utilities -> Terminal 工具
    csrutil disable
    关闭 SIP
    重启进系统
    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
    再重启进 Recovery Mode
    csrutil enable

    3) 给 SSD 分区加上 noatime (no access time) 选项,不记录每个文件的最近访问时间
    原理是 sudo mount -vuwo noatime /
    成功以后执行 mount ,应该显示
    /dev/disk1 on / (hfs, local, journaled, noatime) 注意最后的 noatime mount 标志

    可以写一个 plist 自动执行

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Label</key>
    <string>noatime</string>
    <key>ProgramArguments</key>
    <array>
    <string>mount</string>
    <string>-vuwo</string>
    <string>noatime</string>
    <string>/</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    </dict>
    </plist>

    存为 /Library/LaunchDaemons/noatime.plist
    第 1 条附言  ·  2015-10-23 18:01:22 +08:00
    很多网友指出目前的 SSD 寿命足以不用担心写入次数问题,我同意。不过我考虑的是 1) 减少磁盘 I/O ,尤其是最耗时的 Disk Write ,总归可以给系统减负 2) Virtual Memory 很容易在不知不觉中积累到很高的容量,而且根据其本性,还是算存在较高频次的读写。主流浏览器 Chrome 、 Firefox 和我用的最多的 Sleipnir (我是利用其沙盒防 0day)都有内存泄漏问题
    49 条回复    2015-10-30 08:38:07 +08:00
    qdwang
        1
    qdwang  
       2015-10-23 13:26:55 +08:00
    感觉只要不是质量问题, ssd 寿命基本不用考虑了。。
    Radeon
        2
    Radeon  
    OP
       2015-10-23 13:27:26 +08:00
    @qdwang 如果你的 SSD 容易拆卸,确实不用考虑
    wy315700
        3
    wy315700  
       2015-10-23 13:32:42 +08:00
    @Radeon 一块 SSD 用了 3 年半,写入量也才 12T ,远不到坏的时候
    Radeon
        4
    Radeon  
    OP
       2015-10-23 13:35:13 +08:00
    @wy315700 反正我觉得做了没坏处吧。我比较怕拆 iFix 指数超低的机器
    Andiry
        5
    Andiry  
       2015-10-23 13:36:18 +08:00
    为了区区 SSD ,把电源管理和 swap 都关了,这样好么
    buckethead1
        6
    buckethead1  
       2015-10-23 13:36:59 +08:00 via Android
    挺好的
    禁用虚拟内存可以用 onyx 图形化操作
    Radeon
        7
    Radeon  
    OP
       2015-10-23 13:37:09 +08:00
    @Andiry 电源管理没关, suspend-to-ram 不是更好吗? swap 对于大内存机器确实没必要啊
    honeycomb
        8
    honeycomb  
       2015-10-23 13:38:20 +08:00
    @Radeon
    检查开关这些设置后,对 SSD 写入量的影响?
    qdwang
        9
    qdwang  
       2015-10-23 13:41:20 +08:00
    @Radeon 花钱找人帮你拆换 ssd 即可
    br00k
        10
    br00k  
       2015-10-23 14:08:43 +08:00
    然并卵。楼主还是别开机为好。
    seerhut
        11
    seerhut  
       2015-10-23 14:13:46 +08:00
    等现在的 256G ssd 坏了,就可以和老婆申请预算买创见的 512 ssd 换上了。
    c0878
        12
    c0878  
       2015-10-23 14:13:57 +08:00
    日常使用不是疯狂 BT 下载 SSD 硬盘还是非常靠谱的 完全不用担心 就算挂了还有 timemachine 换硬盘的事情丢给售后就好了
    Koma
        13
    Koma  
       2015-10-23 14:15:53 +08:00
    2010 年的一块 X25M 160G ,从来没注意使用,经常 BT 下载,后来沦为移动硬盘,到现在还好好的。
    20015jjw
        14
    20015jjw  
       2015-10-23 14:22:42 +08:00
    真的有必要么 摊手
    randyzhao
        15
    randyzhao  
       2015-10-23 14:27:01 +08:00
    总会有人需要用到, 点个赞.
    顺便问下

    禁用 /var/vm/sleepimage 这个会有什么影响.
    spwei
        16
    spwei  
       2015-10-23 14:27:28 +08:00
    对于现在的 SSD ,真没必要
    pH
        17
    pH  
       2015-10-23 14:27:59 +08:00
    别的我没做,但是第一点我是做了的。 包括 Windows 也是。
    Radeon
        18
    Radeon  
    OP
       2015-10-23 14:30:10 +08:00
    @pH 第一条能释放好多个 GB 的空间,非常值得做
    Radeon
        19
    Radeon  
    OP
       2015-10-23 14:31:14 +08:00
    @randyzhao 禁用 sleepimage 你的电脑还可以 suspend-to-ram ,一般的 MacBook 电池撑 48 小时没问题
    GuangXiN
        20
    GuangXiN  
       2015-10-23 14:33:14 +08:00
    @wy315700 怎么看写入量?
    randyzhao
        21
    randyzhao  
       2015-10-23 14:33:51 +08:00
    @Radeon 就是只有睡眠, 没有休眠了,是吧?

    所以这样会减少 SSD 的损耗, 我理解了.

    那么经常合盖走人的话, 会加大电池的损耗吧?
    SourceMan
        22
    SourceMan  
       2015-10-23 14:37:45 +08:00
    应该有后遗症,然后得不偿失?
    wy315700
        23
    wy315700  
       2015-10-23 14:47:07 +08:00
    @GuangXiN 三星的 SSD 里 smart 有一个字段, TOTAL_LBA_WRITE , 是写入的扇区数
    Tink
        24
    Tink  
       2015-10-23 14:47:28 +08:00 via iPad
    写入量在哪里可以查看?
    rannnn
        25
    rannnn  
       2015-10-23 14:49:30 +08:00
    买了 Apple Care 还没用到,求坏
    cheny95
        26
    cheny95  
       2015-10-23 16:01:13 +08:00
    @Tink
    @GuangXiN
    软件:
    SMART Utility
    jeansfish
        27
    jeansfish  
       2015-10-23 18:05:59 +08:00
    求坏,使劲用
    tyhunter
        28
    tyhunter  
       2015-10-23 18:52:09 +08:00 via iPhone
    我有 timemachine 和 Apple care ,巴不得快点坏
    Radeon
        29
    Radeon  
    OP
       2015-10-23 19:25:44 +08:00
    @rannnn
    @jeansfish
    @tyhunter 问题是使劲用却不能在 Apple Care 保修期截止前用坏怎么办?
    70599
        30
    70599  
       2015-10-23 21:13:30 +08:00
    请问楼主怎样验证虚拟内存已关闭?
    Radeon
        31
    Radeon  
    OP
       2015-10-23 21:21:10 +08:00
    @70599 sysctl vm.swapusage
    70599
        32
    70599  
       2015-10-23 21:32:15 +08:00
    @Radeon 做完楼主第二步之后用上述命令输出的结果:
    vm.swapusage: total = 0.00M used = 0.00M free = 0.00M (encrypted)

    看来是禁用了, 16GB 内存黑苹果,目前没什么问题。
    crystone
        33
    crystone  
       2015-10-23 21:33:53 +08:00
    @Radeon btbtbbttbbbttt
    jedihy
        34
    jedihy  
       2015-10-23 22:13:56 +08:00
    真心 SSD 用不坏的
    crisfun
        35
    crisfun  
       2015-10-23 22:42:51 +08:00
    对于不同的人有不同的选择,像我还没用多久写入量就几个 T,我实在把自己震惊了
    pagict
        36
    pagict  
       2015-10-24 01:16:32 +08:00
    中国有句古话,叫闷声发大财
    可是看到你们这么热情的争来争去
    我不说两句又不好

    那么我就要问了 你们是怎么测 mac 上 SSD 写入量什么的 :笑 cry 脸:
    sean419
        37
    sean419  
       2015-10-24 01:47:45 +08:00
    买了 Apple Care ,独孤求坏!
    cdy
        38
    cdy  
       2015-10-24 06:28:04 +08:00
    我猜苹果是没有这么傻着叫我们自己打命令优化的
    0x61
        39
    0x61  
       2015-10-24 08:56:50 +08:00
    我有一块 60G 的, 2010 年买的,现在还在用,而且性能还很好
    ycyppq123
        40
    ycyppq123  
       2015-10-24 09:23:51 +08:00
    没必要
    feikaras
        41
    feikaras  
       2015-10-24 16:27:23 +08:00
    没必要,自作聪明
    sylarchang
        42
    sylarchang  
       2015-10-24 17:03:50 +08:00
    其實沒必要, SSD 我拿來掛 PT 用了幾年都沒任何問題
    Radeon
        43
    Radeon  
    OP
       2015-10-24 19:37:28 +08:00
    @sylarchang PT 的每个块只是写入一次,不是重复写入,而 SSD 的读取次数几乎是无限,所以当然没事
    zwy
        44
    zwy  
       2015-10-25 09:39:52 +08:00 via iPhone
    你有没有想过,这种所谓的优化,苹果的系统工程师不知道么?他们为什么不用呢?
    Radeon
        45
    Radeon  
    OP
       2015-10-25 14:03:25 +08:00
    @zwy 你可以认为这些是没有做出 GUI 设置界面的系统选项。禁用休眠文件和禁用虚拟内存在 Windows 下是有 GUI 设置界面的
    actuallymax
        46
    actuallymax  
       2015-10-29 15:08:04 +08:00
    进用过 sleepimage 但是过一段时间又冒出来了,这是怎么回事呢?
    Radeon
        47
    Radeon  
    OP
       2015-10-29 17:16:43 +08:00
    @actuallymax 你运行 "pmset -g",然后把结果贴出来
    actuallymax
        48
    actuallymax  
       2015-10-29 21:59:02 +08:00
    @Radeon

    Active Profiles:
    Battery Power -1
    AC Power -1*
    Currently in use:
    standbydelay 4200
    standby 0
    womp 1
    halfdim 1
    hibernatefile /var/vm/sleepimage
    sms 1
    networkoversleep 0
    disksleep 10
    sleep 30 (sleep prevented by coreaudiod)
    autopoweroffdelay 14400
    hibernatemode 0
    autopoweroff 0
    ttyskeepawake 1
    displaysleep 10
    acwake 0
    lidwake 1
    Radeon
        49
    Radeon  
    OP
       2015-10-30 08:38:07 +08:00
    @actuallymax 这是我的 pmset -g

    Active Profiles:
    AC Power -1*
    Currently in use:
    standby 0
    Sleep On Power Button 1
    womp 0
    halfdim 1
    hibernatefile /var/vm/sleepimage
    powernap 1
    gpuswitch 2
    autorestart 0
    networkoversleep 0
    disksleep 10
    sleep 5
    autopoweroffdelay 14400
    hibernatemode 0
    autopoweroff 0
    ttyskeepawake 1
    displaysleep 5
    standbydelay 10800

    似乎和你的没多大区别。不过我的 sleepimage 不会重新生成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.