2015年1月

你能快速定位CPU性能回退的问题么? 如果你的工作环境非常复杂且变化快速,那么使用现有的工具是来定位这类问题是很具有挑战性的。当你花掉数周时间把根因找到时,代码已经又变更了好几轮,新的性能问题又冒了出来。

幸亏有了CPU火焰图(flame graphs),CPU使用率的问题一般都比较好定位。但要处理性能回退问题,就要在修改前后的火焰图之间,不断切换对比,来找出问题所在,这感觉就是像在太阳系中搜寻冥王星。虽然,这种方法可以解决问题,但我觉得应该会有更好的办法。

所以,下面就隆重介绍红/蓝差分火焰图(red/blue differential flame graphs)

上面是一副交互式SVG格式图片(链接)。图中使用了两种颜色来表示状态,红色表示增长蓝色表示衰减

这张火焰图中各火焰的形状和大小都是和第二次抓取的profile文件对应的CPU火焰图是相同的。(其中,y轴表示栈的深度,x轴表示样本的总数,栈帧的宽度表示了profile文件中该函数出现的比例,最顶层表示正在运行的函数,再往下就是调用它的栈)

在下面这个案例展示了,在系统升级后,一个工作载荷的CPU使用率上升了。 下面是对应的CPU火焰图(SVG格式

通常,在标准的火焰图中栈帧和栈塔的颜色是随机选择的。 而在红/蓝差分火焰图中,使用不同的颜色来表示两个profile文件中的差异部分。

在第二个profile中deflate\_slow()函数以及它后续调用的函数运行的次数要比前一次更多,所以在上图中这个栈帧被标为了红色。可以看出问题的原因是ZFS的压缩功能被启用了,而在系统升级前这项功能是关闭的。

这个例子过于简单,我甚至可以不用差分火焰图也能分析出来。但想象一下,如果是在分析一个微小的性能下降,比如说小于5%,而且代码也更加复杂的时候,问题就为那么好处理了。

红/蓝差分火焰图

这个事情我已经讨论了好几年了,最终我自己编写了一个我个人认为有价值的实现。它的工作原理是这样的:

  1. 抓取修改前的堆栈profile1文件
  2. 抓取修改后的堆栈profile2文件
  3. 使用profile2来生成火焰图。(这样栈帧的宽度就是以profile2文件为基准的)
  4. 使用“2 - 1”的差异来对火焰图重新上色。上色的原则是,如果栈帧在profile2中出现出现的次数更多,则标为红色,否则标为蓝色。色彩是根据修改前后的差异来填充的。

这样做的目的是,同时使用了修改前后的profile文件进行对比,在进行功能验证测试或者评估代码修改对性能的影响时,会非常有用。新的火焰图是基于修改后的profile文件生成(所以栈帧的宽度仍然显示了当前的CPU消耗),通过颜色的对比,就可以了解到系统性能差异的原因。

只有对性能产生直接影响的函数才会标注颜色(比如说,正在运行的函数),它所调用的子函数不会重复标注。

生成红/蓝差分火焰图

我已经把一个简单的代码实现推送到github上(见火焰图),其中新增了一个程序脚本,difffolded.pl。为了展示工具是如何工作的,用Linux perf\_events 来演示一下操作步骤。(你也可以使用其他profiler)

抓取修改前的profile 1文件:

# perf record -F 99 -a -g -- sleep 30
# perf script > out.stacks1

一段时间后 (或者程序代码修改后), 抓取profile 2文件:

# perf record -F 99 -a -g -- sleep 30
# perf script > out.stacks2

现在将 profile 文件进行折叠(fold), 再生成差分火焰图:

$ git clone --depth 1 http://github.com/brendangregg/FlameGraph
$ cd FlameGraph
$ ./stackcollapse-perf.pl ../out.stacks1 > out.folded1
$ ./stackcollapse-perf.pl ../out.stacks2 > out.folded2
$ ./difffolded.pl out.folded1 out.folded2 | ./flamegraph.pl > diff2.svg

difffolded.p只能对“折叠”过的堆栈profile文件进行操作,折叠操作是由前面的stackcollapse系列脚本完成的。(见链接火焰图)。 脚本共输出3列数据,其中一列代表折叠的调用栈,另两列为修改前后profile文件的统计数据。

func_a;func_b;func_c 31 33
[...]

在上面的例子中"funca()->funcb()->func\_c()" 代表调用栈,这个调用栈在profile1文件中共出现了31次,在profile2文件中共出现了33次。然后,使用flamegraph.pl脚本处理这3列数据,会自动生成一张红/蓝差分火焰图。

其他选项

再介绍一些有用的选项:

difffolded.pl -n:这个选项会把两个profile文件中的数据规范化,使其能相互匹配上。如果你不这样做,抓取到所有栈的统计值肯定会不相同,因为抓取的时间和CPU负载都不同。这样的话,看上去要么就是一片红(负载增加),要么就是一片蓝(负载下降)。-n选项对第一个profile文件进行了平衡,这样你就可以得到完整红/蓝图谱。

difffolded.pl -x: 这个选项会把16进制的地址删掉。 profiler时常会无法将地址转换为符号,这样的话栈里就会有16进制地址。如果这个地址在两个profile文件中不同,这两个栈就会认为是不同的栈,而实际上它们是相同的。遇到这样的问题就用-x选项搞定。

flamegraph.pl --negate: 用于颠倒红/蓝配色。 在下面的章节中,会用到这个功能。

不足之处

虽然我的红/蓝差分火焰图很有用,但实际上还是有一个问题:如果一个代码执行路径完全消失了,那么在火焰图中就找不到地方来标注蓝色。你只能看到当前的CPU使用情况,而不知道为什么会变成这样。

一个办法是,将对比顺序颠倒,画一个相反的差分火焰图。例如:

上面的火焰图是以修改前的profile文件为基准,颜色表达了将要发生的情况。右边使用蓝色高亮显示的部分,从中可以看出修改后CPU Idle消耗的CPU时间会变少。(其实,我通常会把cpuidle给过滤掉,使用命令行grep -v cpuidle)

图中把消失的代码也突显了出来(或者应该是说,没有突显),因为修改前并没有使能压缩功能,所以它没有出现在修改前的profile文件了,也就没有了被表为红色的部分。

下面是对应的命令行:

$ ./difffolded.pl out.folded2 out.folded1 | ./flamegraph.pl --negate > diff1.svg

这样,把前面生成diff2.svg一并使用,我们就能得到:

  • diff1.svg: 宽度是以修改前profile文件为基准,颜色表明将要发生的情况
  • diff2.svg: 宽度是以修改后profile文件为基准,颜色表明已经发生的情况

如果是在做功能验证测试,我会同时生成这两张图。

CPI 火焰图

这些脚本开始是被使用在CPI火焰图的分析上。与比较修改前后的profile文件不同,在分析CPI火焰图时,可以分析CPU工作周期与停顿周期的差异变化,这样可以凸显出CPU的工作状态来。

其他的差分火焰图

也有其他人做过类似的工作。Robert Mustacchi在不久前也做了一些尝试,他使用的方法类似于代码检视时的标色风格:只显示了差异的部分,红色表示新增(上升)的代码路径,蓝色表示删除(下降)的代码路径。一个关键的差别是栈帧的宽度只体现了差异的样本数。右边是一个例子。这个是个很好的主意,但在实际使用中会感觉有点奇怪,因为缺失了完整profile文件的上下文作为背景,这张图显得有些难以理解。

Cor-Paul Bezemer也制作了一种差分显示方法flamegraphdiff,他同时将3张火焰图放在同一张图中,修改前后的标准火焰图各一张,下面再补充了一张差分火焰图,但栈帧宽度也是差异的样本数。 上图是一个例子。在差分图中将鼠标移到栈帧上,3张图中同一栈帧都会被高亮显示。这种方法中补充了两张标准的火焰图,因此解决了上下文的问题。

我们3人的差分火焰图,都各有所长。三者可以结合起来使用:Cor-Paul方法中上方的两张图,可以用我的diff1.svg 和 diff2.svg。下方的火焰图可以用Robert的方式。为保持一致性,下方的火焰图可以用我的着色方式:蓝->白->红。

火焰图正在广泛传播中,现在很多公司都在使用它。如果大家知道有其他的实现差分火焰图的方式,我也不会感到惊讶。(请在评论中告诉我)

结论

如果你遇到了性能回退问题,红/蓝差分火焰图是找到根因的最快方式。这种方式抓取了两张普通的火焰图,然后进行对比,并对差异部分进行标色:红色表示上升,蓝色表示下降。 差分火焰图是以当前(“修改后”)的profile文件作为基准,形状和大小都保持不变。因此你通过色彩的差异就能够很直观的找到差异部分,且可以看出为什么会有这样的差异。

差分火焰图可以应用到项目的每日构建中,这样性能回退的问题就可以及时地被发现和修正。


via: http://www.brendangregg.com/blog/2014-11-09/differential-flame-graphs.html

作者:Brendan Gregg 译者:coloka 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

读者在读过我的安装Ubuntu和Windows 8双系统教程以后,碰到的主要的问题是电脑直接启动到Windows 8而没有出现启动Ubuntu的选项。

这里有两种修复EFI启动引导的方法,使Ubuntu可以正常启动

将GRUB2设置为启动引导

1. 启用GRUB引导

在安装时,有些地方可能会出问题。

理论上来说,如果你首先安装Ubuntu,那么你需要关闭快速启动

希望你按照这个指南创建一个UEFI Ubuntu 启动优盘安装正确的UEFI引导程序。

如果你在安装时已经完成了这些事情,那么可能出错的地方就是将GRUB2设置为启动管理器。

可以按照以下几个步骤将GRUB2设置为默认的引导程序:

  1. 登录Windows 8
  2. 转到桌面
  3. 右击开始按钮,选择管理员命令行
  4. 输入 mountvol g: /s (这将你的EFI目录结构映射到G盘)
  5. 输入 cd g:\EFI
  6. 当你输入 dir 列出文件夹内容时,你可以看到一个Ubuntu的文件夹
  7. 这里的参数可以是grubx64.efi或者shimx64.efi
  8. 运行下列命令将grub64.efi设置为启动引导程序: bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
  9. 重启你的电脑
  10. 你将会看到一个包含Ubuntu和Windows选项的GRUB菜单
  11. 如果你的电脑仍然直接启动到Windows,重复步骤1到7,但是这次输入: bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
  12. 重启你的电脑

这里你做的事情就是登录Windows管理员命令行,将EFI引导区映射到磁盘上,来查看Ubuntu的引导程序是否安装成功,然后选择grubx64.efi或者shimx64.efi作为引导程序。

那么grubx64.efi和shimx64.efi有什么区别呢?在安全启动(serureboot)关闭的情况下,你可以使用grubx64.efi。如果安全启动打开则需要选择shimx64.efi。

在我上面的步骤里面,我建议先试一个,然后再试试另外一个。另外一种方法是选择一个,然后根据你选择的引导程序在BIOS中启用或者禁用安全启动。

2.使用rEFInd引导Ubuntu和Windows双系统

rEFInd引导程序会以图标的方式列出你所有的操作系统。因此,你可以通过点击相应的图标来启动Windows、Ubuntu或者优盘中的操作系统。

点击这里下载rEFInd for Windows 8。

下载和解压以后,按照以下的步骤安装rEFInd。

  1. 返回桌面
  2. 右击开始按钮,选择管理员命令行
  3. 输入 mountvol g: /s (这将你的EFI目录结构映射到G盘)
  4. 进入解压的rEFInd目录。例如: cd c:\users\gary\downloads\refind-bin-0.8.4\refind-bin-0.8.4 。 当你输入 dir 命令,你可以看到一个refind目录
  5. 输入如下命令将refind拷贝到EFI引导区 xcopy /E refind g:\EFI\refind\
  6. 输入如下命令进入refind文件夹 cd g:\EFI\refind
  7. 重命名示例配置文件 rename refind.conf-sample refind.conf
  8. 运行如下命令将rEFind设置为引导程序 bcdedit /set {bootmgr} path \EFI\refind\refind\_x64.efi
  9. 重启你的电脑
  10. 你将会看到一个包含Ubuntu和Windows的图形菜单

这个过程和选择GRUB引导程序十分相似。

简单的说,主要是下载rEFind,解压文件。拷贝文件到EFI引导区,重命名配置文件,然后将rEFind设置为引导程序。

概要

希望这篇文章可以解决有些人在安装Ubuntu和Windows 8.1双系统时出现的问题。如果你仍然有问题,可以通过上面的电邮和我进行交流。


via: http://linux.about.com/od/LinuxNewbieDesktopGuide/tp/3-Ways-To-Fix-The-UEFI-Bootloader-When-Dual-Booting-Windows-And-Ubuntu.htm

作者:Gary Newell 译者:zhouj-sh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Gentoo(也许其他发行版也是?)中 "ntpq -p" 的 man page 只有简短的描述:“打印出该服务器已知的节点列表和它们的状态概要信息。

我还没见到关于这个命令的说明文档,因此这里对此作一个总结,可以补充进 "man ntpq" man page 中。更多的细节见这里 “ntpq – 标准 NTP 请求程序”(原作者),和 其他关于 man ntpq 的例子.

NTP 是一个设计用于通过 udp 网络 (WAN 或者 LAN) 来同步计算机时钟的协议。引用 Wikipedia – NTP

网络时间协议(英语:Network Time Protocol,NTP)一种协议和软件实现,用于通过使用有网络延迟的报文交换网络同步计算机系统间的时钟。最初由美国特拉华大学的 David L. Mills 设计,现在仍然由他和志愿者小组维护,它于 1985 年之前开始使用,是因特网中最老的协议之一。

想了解更多有关时间和 NTP 协议的知识,可以参考 “The NTP FAQ, Time, what Time?”和 RFCs for NTP。早期的“Network Time Protocol (Version 3) RFC” (txt, or pdf, Appendix E, The NTP Timescale and its Chronometry, p70) 包含了对过去 5000 年我们的计时系统的变化和关系的有趣解释。维基百科的文章 TimeCalendar 提供了更宏观的视角。

命令 "ntpq -q" 输出下面这样的一个表:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        .LOCL.          10 l  96h   64    0    0.000    0.000   0.000
*ns2.example.com 10.193.2.20      2 u  936 1024  377   31.234    3.353   3.096

更多细节

表头

  • remote – 用于同步的远程节点或服务器。“LOCAL”表示本机 (当没有远程服务器可用时会出现)
  • refid – 远程的服务器进行同步的更高一级服务器
  • st – 远程节点或服务器的 Stratum(级别,NTP 时间同步是分层的)
  • t – 类型 (u: unicast(单播)manycast(选播) 客户端, b: broadcast(广播)multicast(多播) 客户端, l: 本地时钟, s: 对称节点(用于备份), A: 选播服务器, B: 广播服务器, M: 多播服务器, 参见“Automatic Server Discovery“)
  • when – 最后一次同步到现在的时间 (默认单位为秒, “h”表示小时,“d”表示天)
  • poll – 同步的频率:rfc5905建议在 NTPv4 中这个值的范围在 4 (16秒) 至 17 (36小时) 之间(即2的指数次秒),然而观察发现这个值的实际大小在一个小的多的范围内 :64 (2 6 )秒 至 1024 (2 10 )秒
  • reach – 一个8位的左移移位寄存器值,用来测试能否和服务器连接,每成功连接一次它的值就会增加,以 8 进制显示
  • delay – 从本地到远程节点或服务器通信的往返时间(毫秒)
  • offset – 主机与远程节点或服务器时间源的时间偏移量,offset 越接近于0,主机和 NTP 服务器的时间越接近(以方均根表示,单位为毫秒)
  • jitter – 与远程节点同步的时间源的平均偏差(多个时间样本中的 offset 的偏差,单位是毫秒),这个数值的绝对值越小,主机的时间就越精确

字段的统计代码

表中第一个字符(统计代码)是状态标识(参见 Peer Status Word),包含 " ","x","-","#","+","*","o":

  • " " – 无状态,表示:

    • 没有远程通信的主机
    • "LOCAL" 即本机
    • (未被使用的)高层级服务器
    • 远程主机使用的这台机器作为同步服务器
  • x” – 已不再使用
  • -” – 已不再使用
  • #” – 良好的远程节点或服务器但是未被使用 (不在按同步距离排序的前六个节点中,作为备用节点使用)
  • +” – 良好的且优先使用的远程节点或服务器(包含在组合算法中)
  • “*” – 当前作为优先主同步对象的远程节点或服务器
  • o” – PPS 节点 (当优先节点是有效时)。实际的系统同步是源于秒脉冲信号(pulse-per-second,PPS),可能通过PPS 时钟驱动或者通过内核接口。

参考 Clock Select Algorithm.

refid

refid 有下面这些状态值

  • 一个IP地址 – 远程节点或服务器的 IP 地址
  • .LOCL. – 本机 (当没有远程节点或服务器可用时)
  • .PPS. – 时间标准中的“Pulse Per Second”(秒脉冲)
  • .IRIG.Inter-Range Instrumentation Group 时间码
  • .ACTS. – 美国 NIST 标准时间 电话调制器
  • .NIST. –美国 NIST 标准时间电话调制器
  • .PTB. – 德国 PTB 时间标准电话调制器
  • .USNO. – 美国 USNO 标准时间 电话调制器
  • .CHU.CHU (HF, Ottawa, ON, Canada) 标准时间无线电接收器
  • .DCFa.DCF77 (LF, Mainflingen, Germany) 标准时间无线电接收器
  • .HBG.HBG (LF Prangins, Switzerland) 标准时间无线电接收器
  • .JJY.JJY (LF Fukushima, Japan) 标准时间无线电接收器
  • .LORC.LORAN-C station (MF) 标准时间无线电接收器,注: 不再可用 (被 eLORAN 废弃)
  • .MSF.MSF (LF, Anthorn, Great Britain) 标准时间无线电接收器
  • .TDF.TDF (MF, Allouis, France)标准时间无线电接收器
  • .WWV.WWV (HF, Ft. Collins, CO, America) 标准时间无线电接收器
  • .WWVB.WWVB (LF, Ft. Collins, CO, America) 标准时间无线电接收器
  • .WWVH.WWVH (HF, Kauai, HI, America) 标准时间无线电接收器
  • .GOES. – 美国静止环境观测卫星;
  • .GPS. – 美国 GPS;
  • .GAL.伽利略定位系统欧洲 GNSS;
  • .ACST. – 选播服务器
  • .AUTH. – 认证错误
  • .AUTO. – Autokey (NTP 的一种认证机制)顺序错误
  • .BCST. – 广播服务器
  • .CRYPT. – Autokey 协议错误
  • .DENY. – 服务器拒绝访问;
  • .INIT. – 关联初始化
  • .MCST. – 多播服务器
  • .RATE. – (轮询) 速率超出限定
  • .TIME. – 关联超时
  • .STEP. – 间隔时长改变,偏移量比危险阈值小(1000ms) 比间隔时间 (125ms)大

操作要点

一个时间服务器只会报告时间信息而不会从客户端更新时间(单向更新),而一个节点可以更新其他同级节点的时间,结合出一个彼此同意的时间(双向更新)。

初次启动时:

除非使用 iburst 选项,客户端通常需要花几分钟来和服务器同步。如果客户端在启动时时间与 NTP 服务器的时间差大于 1000 秒,守护进程会退出并在系统日志中记录,让操作者手动设置时间差小于 1000 秒后再重新启动。如果时间差小于 1000 秒,但是大于 128 秒,会自动矫正间隔,并自动重启守护进程。

当第一次启动时,时间频率文件(通常是 ntp.drift 文件,记录时间偏移)不存在,守护进程进入一个特殊模式来矫正频率。当时钟不符合规范时这会需要 900 秒。当校正完成后,守护进程创建时间频率文件进入普通模式,并分步校正剩余的偏差。

NTP 0 层(Stratum 0 )的设备如原子钟(铯,铷),GPS 时钟或者其他标准时间的无线电时钟为 1 层(Stratum 1)的时间服务器提供时间信号。NTP 只报告UTC 时间(统一协调时,Coordinated Universal Time)。客户端程序使用时区从 UTC 导出本地时间。

NTP 协议是高精度的,使用的精度小于纳秒(2的 -32 次方)。主机的时间精度和其他参数(受硬件和操作系统限制)使用命令 “ntpq -c rl” 查看(参见 rfc1305 通用变量和 rfc5905)。

“ntpq -c rl”输出参数

  • precision 为四舍五入值,且为 2 的幂数。因此精度为 2 precision (秒)
  • rootdelay – 与同步网络中主同步服务器的总往返延时。注意这个值可以是正数或者负数,取决于时钟的精度。
  • rootdisp – 相对于同步网络中主同步服务器的偏差(秒)
  • tc – NTP 算法 PLL (phase locked loop,锁相环路) 或 FLL (frequency locked loop,锁频回路) 时间常量
  • mintc – NTP 算法 PLL/FLL 最小时间常亮或“最快响应
  • offset – 由结合算法得出的系统时钟偏移量(毫秒)
  • frequency – 系统时钟频率
  • sys\_jitter – 由结合算法得出的系统时钟平均偏差(毫秒)
  • clk\_jitter – 硬件时钟平均偏差(毫秒)
  • clk\_wander – 硬件时钟偏移(PPM – 百分之一)

Jitter (也叫 timing jitter) 表示短期变化大于10HZ 的频率, wander 表示长期变化大于10HZ 的频率 (Stability 表示系统的频率随时间的变化,和 aging, drift, trends 等是同义词)

操作要点(续)

NTP 软件维护一系列连续更新的频率变化的校正值。对于设置正确的稳定系统,在非拥塞的网络中,现代硬件的 NTP 时钟同步通常与 UTC 标准时间相差在毫秒内。(在千兆 LAN 网络中可以达到何种精度?)

对于 UTC 时间,闰秒 leap second 可以每两年插入一次用于同步地球自传的变化。注意本地时间为夏令时时时间会有一小时的变化。在重同步之前客户端设备会使用独立的 UTC 时间,除非客户端使用了偏移校准。

闰秒发生时会怎样

闰秒发生时,会对当天时间增加或减少一秒。闰秒的调整在 UTC 时间当天的最后一秒。如果增加一秒,UTC 时间会出现 23:59:60。即 23:59:59 到 0:00:00 之间实际上需要 2 秒钟。如果减少一秒,时间会从 23:59:58 跳至 0:00:00 。另见 The Kernel Discipline.

那么… 间隔阈值(step threshold)的真实值是多少: 125ms 还是 128ms? PLL/FLL tc 的单位是什么 (log2 s? ms?)?在非拥塞的千兆 LAN 中时间节点间的精度能达到多少?

感谢 Camilo M 和 Chris B的评论。 欢迎校正错误和更多细节的探讨。

谢谢 Martin

附录

另见

其他

SNTP (Simple Network Time Protocol, RFC 4330,简单网络协议)基本上也是NTP,但是少了一些基于 RFC 1305 实现的 NTP 的一些不再需要的内部算法。

Win32 时间 Windows Time Service 是 SNTP 的非标准实现,没有精度的保证,并假设精度几乎有 1-2 秒的范围。(因为没有系统时间变化校正)

还有一个PTP (IEEE 1588) Precision Time Protocol(精准时间协议)。见维基百科:Precision Time Protocol。软件程序为 PTPd。虫咬的功能是这是一个 LAN 高精度主从同步系统,精度在毫秒级,使用 International Atomic Time (TAI, monotonic,无闰秒)。数据报时间戳需要在网卡中启用。支持 PTP 的网络会对数据报记录时间戳以减少交换机路由器的影响。也可以在不记录时间戳的网络中使用 PTP 但可能应为时间偏差太大而无法同步。因此使用这个需要对网络进行设置。

更老的时间同步协议


via: http://nlug.ml1.co.uk/2012/01/ntpq-p-output/831

作者:Martin L 译者:Liao 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:在桌面版Ubuntu中,我经常遇到一些弹窗窗口,警告我Ubuntu发生了内部错误,问我要不要发送错误报告。每次软件崩溃都要烦扰我,我如何才能关掉这个错误报告功能呢?

Ubuntu桌面版预装了Apport,它是一个错误收集系统,会收集软件崩溃、未处理异常和其他,包括程序bug,并为调试目的生成崩溃报告。当一个应用程序崩溃或者出现Bug时候,Apport就会通过弹窗警告用户并且询问用户是否提交崩溃报告。你也许也看到过下面的消息。

  • "Sorry, the application XXXX has closed unexpectedly."
  • "对不起,应用程序XXXX意外关闭了。"
  • "Sorry, Ubuntu XX.XX has experienced an internal error."
  • "对不起,Ubuntu XX.XX 发生了一个内部错误。"
  • "System program problem detected."
  • "检测到系统程序问题。"

也许因为应用一直崩溃,频繁的错误报告会使人心烦。也许你担心Apport会收集和上传你的Ubuntu系统的敏感信息。无论什么原因,你想关掉Apport的错误报告功能。

临时关闭Apport错误报告

如果你想要临时关闭Apport,使用下列命令

$ sudo service apport stop 

注意重启Ubuntu系统Apport会继续开启

永久关闭Apport错误报告

为了永久关闭Apport,编辑/etc/default/apport,修改下列参数

enabled=0

重启你的Ubuntu系统,Apport将会自动关闭

如果你再也不会用Apport,有一种简单的方法完全移除它

$ sudo apt-get purge apport 

via: http://ask.xmodulo.com/disable-apport-internal-error-reporting-ubuntu.html

译者:VicYu/Vic020 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

2014年已经过去,现在正是盘点2014年Linux大事件的时候。整整一年,我们关注了有关Linux和开源的一些好事,坏事和丑事。让我们来快速回顾一下2014对于Linux是怎样的一年。

好事

首先,让我们来看看在2014年对于Linux爱好者发生了什么有积极意义的事。

Linux上的Netflix

从使用Wine到使用Chrome的测试功能,为了能让Netflix能在Linux上工作,Linux用户曾尝试了各种方法。好消息是Netflix终于在2014年带来了Linux的本地支持。这让所有能使用Netflix的地区的Linux用户的脸上浮现出了微笑。不过,想在美国以外的地区使用Netflix(或其他官方授权使用Netflix的国家之外)的人还是得靠其他的方法。

欧洲国家采用开源/Linux

如果你愿意的话,你可以归功于经济滑坡,但是Linux和开源的采用已经俘虏了欧洲各大城市。我说的可不是个人用户,而是政府和各个官方机构。一整年我们都在听到这样的消息:法国意大利各大城市如何通过改用Linux和开源办公软件节省了数百万欧元。而且这个趋势并没有仅限于意大利和法国,在西班牙、瑞士德国也能见到。

Windows 10从Linux获得灵感

即将发行的微软的旗舰操作系统Windows,将被称为Windows 10(没有Windows 9)。并且Windows 10将拥有一大堆的新特性。但是这些“新特性”只在微软的世界里是新的,而且大多是这些新特性已经在Linux的世界里存在了数年。看看这些Windows 10从Linux复制的特性

坏事

Linux在2014年并不是一帆风顺。某些事件的发生败坏了Linux/开源的形象。

Heartbleed 心血漏洞

在今年的四月份,检测到OpenSSL有一个缺陷。这个漏洞被命名为Heartbleed心血漏洞。他影响了包括Facebook和Google在内的50多万个“安全”网站。这项漏洞可以真正的允许任何人读取系统的内存,并能因此给予用于加密数据流的密匙的访问权限。xkcd上的漫画以更简单的方式解释了心血漏洞。自然,这个漏洞在OpenSSL的更新中被修复了。

Shellshock 破壳漏洞

好像有个心血漏洞还不够似的,在Bash里的一个缺陷更严重的震撼了Linux世界。这个漏洞被命名为Shellshock 破壳漏洞。这个漏洞把Linux往远程攻击的危险深渊又推了一把。这项漏洞是通过黑客的DDoS攻击暴露出来的。升级一下Bash版本应该能修复这个问题。

Ubuntu Phone和Steam控制台

一个又一个的承诺,一次又一次的期望。但是即使在2014年也没人看见Ubuntu Phone或是Steam游戏控制台。围绕Ubuntu Phone产生了很多激烈的讨论。从2014年二月发行推到九月又推到十二月,(谢天谢地)终于有可能在2015年二月发行。但是Steam控制台还是没有消息。想了解更多请读Ubuntu Phone说明书,价格和发行日期

丑事

是否采用 systemd 的争论变得让人羞耻。

systemd大论战

用init还是systemd的争吵已经进行了一段时间了。但是在2014年当systemd准备在包括Debian, Ubuntu, OpenSUSE, Arch Linux 和 Fedora几个主流Linux分布中替代init时,事情变得不知廉耻了起来。它是如此的一发不可收拾,以至于它已经不限于boycottsystemd.org这类网站了。Lennart Poettering(systemd的首席开发人员及作者)在一条Google Plus状态上声明,说那些反对systemd的人在“收集比特币来雇杀手杀他”。Lennart还声称开源社区“是个恶心得不能待的地方”。人们吵得越来越离谱以至于把Debian分裂成了一个新的操作系统,称为Devuan

还有诡异的事

伴随着好事、坏事和丑事而来得是诡异的事,而且没谁能比微软更诡异。

微软爱Linux

是的,你没看错。微软爱Linux。同为微软CEO,Steve Ballmer曾说Linux是毒瘤。当新CEO,Satya Nadella宣称微软爱Linux时,我们透过微软向Linux和开源的靠近,看到了领导层的改变。这份对Linux的爱实际上是微软试图让Azure成为更好的云平台。为了达成这项目标,需要虚拟化Hyper-V(Azure核心),以便同Linux一起运行。这个绝境让微软成为Linux内核的第五大贡献者


via: http://itsfoss.com/biggest-linux-stories-2014/

作者:Abhishek 译者:H-mudcup 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux用户不了解一点开源硬件制造相关的事情,他们就会经常陷入失望的情绪中。

商业软件和自由软件已经互相纠缠很多年了,但是这俩经常误解对方。这并不奇怪 -- 对一方来说是生意,而另一方只是一种生活方式。但是,这种误解会给人带来痛苦,这也是为什么值得花精力去揭露这里面的内幕。

一个逐渐普遍的现象:对开源硬件的不断尝试,不管是Canonical,Jolla,MakePlayLive,或者其他公司。无论是评论员或是终端用户,通常自由软件用户都会为新的硬件平台发布表现出过分的狂热,然后因为不断延期有所醒悟,直到最终放弃整个产品。

这是一个没有人获益的怪圈,而且常常滋生出不信任 - 都是因为一般的Linux用户根本不知道这些新闻背后发生的事情。

我个人对于把产品推向市场的经验很有限。但是,我还没听说谁能有所突破。推出一个开源硬件或其他产品到市场仍然不仅仅是个残酷的生意,而且严重不利于新进厂商。

寻找合作伙伴

不管是数码产品的生产还是分销都被相对较少的一些公司控制着,有时需要数月的预订。利润率也会很低,所以就像那些购买古老情景喜剧的电影工作室一样,生产商一般也希望复制当前热销产品的成功。像Aaron Seigo在谈到他花精力开发Vivaldi平板时告诉我的,生产商更希望能由其他人去承担开发新产品的风险。

不仅如此,他们更希望和那些有现成销售记录的有可能带来长期客户生意的人合作。

而且,一般新加入的厂商所关心的产品只有几千的量。芯片制造商更愿意和苹果或三星这样的公司合作,因为它们的订单很可能是几十上百万的量。

面对这种情形,开源硬件制造者们可能会发现他们在工厂的列表中被淹没了,除非能找到二线或三线厂愿意尝试一下小批量生产新产品。

他们也许还会沦为采购成品组件再自己组装,就像Seigo尝试Vivaldi时那样做的。或者,他们也许可以像Canonical那样做,寻找一些愿意为这个产业冒险的合作伙伴。而就算他们成功了,一般也会比最初天真的预期延迟数个月。

磕磕碰碰走向市场

然而,寻找生产商只是第一关。根据树莓派项目的经验,就算开源硬件制造者们只想在他们的产品上运行自由软件,生产商们很可能会以保护商业机密的名义坚持使用专有固件或驱动。

这样必然会引起潜在用户的批评,但是开源硬件制造者没得选,只能折中他们的愿景。寻找其他生产商也不能解决问题,有一个原因是这样做意味着更多延迟,但是更多的是因为完全免授权费的硬件是不存在的。像三星这样的业内巨头对免费硬件没有任何兴趣,而作为新人,开源硬件制造者也没有影响力去要求什么。

更何况,就算有免费硬件,生产商也不能保证会用在下一批生产中。制造者们会轻易地发现他们每次需要生产的时候都要重打一次一模一样的仗。

这些都还不够,这个时候开源硬件制造者们也许已经花了6-12个月时间来讨价还价。等机会终于来了,产业标准却已经变更,于是他们可能为了升级产品规格又要从头来过。

短暂而且残忍的货架期

尽管面对这么多困难,一定程度上开放的硬件也终于推出了。还记得寻找生产商时的挑战吗?对于分销商也会有同样的问题 -- 还不只是一次,而是每个地区都要解决。

通常,分销商和生成商一样保守,对于和新人或新点子打交道也很谨慎。就算他们同意一个产品上架,他们也轻易能够决定不鼓励自己的销售代表们做推广,这意味着这个产品会在几个月后很有效率地下架。

当然,在线销售也是可以的。但是同时,硬件还是需要被存放在某个地方,这也会增加成本。而按需生产就算可能的话也将非常昂贵,而且没有组装的元件也需要存放。

衡量整件怪事

在这里我只是粗略地概括了一下,但是任何涉足过制造的人会认同我形容为行业标准的东西。而更糟糕的是,开源硬件制造者们通常只有在亲身经历过后才会有所觉悟。不可避免,他们也会犯错,从而带来更多的延迟。

但重点是,一旦你对整个过程有所了解,你对另一个开源硬件进行尝试的新闻的反应就会改变。这个过程意味着,除非哪家公司处于严格的保密模式,对于产品将于六个月内发布的声明会很快会被证实是过期的推测。很可能是12-18个月,而且面对之前提过的那些困难很可能意味着这个产品永远都不会真正发布。

举个例子,就像我写的,人们等待第一代Steam Machines面世,它是一台基于Linux的游戏主机。他们相信Steam Machines能彻底改变Linux和游戏。

作为一个市场分类,Steam Machines也许比其他新产品更有优势,因为参与开发的人员至少有开发软件产品的经验。然而,整整一年过去了Steam Machines的开发成果都还只有原型机,而且直到2015年中都不一定能买到。面对硬件生产的实际情况,就算有一半能见到阳光都是很幸运了。而实际上,能发布2-4台也许更实际。

我做出这个预测并没有考虑个体努力。但是,对硬件生产的理解,比起那些Linux和游戏的黄金年代之类的预言,我估计这个更靠谱。如果我错了也会很开心,但是事实不会改变:让人吃惊的不是如此多的Linux相关硬件产品失败了,而是那些虽然短暂但却成功的产品。

注:本文翻译和校对时,误将“free software”翻译成了“免费软件”,得 @比尔盖子V 的指正,应该翻译为“自由软件”。有关“免费软件”和“自由软件”的辨析,可以参考如下:

自由软件的英文为“free software”。“free”在英文中有“自由”(freedom)、“免费”(free of charge)的双重含义,因此![]()自由软件要如何分辨“自由软件”(free software)和“免费软件”(freeware)呢?

自由软件运动的创始人——理查德·斯托曼提供了以下的定义:

“free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”,中文译文:自由软件的重点在于自由权,而非价格。要了解其所代表的概念:你应该将“free”想成是“free spech”(言论自由)中的“free”(自由),而不是“free beer”(免费啤酒)中的“free”(免费)。

更精确的说,自由软件代表电脑使用者拥有选择和任何人合作之自由、拥有掌控他们所用的软件之自由。在GNU宣言(GNU Manifesto)中包含了斯托曼在一开始对自由软件使用定义的混淆。——来自百度百科


via: http://www.datamation.com/open-source/what-linux-users-should-know-about-open-hardware-1.html

作者:Bruce Byfield 译者:zpl1025 校对:Mr小眼儿

本文由 LCTT 原创翻译,Linux中国 荣誉推出