随笔分类 -  Linux

Linux Kernel
摘要:前言: NAPI 是 Linux 上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据,(类似于底半(bottom-half)处理模式);从我们在实验中所得到的数据来看,在随着网络的接收速度的增加,NIC 触发的中断能做到不断减少,目前 NAPI 技术已经在网卡驱动层和网络层得到了广泛的应用,驱动... 阅读全文
posted @ 2011-04-14 09:30 napoleon_liu 阅读(835) 评论(0) 推荐(0)
摘要:多读多写下,先进后出队列,可以不加锁,下面是实现代码 lifo.h#include "cas.h" #include <stddef.h>struct lifo_node { volatile struct lifo_node *next; };struct lifo { void init() { top = NULL; cnt=0; } void push(lifo_node *node) { struct lifo old_val, new_val; do { old_val = *this; node->next = old_val.top; ne 阅读全文
posted @ 2011-04-06 10:25 napoleon_liu 阅读(2370) 评论(0) 推荐(0)
摘要:脚本名: gen_include_path_for_vim.sh#!/bin/bash include_path=$(make --just-print $*\ | sed -n -e '/^g++/p' | sed -n -e "1p" \ | awk 'BEGIN{RS=" "; ORS="\n"} { print $0; }' \ | sed -n -r -e '/^-I/{s/^-I//;p}' | awk -vORS="," '{print $0;} 阅读全文
posted @ 2011-03-30 11:22 napoleon_liu 阅读(870) 评论(0) 推荐(0)
摘要:使用TCP_DEFER_ACCEPT可以减少用户程序hold的连接数,也可以减少用户调用epoll_ctl和epoll_wait的次数,从而提高了程序的性能。 设置listen套接字的TCP_DEFER_ACCEPT选项后, 只当一个链接有数据时是才会从accpet中返回(而不是三次握手完成)。 使用方法: #include <netinet/tcp.h> int timeout=1; sets... 阅读全文
posted @ 2011-02-24 19:56 napoleon_liu 阅读(3065) 评论(0) 推荐(0)
摘要:This tutorial will show you how to manually rebuild a backtrace with GDB on x86 using the stack frame pointer and current instruction pointer. Consider the following gdb backtrace: It's pretty clear t... 阅读全文
posted @ 2011-02-14 14:04 napoleon_liu 阅读(1615) 评论(0) 推荐(0)
摘要:以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞。由此引发的安全问题比比皆是。早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序的溢出漏洞,写了一段恶意程序并传播到其他机器上,结果造成 6000 台 Internet 上的服务器瘫痪,占当时总数的 10%。各种操作系统上出现的溢出漏洞也数不胜数。为了尽可能避免缓冲区溢出漏洞被攻... 阅读全文
posted @ 2011-02-14 00:59 napoleon_liu 阅读(12719) 评论(1) 推荐(3)
摘要:转自:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。 nohup/setsid/& 场景: 如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢? hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通 阅读全文
posted @ 2011-01-30 10:31 napoleon_liu 阅读(393) 评论(0) 推荐(0)
摘要:简介 ctags − Generate tag files for source code ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags, python的 ptags). ctags 生成的 tags文件可用于 vi 来做代码导航和 vi的onmicppcomplete 插件来做代码补全。 ctags -e生成的 TAGS文件可以用于 emacs. 技巧 最简单使用是 : ctags –R . -R 表示递归子目录, 这个命令的意思就是为 当前目录下和其子目录下的文件建立索引( 索引只包 阅读全文
posted @ 2011-01-23 23:33 napoleon_liu 阅读(16034) 评论(0) 推荐(2)
摘要:一、影响Linux服务器性能的因素1. 操作系统级Ø CPU Ø 内存Ø 磁盘I/O带宽Ø 网络I/O带宽2. 程序应用级二、系统性能评估标准影响性能因素评判标准好坏糟糕CPUuser% + sys% 70%user% + sys%= 85%user% + sys% =90% 内存Swap In(si)=0Swap Out(so)=0Per CPU with 10 page/sMore Swap In & Swap Out磁盘iowait % 20%iowait % =35%iowait % = 50% 其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU 阅读全文
posted @ 2011-01-11 19:27 napoleon_liu 阅读(1120) 评论(0) 推荐(1)
摘要:命令行处理和 gperf 的作用 命令行处理一直以来都是软件开发中最容易被忽视的领域。几乎所有比较复杂的软件都具有一些可用的命令行选项。事实上,大量 if-else 语句经常被用来处理用户输入,因此维护这种遗留代码相当费时,对资深程序员亦是如此。这种情形下,很多 C 开发人员通常使用冗长(通常都嵌套使用)的 if-else 语句,以及 ANSI C 库函数,例如 strcmp、strcasecm... 阅读全文
posted @ 2010-12-27 11:12 napoleon_liu 阅读(1883) 评论(3) 推荐(0)
摘要:这个FOREACH使用了GCC的扩展特性typeof和({}),所以只保证能在linux下玩哦。 源程序 foreach.h #ifndef _MACRO_FOREACH_H_#define _MACRO_FOREACH_H_#define FOREACH_USE_ITERATOR(each_var, it_begin, it_end) \ if(int is_break_used_for_fo... 阅读全文
posted @ 2010-11-20 01:57 napoleon_liu 阅读(2522) 评论(3) 推荐(3)
摘要:调用级超时 阻塞IO的超时使用alert信号,可以打断所有的系统调用,包括socket io; recv, send 还可以设置socket 选项(SO_RCVTIMEO, SO_SNDTIMEO )来实现超时;connect 调用系统本身提供了75秒的超时。非阻塞模拟: select 一个socket 来模拟阻塞操作。 为什么要这样做的呢? [多线程处理alert信号比较麻烦(信号是进程全局共享... 阅读全文
posted @ 2010-08-02 18:02 napoleon_liu 阅读(1376) 评论(0) 推荐(1)
摘要:epoll有 ET和LT两种模式, 默认是LT模式。LT模式的时候,epoll_wait 会把有事件的 file 再次加到 rdllist 列表中,以便下次epoll_wait可以再检查一遍。 if (epi->event.events & EPOLLONESHOT) epi->event.events &= EP_PRIVATE_BITS; else if (!(ep... 阅读全文
posted @ 2010-07-20 17:59 napoleon_liu 阅读(4480) 评论(1) 推荐(2)
摘要:libevent支持很多系统,因本人是做Linux后台的,故只看了epoll部分。 eventops 数组用来实现devpoll, kqueue, epoll, poll, select 实现的选择。 event_base * current_base; libevent 主要控制结构。 event_base 分3个队列 EVLIST_INSERTED, EVLIST_ACTIVE, EVL... 阅读全文
posted @ 2010-06-12 20:24 napoleon_liu 阅读(7623) 评论(0) 推荐(1)
摘要:位操作 status |=  flags  /*设置标记*/ status &= ~flags /*清除标记*/ status & flags    /*判断标记*/   循环: do {} while(0) 方便从代码中退出( break; 不需要使用 goto) for(;;)  死循环; &... 阅读全文
posted @ 2010-01-14 15:16 napoleon_liu 阅读(350) 评论(1) 推荐(0)
摘要:x86 有 tr 寄存器,用来索引tss结构,tr 索引的是 GDT中的表项,描述符的类型必须是TSS。 tr寄存器,发生陷入时CPU就是从通过这个指针指向的TSS中拿到SS和ESP的值。   在linux中,每一个CPU对应一个TSS(而不是每个进程对应一个TSS),在同一个CPU上运行的进程共用一个TSS,由于每个进程的内核栈都不同(SS相同,但是ESP 不同),在某个CPU上正在... 阅读全文
posted @ 2010-01-14 14:53 napoleon_liu 阅读(1403) 评论(0) 推荐(0)