Dark Side cat /dev/brain

Linux I/O Stack Diagram

Brendan Gregg 在他的 Linux Performance Tools 中给出了分析 Linux 性能问题的工具集图并在上述链接中维持更新。

Linux Performance Tools

图中基本涵盖了常见问题的常用分析工具。与 IO 相关的性能分析由于明显的瓶颈点和各种复杂的关系(cache、buffer、io scheduler 等等)是各种数据处理类应用的重中之重。

Thomas Krenn Wiki 发布了基于3.17版内核的 Linux I/O Stack Diagram,在进行 IO 性能分析时非常有参考价值。

Linux I/O Stack Diagram v3.17

阅读全文

UTF-8 & BOM

What’s BOM(Byte-Order Mark)

引自Wikipedia中文版):

The byte order mark (BOM) is a Unicode character used to signal the endianness (byte order) of a text file or stream. It is encoded at U+FEFF byte order mark (BOM). BOM use is optional, and, if used, should appear at the start of the text stream. Beyond its specific use as a byte-order indicator, the BOM character may also indicate which of the several Unicode representations the text is encoded in.

[Wikipedia](http://en.wikipedia.org/wiki/Byte_order_mark)

常用编码中,有 BOM 标识的如下表:

Encoding Representation Bytes as CP1252 characters Notes
UTF-8 EF BB BF  UTF-8 实际上不存在字节序问题,因此通常不使用 BOM
UTF-16 (BE) FE FF þÿ  
UTF-16 (LE) FF FE ÿþ  
UTF-32 (BE) 00 00 FE FF <00><00>þÿ <00> refers to the ASCII null character
UTF-32 (LE) FF FE 00 00 ÿþ<00><00> <00> refers to the ASCII null character
GB18030 84 31 95 33 „1•3 GB18030 实际上不存在字节序问题,因此通常不使用 BOM

其中:

  • UTF-16 和 UTF-32 的BOM 标识暂时没有发现无法正常处理的应用程序
  • GB18030 的 BOM 标识非常罕见,需要注意的是 iconv 和 libiconv 处理行为与 UTF-8 BOM 类似,请参考“ICONV PROBLEM
阅读全文

中文编码问题

由于许多环境使用GBK(Microsoft CP936,非GB13000.1)作为主要的汉字编码环境,并且GBK、GB18030在编码实现上的奇葩之处,造成GBK <-> UTF-8转换存在许多问题。

这里主要讨论以下几种:

  1. 哪些字符造成编码识别错误。
  2. 由于编码识别错误造成的无损转换:只是显示错误,不造成内容丢失。
  3. 由于编码识别错误造成的有损转换:显示错误,且内容丢失。
阅读全文

dmesg error code 的含义

dmesg 里报出来的最后一个 error 的意思是:

BIT位 0 1
0 no page found protection fault
1 read write
2 kernel user-mode
3 NULL fault was an instruction fetch

dmesg 的错误号就是这四个位的组合,例如:

segfault at 0000000000000010 rip 000000552aaaf8ac rsp 0000000041408a80 error 6

0 1 1 0
NULL user-mode write no page found

是指用户空间写 page 时 page not found

阅读全文

使用graphviz画图

之前一直是使用 Dia 画流程图的,从功能性来说,跟 visio 应该差不多(好吧,我坦白我只看别人用过 visio )。但是画一张图的大部分时间都被用在调整组件的位置上,如果图片比较复杂的话,花费的时间会非常夸张。之前尝试过一段时间 TeX,觉得 WYTIWYG 的方式更适合一些,所以尝试使用 Graphviz。

阅读全文