折腾O2 Joggler

  由于我的WD My Book World Edition在内存升级过程中遇难,好友给我介绍了一个新玩具:O2 Joggler电子相框,它是一个OpenPeak给O2 OEM的产品。

  记得曾经某人在拿到作为T公司20周年纪念品的电子相框后,在第一时间把它大卸八块,然后失望的把它合起来——一个基于VCD芯片做的相框实在没有什么好折腾的。相比之下,O2 Joggler的硬件配置就很有折腾的余地:Intel Atom Z520 1.33 CPU, 512 RAM, 1G Flash, GMA500, 7寸800*480电容触摸屏, RT8169 1000M网卡, RA2870 802.11N无线网卡, 1 USB 2.0。而曾经在HiPDA论坛上的团购价格已经低至450元。

相机不在手头,就从网上找个图吧
相机不在手头,就从网上找个图吧

  虽然配置不错,不过很快就会发现它做什么东西都有软肋:做下载机要外接硬盘,做平板电脑用的话它没有电池,做车载多媒体设备的话它没有GPS和3G模块,做高清播放盒吧它没有视频输出接口。我的目的还是用它做下载机,所以直接用硬盘底座外挂3.5寸硬盘,按着当年折腾My Book的方法折腾它。

  操作系统选择:理论上任何可以通过EFI引导的x86操作系统都可以。出于驱动的原因,目前比较完善的还是基于Ubuntu的GNU/Linux发行版,尤其是适合于Netbook的REMIX或者Mint,Android 2.2的工作还在进行中。我还是选择了我最熟悉的Debian,虽然这也许不是个最好的选择。编译Linux Kernel需要的Patch在这里有个列表。Joggler自己有一个原生的定制过的GNU Linux操作系统,也可以用于实现各种应用,但各种前端应用都需要基于Flash来做。

  操作系统安装:网上有不少已经装好的镜象,可以直接用。对于我来说,则是用debootstrap装一个干净的Debian才会比较合我口味,大部分的工作可以参考JogglerWiki上的这篇文章来完成。目前,标准安装一个Debian + XFCE的桌面,基本上可以把大小控制在1G以内,这样就可以把操作系统放到Joggler内置的Flash中。当然,在实验各种系统时,还是先放在U盘上外置引导会比较让人放心,因为这样完全不会动到原来的系统,就不致于把Joggler变成砖头。

  应用软件:反正是个标准的x86的GNU Linux,其它应用软件您该怎么装怎么装吧……从这个角度来说,Joggler太像一台真正的电脑了,所以反而也没有太多可以折腾的地方。

  目前Joggler相关的资料比较完整的地方是JogglerWiki,我在这里索引一下比较有用的一些信息。

  1. 拆机视频:拆机可以把USB无线网卡拨掉换成个大U盘内置,可以接出更多USB口,可以换CPU散热片(目前相框的支架就是CPU的散热装置,最好别把它拆了),加装ZIF接口的PATA硬盘

  2. Joggler的有线网卡没有MAC地址,必须用软件设置

  3. 内置Flash跟外置的U盘一样可以引导系统,你可以用fdisk对它重新分区合并使用。但必须保持第一个分区是FAT的EFI的引导分区。这里有些资料可以参考。Joggler不是很容易变砖的,实在你很不幸的把它变砖以后,还可以通过热插拔EFI芯片解决。

  4. 内置喇叭在闲置时可能会会轻微爆音,MS是由于CPU节能引起,解决方法有若干种,但好像不是每个人都说有效。

  5. 在我这里外置USB硬盘有时会出现异常断开的问题,这个问题对于下载机来说会非常致命,尤其如果系统是装在USB设备上的话,会直接导致系统死掉。目前的线索是一个Ubuntu的一个BUG报告,不过我还没有试成功,而最近几天这个问题却似乎没再出现。

  6. 很多人报告Joggler发热量太大,70度以上后自动降频后慢到无法使用。但我这里没有出现过,温度一般在35-41度左右,长期开Flash应用(比如豆瓣电台)会升到51度。如果屏幕长期打开会更热一些。

  7. 在我的系统中,Google Chrome常常会导致系统完全死锁,不知道是不是跟这个有关,总之我直接换用Firefox绕过了这个问题。

  8. Joggler还有一个很不起眼的设备,那就是它顶上的一个光线传感器,加载i2c的模块后,可以用程序读它的数据,通常可以用来调整屏幕亮度用。相关代码在这里

  9. 理论上Joggler的硬件配置播放1080p的高清视频是没有问题的,当然你需要自己编译一个VAAPI的mplayer。不过我这里实测结果是720p的视频播放基本问题不大,但1080p还是基本没戏,我对此表示无鸭梨,难道我真的需要在这么小的屏幕上放这么高清的视频么?

  目前我的Joggler在我这里是勤勤恳恳的运行rtorrent和amule-daemon做下载机,用cronjob打开豆瓣电台做闹钟。更多的应用就慢慢再开发了。

戏说Linux-2.6.38中进程调度的优化

2.6.38?现在2.6.37还在RC中,怎么会有38?是的,因为37进了RC,所以不会再加新功能了。那么将要进入的新功能只能放到38中。而谁会是2.6.38的闪光点呢?对于进程调度subsys来说,很有可能就是autogroup了。

虽然现在这个新功能还在讨论中,但是Linus和Ingo都已经buy in得差不多了,进入main tree是指日可待了。这个feature要说最早也是来自于Linus的灵感,其实很多人应该也多有感受。比如在我们编译内核时,桌面响应就会变慢,甚 至在vi里敲个字都顿啊顿的;再比如在emule下载完一部电影后做sync时,大量IO也会拖得桌面很顿。这是由于进程调度器在选择下个需要被调度进程 时对于需要快速响应的进程没有做到充分考虑其特殊性。但是你要是用过Redhat9的话,一定会感觉现在Linux的桌面响应或是普通tty响应都快太多啦。这完全要归功于Con Kolivas 和Ingo的不懈努力得到的CFS(虽然Con在技术论战中败下阵后一蹶不振,回去干麻醉师的老本行了;但在论战中胜出的Ingo把sched维护的有 声有色),CFS的完全公平调度天性,让编译程序等非交互性进程被调度器选择时的优先度大大降低(运行的时间越多,在RB tree中越靠边;而运行时间及机会越少的交互式进程越有机会靠近RB tree的左下角,这个左下角可是黄金地段啊,调度器就喜欢从这个地方调进程了)。这么看来CFS做的也很好了,但是在这个牛人辈出的时代,Mike Galbraith站了出来,大声的说,我还可以让交互进程响应更快!

凭什么这么说?凭cgroup!说到这个cgroup,对笔者来说算是老朋友了,或者说是老朋友的老朋友了。国内的Linux新一代牛人中的一位Zefan LI是我的老兄弟,而他恰恰又是cgroup的maintainer,2008年时国内的少数几位内核维护者之一。cgroup是干嘛的呢?google 搜一下,有功底的朋友应该可以看懂,我在这里简单解释,相信也能让大家有个概念。想象一下有这么种容器,你可以把进程放入其中,并给这个容器贴个标签,比如:“核心业务进程”,“娱乐用进程”,“老婆用的进程”等等。并且你可以拿个更大的容器,把“娱乐用进程”和“老婆用的进程”的小容器都扔到那个大容器中,并贴个标签“家用进程”。cgroup就是用来定义这些容器的框架。有了它,我们可以让“核心业务进程”的容器内的进程享有一些特权,比如说固定的网络带宽,较大的IO速度等;我们还可以让“老婆用的进程”容器里的进程只得到很少的系统资源,哈哈,床上打不过你,我还不能靠我的拿手本领整你!(这里的我,泛指天下受苦受难的男性软件工程师)

废话少说,就要到正题了,看到这里,就算你不是Mike G,你也该知道怎么整了吧?虽然知道怎么整与能整出code来还是有差距的,但是至少我们也想到啦。Mike的做法果然不出我们所料,具体说,就是在进程需要用到tty资源时,比如说vi啦,gedit啦,魔兽世界啦。。。。(魔兽世界在Linux上还能玩啊?)就把它放到一个特殊的容器中,这个容器贴了标签“老子要快点响应”。那么进程调度器在挑选下一个家伙来使用CPU时,就会乖乖的去找它啦。就这么简单。简单?你去写一个!

Mike只用了一个220行左右的patch就做到了,代码极尽精炼无耦之能事,被Linus开心的表扬了一遍又一遍。不过最厉害的还是让数据说话,调度平均响应时间为原来的16分之1左右。厉害吗?太厉害了。但是。。。

对的,什么事都会有但是,这是唯物辩证法告诉我们的。cgroup对系统是有penalty的。你想啊,本来人家进程们好好呆在红黑树上等着调度,你非得再给人家按容器分分类,贴贴标签,等到调度器来拉壮丁去享受CPU或其他资源时,不仅得去树里挑,还得在一堆罐子中挑,最可恨的是罐子里还套着罐子。这个Linus当然也是一针见血的就看出来了,可Mike不愧是小牛人。立马拿出准备已久的理由说,对于缺少人机交互的server来说,这个确实比较扯淡(其实也还好啦,cgroup不会带来大于5%的开销),但是对于那些装了Fedora,Ubuntu等等的桌面用户来说,根本无法感知cgroup的开销,反而会乐意接受基于cgroup的autogroup带来的高速响应。厉害!

厉害归厉害,社区里厉害而又爱挑刺(追求完美啦)的人多得是,所以Mike同志还在矜矜业业根据大家的建议做些细微的改善,细微却很重要的改善,估计进Ingo的sched tree是没问题了。热切期待其正式进入2.6.38,接受大众的考验。

关注2011维也纳新年音乐会

  继续维持传统,第七次写名为关注xxxx维也纳新年音乐会的Blog。前几篇在:2005 2006 2007 2008 2009 2010

  这几天360和QQ闹得天翻地覆,这两个软件我都用得不多,所以就只是看看热闹。不用QQ的主要原因还是在于它没有一个可靠的Linux客户端,而带来的主要损失就是无法从QQ群中获得一些最新的信息,幸亏有好友通过别的渠道给我传递一些消息,所以才得以在第一时间获得有关2011年维也纳新年音乐会的消息。

  01 Johann Strauss II - Reiter-Marsch; op. 428 - 骑兵进行曲 - 1995

  02 Johann Strauss II - Donauweibchen; Walzer; op. 427 - 多瑙河女妖圆舞曲 - 1990,1999

  03 Johann Strauss II - Amazonen Polka; op. 9 - 亚马逊女战士波尔卡

  04 Johann Strauss II - Debut Quadrille; op. 2 - 首次登场四对舞

  05 Josef Lanner - Die Schonbrunner; Walzer; op. 200 - 美丽的布尔诺人(美泉宫的人们)圆舞曲 - 1994,2001

  06 Johann Strauss II - Muthig Voran!; Polka schnell; op.432 - 勇往直前快速波尔卡

  07 Johann Strauss II - Csárdás aus 'Ritter Pasman'; op. 441-1 - 查尔达什舞曲,选自《骑士帕斯曼》- 1967,1989,2000

  08 Johann Strauss II - Abschieds Rufe; Walzer; op. 179 - 告别之声圆舞曲

  09 Johann Strauss I - Furioso-Galopp; op. 114 - 激情加洛普 - 1999,2007

  10 Franz Liszt - Mephisto Walzer No.1 - 梅菲斯托圆舞曲第一号

  11 Josef Strauss - Aus der Ferne; Polka Mazur; op. 270 - 自远方玛祖卡波尔卡 - 1983,1994

  12 Johann Strauss II - Spanischer Marsch; op. 433 - 西班牙人进行曲 - 2006

  13 Joseph Hellmesberger jun. - Zigeunerin Tanz aus Ballet; Die Perle von Iberien - 吉普赛舞曲

  14 Johann Strauss I - Chachucha-Galopp; op. 97 - 卡楚恰加洛普 - 2004

  15 Josef Strauss - Mein Lebenslauf ist Lieb' und Lust; Walzer; op. 263 - 我的生平经历是爱与希望圆舞曲 - 1995

  16 Eduard Strauss - Ohne Aufenthalt; Polka-schnell; op. 112 - 永不休止快速波尔卡 *

  17 Johann Strauss II - An der schönen blauen Donau; Walzer; op. 314 - 蓝色多瑙河圆舞曲

  18 Johann Strauss I - Radetzky-Marsch; op. 228 - 拉德茨基进行曲

  担任2011年维也纳新年音乐会指挥的是奥地利本土指挥家弗朗兹·威尔瑟-莫斯特(Franz Welser-Möst),这将是他首次登上维也纳新年音乐会的指挥台。莫斯特现在是克利夫兰管弦乐团的首席指挥,并在不久前刚刚出任维也纳国立歌剧院艺术总监。虽然以前不是太了解这位指挥家,也没有欣赏过他的作品,但仍然非常期待他在新年音乐会上的首次亮相,因为在这个指挥台上,每一次出现新的面孔都能为这场传统的音乐盛宴带来新的气息。

  今年的曲目单中有7首从未在新年音乐会上演奏过的新曲子,这在最近几年来看算是最多的一次。新曲子中既有欢快的波尔卡和四对舞曲,也有温文尔雅的圆舞曲,尤其值得一提的是今年还将演出一首李斯特的圆舞曲作品,2011年是李斯特诞辰200周年。每年这些纪念音乐家而加入新年音乐会的非施特劳斯家族的作品都会带来不一样的味道。虽然李斯特的作品是第一次入选新年音乐会,但实际上,1999年和2007年并将在2011年再次出现的老约翰的《激情加洛普》的旋律就是跟据李斯特的《钟》的旋律所创作的,不过《钟》其实也是李斯特跟据帕格尼尼的同名小提琴曲改编而成的钢琴曲。

  其它的曲子中,也没有包括太多的“陈词滥调”,很多都是仅仅在新年音乐会上出现过一次的优秀作品,比如约瑟夫的两首玛祖卡和圆舞曲,旋律都非常优美,值得期待。约瑟夫·赫尔梅斯伯格和约瑟夫·兰纳的作品算得上是新年音乐会的常客了,他们的作品风格与施特劳斯家族比较相近,所以也常常入选新年音乐会。今年的赫尔梅斯伯格的新曲吉普赛舞曲应该会给人们带来耳目一新的感觉。

  音乐会以进行曲开场的传统没有变,但下半场的开场却没有像往常一样选择一首序曲,而是选择了查尔达什舞曲,总得来说这个曲子也还是挺有序曲的气质的,个人觉得放在下半场的开场还算是个不错的选择。

  时隔一年,传奇式导演布莱恩·拉奇再次回到新年音乐会的导演位置上,这位导演过18届维也纳新年音乐会的神奇人物每年都以他传统的方式,用镜头细腻的为全世界的观众诠释音乐之美。据说他导演音乐会都是直接用的是指挥的总谱,他对演出的每一个曲目都做到烂熟于心,确保跟据乐曲的旋律和配器,在最合适的时候把镜头切换到相应的角度,让画面与音乐同步展现出乐曲最核心的意境。

  维也纳的金色大厅、指挥家和维也纳爱乐乐团、维也纳国家歌剧院芭蕾舞团的艺术家、意大利阳光之城圣雷莫的美丽鲜花,还有ORF的电视转播工作者们,在每一个新年的第一天到来之时,为全世界的人们带来艺术的享受,让我们一同期待。