Posts tagged Linux

Tips of Linux C programming

11

1. 优雅地使用链表

        链表是编程中经常要用到的数据结构,结构体描述时分为数据域和指针域,本没有什么好讲。但有没有想过教科书上的这种方式有什么问题?通过这种方式定义和使用链表,对于不同的链表类型,都要定义各自的链表结构,繁琐的很。linux kernel中链表的用法才应该是教科书中出现的。
        基本思想:在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。
1) 链表定义:
struct list_head {
    struct list_head *next, *prev;
};
#define LIST_HEAD_INIT(name) { &(name), &(name) }

2) 链表使用者定义:
(更多…)

Linux下pstack的实现

3

Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。
Linux下这个工具叫做pstack. 使用方法是

# pstack
Usage: pstack

当然这个被调查的程序需要有符号信息。 比较雷人的是 这个程序竟然是个shell脚本,核心实现是gdb的 thread apply all bt, 我们可以观摩下他的实现,这个我们做类似的程序提供了一个很好的思路:
(更多…)

Oprofile 系统层面的性能微调工具

1

ECUG2010分享:C1000K高性能服务器构架技术

0

(更多…)

CPU拓扑结构的调查

1

在做多核程序的时候(比如Erlang程序),我们需要了解cpu的拓扑结构, 了解logic CPU和物理的CPU的映射关系,以及了解CPU的内部的硬件参数,比如说
L1,L2 cache的大小等信息。

Linux下的/proc/cpuinfo提供了相应的信息,但是比较不全面。 /sys/devices/system/cpu/也提供了topology结构但是比较难解读。

很多时候我们需要更专业的工具了。intel提供了这样的救助。参见: http://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/

下载下来编译执行就好。

[admin@my174 cpu-topology]$ ./cpu_topology64.out
(更多…)

使用sendfile

6

后来诞生了sendfile,sendfile会直接将sK_buffer指向文件在内存中的cache,这样就节省了一次拷贝。

这里有个注意事项:sendfile不适合频繁改动的文件。假如你调用了一次sendfile,sk_buffer指向文件的某块cache,然后被放入队列;接着,你改动了文件的内容,那么排在发送队列里的那个sk_buffer指向的cache内容就变化了!那发出去的消息就是你改动后的数据。在不知道sk_buffer是否已发往网络的情况下,一边改动文件一边调用sendfile会造成发送出去的内容不确定。所以,sendfile更适合用在静态文件的场合。
当然,如果有个办法能查询sk_buffer是否真的发送出去了(而不是呆在发送队列里),那么“改一次文件内容,调一次sendfile;再改一次文件内容,再调一次sendfile”也是一个不错的节省拷贝时间的发送策略

夸父超时问题跟踪

7

夸父是我们的消息中间件,使用时需要在每个通信的机器上启一个daemon(kfc),负责转发。我们还为夸父开发了php接口(尽管我并不看好php,但它毕竟是前端的常用语言)。

在处理业务部门反馈的问题时,发现一个奇特的现象:php程序通过夸父收发消息,设置是3ms超时,运行正常,没有超时的消息;但如果在php里加一个循 环(加循环的位置与对夸父的调用无关),超时出现了。php自己傻循环怎么会影响夸父消息的response time呢?

(更多…)

一起oom-killer故障的定位处理

1

oom-killer是linux的一层内存保护机制,它会在系统内存不足的情况下杀掉一些进程。据文档说,2.4 的kernel版本中是把新进来(新申请内存)的进程杀掉,而 2.6 上是杀掉占用内存最厉害的进程。

今天早上检查TFS 1.3集群的时候, (更多…)

tbnet的结构及其使用 1简单用法

2

tbnet是我们开发的网络程序的基础库,学会使用tbnet,以及了解tbnet的原理,对我们在开发中减少工作量和调试程序都很有用.这个小东东是读 tbnet代码的一些笔记,帮助刚开始学习tbnet使用的人快速入门. 先看几段我从tair里摘出来的代码. 大致了解一下使用的过程.
(更多…)

tbnet的结构及其使用 2 结构小析

5

下面我们来看tbnet的结构, 分别说一下下面几个概念:
channel connection component packet transport.
从我们熟悉的入手,先看transport.它是一个传输层, (更多…)

Go to Top