- 博客(107)
- 资源 (1)
- 收藏
- 关注
原创 study list
一. TCP1. 状态变迁图2. 拥塞管理3. 定时器二. epoll三. DNSmx 记录四. 正向/反向代理 + Nginx五. 路由协议
2014-01-13 10:00:58 644
转载 Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑。由于数据包的转发一般是具备路由功能的设备所关注,在本文中没有叙述,读者如果有兴趣,可以自行学习(在 Linux 内核中,分别使用了基于哈希的路由查找和基于动态 Trie 的路由查找算法)。本文集中于发送路径和接收路径上的优化方法分析,
2014-03-24 10:42:18 609
转载 Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑。由于数据包的转发一般是具备路由功能的设备所关注,在本文中没有叙述,(在 Linux 内核中,分别使用了基于哈希的路由查找和基于动态 Trie 的路由查找算法)。本文集中于发送路径和接收路径上的优化方法分析,其中的 NAPI 本质上是接收路
2014-03-24 10:32:05 598
原创 Linux swap
当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。这个是SWAP 交换分区的作用。实际上,我们更关注的应该是SWAP分区的大小问题。 设
2014-01-08 17:53:46 1195
原创 daemon 的使用陷阱
daemon 函数用于脱离控制台、转入后台运行。相比于通过 nohup 启动进程,优点是无需额外修改启动命令。但是,daemon 的调用位置却有讲究。如果非 daemon 进程测试一切 OK,但调用 daemon 后却出现各种问题,很可能是你用错了! daemon 的原理是: fork 并在子进程中继续运行,父进程 exit。陷阱的根源就父进程到子进程的切换。1. 处理逻辑是否依赖进
2013-12-20 14:56:17 611
转载 窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级,时间片
http://blog.csdn.net/muge0913/article/details/7562133进程调度的目标:1、高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效。2、加强交互性能(interactivity):在系统相当的负载下,也要保证系统的响应时间。3、保证公平和避免饥渴。4、
2013-12-18 17:54:55 1095
原创 SPEC 文件编写
%define pkg modules%define name tengine-modules%define version 1.4.6%define release 1#以下 2 行控制 debuginfo 的 rpm 包生成%define __os_install_post /usr/lib/rp
2013-12-13 16:36:18 1171
原创 LVS
以下模式,Client 的目的 IP 都是 VIP1. DR Direct Route,又称三角传输,RS 需将 VIP 绑定在 lo,并且关闭 ARP 应答 Client 目的 MAC 是 VIP 的,LVS 修改目的 MAC 为某台 RS 的后转发至 RS。RS 观察到目的 MAC 匹配,并且目的 IP 也匹配,所以能正常接收。 优点是高效(只需修改 MAC
2013-11-13 11:48:08 649
原创 Valgrind 摘要
Your program is then run on a synthetic CPU provided by the Valgrind core. As new code is executed for the first time, the core hands the code to the selected tool. The tool adds its own instrumenta
2013-09-23 11:32:21 634
原创 查看 redhat linux 版本
方法一:查看redhat-release文件[root@server ~]# cat /etc/redhat-release Red Hat Enterprise Linux AS release 4 (Nahant Update 8)方法二:查看issue文件[root@server ~]# cat /etc/issueRed Hat Enterprise Lin
2013-08-27 13:57:15 478
原创 Linux 内核开发之上路
一. 内核树 即内核源码目录,保存有内核的顶层 Makefile 文件 Ubuntu:安装 linux-source Redhat:安装 kenel-devel 默认的安装路径是 /usr/src/,前者是 /usr/src/linux-headers-xxx,后者是 /usr/src/kernels/xxx。同时,/lib/modules/
2013-08-13 18:25:42 484
转载 Linux 内核与用户空间通信之 netlink 使用方法
1 引言Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEEE制定的Posix IPC标准,在三者的基础之上实现了以下几种主要的IPC机制:管道(Pipe)及命名管
2013-08-06 16:18:20 611
转载 Linux 内核中的 atoi,itoa 等函数
对于普通应用程序,可以通过包含头文件stdlib.h和stdio.h,string.h等,然后调用需要的itoa(),atoi()等函数,但是对于Linux内核来说,无法使用那些C库中的函数。对此Linux内核里有了相应的实现:对于atoi()用simple_strtol() ,simple_strtoul()等函数替代;对于itoa(),用snprintf()。
2013-07-29 10:55:55 626
原创 Linux 内核开发之可移植性
一. 字长和数据类型 能够由机器一次就完成处理的数据被称为字。人们说某个机器是多少“位”的时候,其实说的就是该机器的字长。 处理器通用寄存器的大小和它的字长是相同的。一般来说,对于一个体系结构来说,它各个部件的宽度——比如说内存总线——最少要和它的字长一样大。而一般来说,地址空间的大小也等于字长,至少 Linux 支持的体系结构中都是这样。此外,C语言定义的 long 类型总等
2013-07-23 19:37:20 763
原创 Linux 内核开发之中断
从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚,然后再由中断控制器向处理器发送相应的信号。处理器一经检测到此信号,便中断自己的当前工作转而处理中断。此后,处理器会通知操作系统已经产生中断,这样,操作系统就可以对这个中断进行适当的处理了。 不同的设备对应的中断不同,而每个中断都通过一个唯一的数字标识,这样,操作系统才能给不同的中断提供不同的中断处理程序。
2013-07-01 18:55:51 442
原创 Linux 内核开发之内存管理
一. 内存管理单元(MMU: Memory Mamagement Unit) 以 物理页 作为内存管理的基本单元。页的大小随体系结构而不同,大多数 32位 的体系结构支持 4KB 的页,而 64位 的体系结构一般会支持 8KB 的页。 struct page 结构表示系统中的物理页,每一个物理页都会分配一个该结构。二. 区 由于硬件的限制,内核并不能对所有
2013-07-01 12:02:34 692
原创 Python 学习笔记
一. 组织行 #!/usr/bin/python 告诉 Linux 系统,当执行该程序时,应该运行哪个解释器。二. 字符串1. 单引号和双引号完全相同2. 三引号,在三引号中可以自由的使用单引号和双引号3. 自然字符串:给字符串加上 r 或者 R 前缀,则字符串中不再转义,在处理正则表达式时非常方便。三. 变量1. 变量的第一个字
2013-06-25 15:46:01 415
转载 在 Source Insight 中看 Python 代码
SI是个很强大的代码查看修改工具,以前用来看C,C++都是相当happy的。最近需要用Python,看了两天毫无颜色的UltraEdit之后决定,还是迁移回SI看。无奈SI默认不支持Python,需要进行下小小设置~~~步骤如下:下载个SI的CLF文件,地址为http://www.sourceinsight.com/public/languages/Python.CLF。打开SI。选项 |
2013-06-07 18:35:34 516
原创 吐槽 getopt
最近 getopt 用得比较多。刚接触时觉得挺方便的,自动拆分选项,省去了多少麻烦,但越用越觉得难受,有二:1. 各个参数之间无法关联 比如,希望设定 -t type -n number,并且 type-number 是一一关联的。看了很多介绍,都没有提及这个功能,只能自行实现。2. 无法制定参数的类型 比如,希望参数是纯数字,但是看了一圈,发现也不行,只能老老实实的
2013-05-22 16:44:56 362
原创 C语言中 restrict 关键字学习
restrict 是 c99 标准引入的,它只可以用于限定和约束 指针,并表明指针是访问一个数据对象的唯一且初始的方式。即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改。这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码。如 int *restrict ptr,ptr 指向的内存单元只能被 ptr 访问到
2013-05-03 09:25:48 571
原创 linux gcc 编译时头文件和库文件搜索路径
一、头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从 -I 开始 ※然后找 gcc 的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录/usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/2
2013-05-02 17:05:23 415
原创 Linux 地址转换函数
IP 地址是由小数点分开的十进制数表示的,我们称之为点分十进制表示法。Internet 地址分类 一个 Internet 地址是由 网络地址 和 主机地址 构成的。 IP 地址占 32 位,但是 网络地址 和 主机地址 之间的界限并不是固定的,而界限的确定取决于地址的分类,下表总结了 IP 地址分类的方法:理解网络掩码: 网络
2013-05-01 00:35:05 699
原创 不熟悉的 Linux API
1. daemon #inlcude int daemon(int nochdir, int noclose); The daemon() function is for programs wishing to detach themselves from the controlling terminal and run in the background as
2013-04-30 21:38:38 449
原创 Fedora 安装问题
1. yum install gcc安装时报错 file /usr/lib64/audit from install of glibc-2.16-30.fc18.x86_64 conflicts with file from package audit-2.2.1-2.fc18.x86_64先运行 yum update audit2. 没有最大化、最小化
2013-04-28 20:28:13 1162
原创 pcre
占坑,后续整理已知:pcre_compile 和 pcre_exec 的大版本必须严格一致,否则无法成功匹配。1. 常用 API2. 原理3. 性能4. 正则表达式
2013-04-22 17:33:50 394
原创 关于进程超时
一个需求是:设置进程/线程的超时时间,到时间后,自动结束该进程。找了一圈,没有发现 Linux 提供该机制。只能自行实现。子进程结束时,会向父进程发送 SIGCHILD 消息。父进程在消息处理函数中,通过 wait() 调用,即可获得子进程号。于是,通过 fork() 并维护子进程列表,即可实现进程的自动结束。
2013-04-20 22:08:04 916
原创 Beyond Compare 关于回车换行的问题
Linux/Windows 回车换行转换的问题不在本文赘述。 遇到的一个问题是,开发 Linux 下的应用程序,代码里本不应出现 \r。但是由于 Source Insight 在阅读代码上的便利性,我一直习惯在 Windows 下用 Source Insight 阅读和编辑代码,然后在 Linux 下编译和调试(虽说 Linux 下也可以通过 Wine 安装 Source Insight
2013-04-02 16:14:20 11807
原创 关于 C++ 和 C 的混编
最近遇到了这样一个场景。忘记在头文件中标注 extern c{},导致链接无法通过。 http://bravoon.blog.163.com/blog/static/169145223201166634585/
2013-03-25 15:19:20 533
原创 #pragma pack 的使用场景
除了在学习 C 语言结构体字节对齐时,做练习题的时候碰到过,在几年的工作中,一直没有找到 #pragma pack 的使用场景。最近实现一套 C/S 系统的内部通信,在读取网络数据时,碰到了字节对齐引起的问题。具体如下: Server 用 Java 实现,发送数据是采用 WriteInt、WriteShort 等方式,并没有考虑字节对齐的问题(Java 也的确无需考虑)。我的最初设计是,
2013-03-15 10:59:03 709 1
原创 CSRF
CSRF 全称是 Cross Site Request Forgery,即跨站点请求伪造。其主要原理是,利用用户的身份操作用户帐户。 具体的操作方式包括显示攻击和隐式攻击。前者是将 CSRF 的 URL 贴在论坛等地,并诱使有执行权限的管理员点击,该方式对于用户是可察觉的;后者可以通过在自己的域构造一个页面,精心配置 、、、 等标签的 src 字段,指向 CSRF 的 URL,只
2013-03-13 21:31:23 1277
原创 Linux 查看本机的开放端口
1. netstat -lpnut2. nmap -A -T4 127.0.0.1 playground3. lsof4. nc
2013-01-19 23:33:09 2145
原创 Linux TCP
net.ipv4.ip_local_port_range=1024 65535net.ipv4.tcp_fin_timeout=15net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1listen 队列net.ipv4.tcp_max_syn_blacklog=16384net.core.somaxconn=2048
2013-01-16 14:51:21 422
原创 Linux 内核-定时测量
被问了 2 个 Question,全都答不上来,汗颜...... 1. gettimeofday() 函数的互斥机制? 2. OS 的 tick,如何保证在不同频率的 CPU 上保持一致?一. 时钟和定时器电路 以固定的、预先定义的频率发出中断。1. 实时时钟(Real Time Clock, RTC) 独立于 CPU 和其它所有芯片,和 CMOS
2013-01-09 11:18:59 982
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人