品评 OS X Mavericks ——唯快不破(下)

Maver

本来触动我写这个系列的原因就是 Mavericks 的快,所以起名唯快不破。结果拉开架势写了两篇都还没有写到这个快字,真够失败的。今天的终结篇将主要介绍 Mavericks 是如何做到「多快好省」。

更正1:Java 从 Lion 开始就不是 OS X 的一等公民了,而是按需安装,但是之前 Lion 和 ML 升级时不会干掉原有的JRE,所以 Mac 君没有觉察,这次他们干得更彻底一些。

更正2:双屏显示的时候,在扩展的桌面空间里也可以出现 Dock,具体操作方式是鼠标在屏幕下方滑动两次,就会呼出该屏幕的 Dock。但是这个功能还不稳定,经常发生呼不出来的现象,等正式版吧。

更正3:Ant 被干掉了,Maven 保留着。看来自古都是「但见新人笑,那闻旧人哭」。依然想使用 Ant 的童靴可以执行以下脚本安装:

brew install https://raw.github.com/Homebrew/homebrew-dupes/master/ant.rb

性能:唯快不破


一个操作系统除了功能性和安全性之外,考虑最多的就是迅疾如风的响应速度和持久的续航能力,这次 Mavericks 的升级使用了多种技术保证了 OS X 的快和节能。

(一)Kernel

OS X 的内核基于 FreeBSD和 Mach3.0构建,可以通过32位或64位内核启动系统,并充分发挥32位或64位应用程序的运行效能。在64位内核的情况下,Mavericks 经测试可以最大支持 128G 的物理内存,这特么就是个服务器版本啊。

(二)Compressed Memory(内存压缩)

内存压缩技术是 Mavericks 新增加的底层技术,这货彻底提升了整个系统的使用容量和响应速度,也就是说你可以开启几十个应用程序,在联动内存超过80%,物理内存使用几乎达到100%的时候,依然可以像整个系统只打开了一个程序那样,毫无顿挫感的使用每一个打开的程序,这种美妙的感觉让人想想都要流口水的。

具体原则就是永远去满足最需要内存的程序,当内存告急的时候,系统就会根据时间顺序去寻找那些不活跃程序的内存,将其压缩到一半大小,然后把内存倒出来给最需要的程序。当这些被压缩了内存的程序活跃起来的时候,系统会以最快的速度释放内存,让你切换程序毫无顿挫的感觉。

这就像一个家族企业,哥哥姐姐弟弟妹妹各有各的生意,有一天大哥说要干一票大的,这时候其他人就会把手里的闲散资金贡献出来给大哥用,当有其他人也想拓展生意时,也是一样的路数。资源虽然有限,但总能让最需要最活跃的人获得足够的资金。当然前提是活跃的人数是有限制的,都活跃了这个游戏就没法玩了。

Mavericks 的内存压缩采用了 WKdm 算法(http://terpconnect.umd.edu/~barua/matt-compress-tr.pdf ),这个算法巨牛无比,压缩和解压缩可以说唯快不破。我查了上面提到的论文,这算法也有年头了,不知道为毛现在才翻出来使用。这种压缩技术比硬盘 Swap 交换技术要快,即使是 SSD 硬盘也无法比拟。内存压缩的使用,在增加内存使用效率的同时,还减少了硬盘的读写次数和 CPU 的占用率,另外,与传统的虚拟内存技术不同,这玩意还能充分利用多核 CPU 的特性,实在是牛到逆天。

所以,大家如果总是把创新定在 UI/UE 的变化上是图样图森破的,没有技术底蕴都是昙花一现。

为了测试内存压缩的效果,我开启了三十个左右的GUI程序,包括各种浏览器、阅读器、办公软件、开发工具(IntelliJ、Eclipse、Xcode 和模拟器),其中 Safari 和 Chrome 分别打开了几十个标签页,整个系统什么感觉都没有,运转如飞。于是开始出大招,打开 Parallels Desktop,开启了三个 Linux 和一个 Win7,整个系统的内存变化如下图所见(见网站),红色部分表示内存压力高的时候,也就是我逐一打开四个虚拟机的阶段。这时系统终于有反应了,程序切换略有卡顿,但是依然不影响独立程序的使用。关掉一个虚机之后,这个系统又恢复如初了,性能远超上一代的10.8 ML。

mem

(三)Power Efficiency(电源效率)

Mavericks 中的电源技术是根据现代处理器的功能和程序需求构建的,可以有效的延长电池的续航时间,简单来说就是当你的电脑在使用电池供电时,系统会把后台程序的功耗降到最低,尽可能只帮你处理激活窗口的程序,并根据 CPU 的具体使用状况尽可能让各处理器处于 idle 状态,一旦有需要再满负荷运行。比如我现在正在打字写文章,CPU 和硬盘都会处于低功耗的状态。系统对大功耗的后台程序做了严格的控制,并且会通过电池状态告诉你哪些程序是不合格的,以方便你随时干掉这些程序。

perf

很牛的技术,但苹果没说怎么实现的,杯具!

(四)App Nap(程序挂起)

这个技术叫程序挂起也好,程序休眠也好,事实上是和Power Efficiency结合使用的。系统会把你暂时不用的程序,或者不可见的程序迅速而强硬的置于休眠状态,比如你开了三个 Safari 窗口,每个窗口开启了30个 标签页,一共访问90个网址,但是你只能同看一个或几个页面,这时候其他标签也都会被置为挂起状态,当你进行标签也切换时再迅速唤醒。并且在你访问 Safari 的时候,其他不可见的程序都会被置为挂起状态,限制程序向 CPU 发出中断请求,降低磁盘和网络 I/O。同时,App Nap技术还降低了 UNIX 基础进程的优先级,以保证系统的低功耗。

写过程序的都知道,这基本上就是一种懒加载技术,使用的时候才加载,但最神奇的是,系统在做了这么多限制之后,一旦某个程序需要处于激活状态,系统就会开足马力将其唤醒并提供足够的资源,让用户完全感觉不到有休眠和挂起这回事,这让我个人感觉非常悲伤,因为完全不知道人家是怎么实现的。

人比人死,货比货扔,没啥说的。

(五)Timer Coalescing(计时器聚合)

最后说说计时器聚合的技术。传统的应用程序在运行的时候向 CPU 发请求是杂乱无章的,这就搞的 CPU 很烦,因为永远不知道什么时候能休息,刚眯一下会就可能被叫醒的程序员你们感受下。

比如一位忙碌的程序员,几十位上级轮番上阵的向程序员要资源要成果,而且不分场合不分时间不分类型,长此以往,代码必将写无可写,因为程序员已经疯掉了。这时候就需要一个秘书出现来梳理这些请求,定时定点分门别类的处理,这样程序员的工作就轻松多了,有了计划性,还能得到休息。计时器聚合就是 CPU 的秘书,它会把请求进行梳理,通过合理的时间管理保证请求的有序性和间歇性,这样 CPU 就会有更多的低功耗休息时间,具体的处理示意图如下,表示处理之前和之后的CPU 时钟对比。同样,用户完全感受不到这位秘书的存在。

timer3

好,以上内容根据苹果提供的 OS X Mavericks Core Technologies Overview 演绎而得,如有雷同,必是他人抄袭。

遗留问题


目前这个 DP5 的版本已经达到工作机可用的程度,但问题也不少,如下:

  1. 外接显示器启动 Mac 的时候你会看到左右两个灰灰的界面,如果你一直等下去的话,夏去秋来也不会有结果的。拔掉外接插头,你就能看到那张熟悉的脸(登录界面)。
  2. 多屏的情况下鼠标经常会失去焦点,如果你发现某个页面怎么也无法滚动时,不要怪罪你的食指,一定是有另一个程序在后面骂娘,「老子已经在后面归隐多时,为毛还要被反反复复的拖来拖去?」
  3. 总体来说,Mavericks的 UI 并没有太大的变化,但是时而扁平时而立体的效果,还是容易让人产生困惑,我们期盼两岸尽快统一起来。
  4. 程序的稳定性仍需加强,比如 Safari、iBooks等,每天还能崩溃一两回,iBooks 的性能和渲染也是问题,丫经常把自己搞得很慢。日历也经常出问题,你会发现周历和月历突然不能滚动了,或者用着用着事件的颜色被偷偷的修改了,总之,凡做过大手术的程序,都不稳定,Xcode5.0 没敢升级,不作死就不会死。

希望下一个预览版能够解决这些问题。

另外,应部分童靴的要求,我把Mavericks 10.9 DP4完整镜像包和DP5的升级包的下载链接都放到了这篇文章的后面,感兴趣的可以去试试,尝试新鲜事物永远是保持内心鲜活的动力之一,但这毕竟是给开发者的预览版,记住两点:

  1. 先备份
  2. 杯具了就别来找我

DP4安装镜像:
SHA1 9578dfd2f8fba1a574cf792013af62d0930ba00e
原始地址 百度网盘

DP5升级包:
SHA1 f8a48a662463855abb093ce3a2a67e35c6f42296
原始地址 百度网盘

三篇写完,颇感疲累,我要休息一下,这两天别等更新了。


希望长期听 MacTalk 可以在 macshuo.com 上赞助,谢谢。

36 thoughts on “品评 OS X Mavericks ——唯快不破(下)

  1. XCode 5 建议升级一下,可以和现在的XCode 4.6并存。XCode5的修改也不小,而且效率提升挺明显的,尤其是习惯用自带SVN的童鞋,用起来应该更如鱼得水。另外XCode5把常用的监测放到了程序内部,也就是说应用闪退的时候,我们能看到实时的状态,而不用另外开启监测

    • xcode5升级了,感觉比原来的良好。但是有一个问题,我习惯用ECLIPSE,但是问题是,升级系统后,ECLIPSE下的CDT对C,C++程序进行编程,一直不成功。出现这样的错误A program file was not specified in the launch configuration.求解。另外,在COMMAND-LINE下编译是可以的。

      • 貌似如此,之前是在PC机上下载的,我在mac笔记本上重新下载了一次安转没有问题。但PD8在10.9上有问题,我准备用time machine回去,悲剧的是,time machine始终进不去

          • 现在发现可稳定使用,不过Finder基本不可用了,于是没法进入time machine恢复文件,最悲剧的是我想回到10.8,但time machine却说找不到系统备份。不过其他的尚影响不大,日常使用没什么问题了。不过我进入OS X Utility里重新安装拷贝却只能安装10.9,然后又告诉我没有安装信息,没法重新安装。回10.8的路是不是堵死了?

          • 是开机按下alt键进入的那个吧,只有恢复10.9的字样,没有10.8的选择。选择那个后最后还是进入OS X Utility的界面,™还是认不出来我的备份。这充分说明了,新手第一次使用TM应该验证一下备份是否可用,泪奔。

  2. xcode dp5也已经达到日常可用程度, 可以放心升级.

    当然不排除正好你那块不能用. 如果悲剧了也别来找我

    另外, xcode5, 和xcode4可以共存

  3. 从10.9DP1开始在生产环境中使用,前3个版本WiFi连接问题很囧,时断时续,DP4是用过最稳定的版本了。DP5出现双指滚动失效问题,DP6双指问题修复了但是Eclipse菜单又都灰掉了。即使如此,也比10.8DP和10.7DP时代要稳定的多嗯。呵呵。

    • 升了Mavericks DP6的版本之后,你会发现 Jetbrain 系列程序的 menu bar 不见了,比如 IntelliJ IDEA,PyCharm 等,这是苹果的 bug,重新下载苹果官网的 Java1.6就可以了,具体可参考:http://youtrack.jetbrains.com/issue/IDEA-112511

  4. 我升级了DP7之后,倒是没出现无法滚动的问题。

    但经常出现双指无法缩放的问题,不知道有朋友遇到过吗? 知道怎么破吗?

  5. 因为刚升级了Mavericks所以搜索到了这篇文章,觉得非常不错!解释了新系统最精髓的部分!看了你别的文章,感觉很有营养,决定对你多关注,顺便买一本你的新书,支持正版!

  6. 池总你好,我是2012上半年款MBP,自己加装的SSD256G,昨天升级了正式版的10.9,但是现在发现切换屏幕,打开launchpad,甚至空格键的quickview这些操作都会有卡顿,不知道会是什么原因,之前的10.8丝般顺滑的感觉荡然无存啊。。。。啊啊啊。请问这可能会是什么原因引起的?难道我得全新安装吗?盼回复

  7. Pingback: OS X 的合计时器聚合技术 (Timer Coalescing) 和 MIUI 的『对齐唤醒』机制有什么区别? - Android - 开发者第2355080个问答

  8. 从性能-内存压缩测试来看,是不是说明开发用,eclipse,tomcat等 再加常开一个win7 或 win8 虚拟机的话,购买RMBP 2013款 8g内存足够使用了?

  9. Pingback: 管中窥豹:OS X Yosemite 细节赏析

发表评论