Linux
文章平均质量分 72
mumumuwudi
这个作者很懒,什么都没留下…
展开
-
一个nginx_reuseport 简单补丁实现
补丁的diff文件在这里http://leaf.dragonflybsd.org/~sephe/ngx_soreuseport.diff该补丁只是一个简单实现演示,很多东西没有考虑到,作者也只是简单验证了使用REUSEPOORT后的效果The basic idea of the above patch is:- Defer the listen socket creation un原创 2015-07-25 01:26:19 · 17751 阅读 · 1 评论 -
ub 网络框架的几种线程模型
ub是公司不错的网络框架, 使用C语言开发,清晰易懂,不像sofa-rpc使用c++ 开发,语言层面的技巧较多.个人还是喜欢ub的简单. 本文通过ub框架介绍一下server端开发的常见的几种线程模型.ub包含5种线程模型,我们挑选了三个比较典型和简单的来讲解一下xpool \\ 最简单同步模型cpool \\ 生产者消费者模型appool \\ 异步模型原创 2015-08-27 00:21:39 · 4152 阅读 · 0 评论 -
lvs 负载均衡fullnat 模式clientip 怎样传递给 realserver
关于LVS和FULLNAT的介绍可以看一下 淘宝吴佳明(普空)的视频 http://blog.aliyun.com/1750 ,FULLNAT模式很大简化了LVS的配置和部署,目前淘宝和百度基本上都在使用FULLNAT模式来作为接入侧的负载均衡模式. 百度的LVS叫做BVS, Baidu Virtual Server, 是在LVS基础上修改的增加了L3 Though 和 S原创 2015-07-26 03:21:11 · 15477 阅读 · 0 评论 -
LVS RS节点健康检查
LVS RS健康节点检查一般交由keepalived来做. 当然也可以自己写一个脚本来检查,通过tcp_connnect或者curl get 方式定期检测RS节点,如果检测失败则在LVS上删除该RS节点. 下面介绍一下百度内部的LVS(又叫做BVS) RS默认健康检测方式. 服务上线到BVS后,BVS会维护一份VIP-RS对应关系的配置,通过健康检查的机制来原创 2015-07-28 07:42:42 · 6574 阅读 · 0 评论 -
linux 内核如何管理内存
翻译自 ttp://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/ 感觉作者的精美图片建议读者对一遍英文原文 在介绍完了进程虚拟地址空间的布局后, 我们来看一下内核是如何管理内存的: linux的进程在内核中是由一个task_struct结构体描述的, 其中task_struct里面翻译 2015-07-30 01:51:46 · 6714 阅读 · 0 评论 -
LINUX程序(进程)在内存中的布局
翻译自: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/ 感谢作者, 尤其一些图很漂亮,建议读者亲自读一遍英文.内存管理是操作系统的核心; 是编程和系统管理的关键部分,在接下来的几篇文章中会从实际应用和内部角度对内存管理模块进行分析. 内存管理的相关概念都是通用的,我们依照32位的linux和wi翻译 2015-07-30 02:00:33 · 5905 阅读 · 0 评论 -
linux 内存中buffer 和cache 的区别
page cahce 缓存了页面用来优化文件I/O, buffer cache 缓存了磁盘块用来优化 block I/O.在linux kernel 2.4之前,这两个缓存是不同的: 文件在page cache里, 磁盘块在buffer cache里. 这样某些系统调用(mmap)数据需要在两层cache中都保存了一份. 许多unix系统都遵循类似的模式. 这样很容易实现, 但是看起来很不原创 2015-08-04 11:37:42 · 2041 阅读 · 0 评论 -
父进程waitpid子进程的一般实现
父进程waitpid子进程的一般流程原创 2015-08-26 07:43:56 · 2222 阅读 · 0 评论 -
线程间使用条件变量同步正确方式
线程间同步标准的使用方式如下:thread 1: pthread_mutex_lock(&mutex); while (!condition) pthread_cond_wait(&cond, &mutex); func_1();/* do something that requires holding the mutex and condi原创 2015-08-26 08:28:28 · 2065 阅读 · 0 评论 -
c-ares 一个C语言的异步DNS解析库
c-ares是一个C语言的异步DNS解析库,可以很方便的和使用者的事件循环统一起来,实现DNS的非阻塞异步解析,libcurl, libevent, gevent, nodejs都在使用。下面摘自Stack Overflow的一个例子,#include #include #include #include #include void dns_callback (void原创 2015-07-31 08:10:16 · 12805 阅读 · 2 评论 -
FreeBSD Kqueue的实现原理
kqueue/epoll 是两个网上出现频率比较高的关键字,epoll实现原理及源码网上已经有很多blog分析,关于select/poll/epoll、kqueque的优缺点也不再解释。kqueue实现原理的文章网上资料比较少, 基本上就JonathanLemon的一篇论文, Jonathan Lemon也是Kqueue的发明者。文章链接: Kqueue: A generi原创 2015-07-30 10:19:10 · 7362 阅读 · 0 评论 -
Epoll 新增 EPOLLEXCLUSIVE 选项解决了新建连接的’惊群‘问题
epoll最终和accept一样解决了新建连接的惊群问题 patch地址: https://github.com/torvalds/linux/commit/df0108c5da561c66c333bb46bfe3c1fc65905898patch比较简单, 下面摘录了一部分关键修改~~在加入listen socket的sk_sleep队列 的唤醒队列里使用了 add_wait原创 2016-01-25 08:09:02 · 7664 阅读 · 4 评论 -
linux中mmap文件到内存中,该进程发生错误被挂掉后mmap映射的内存能否写回到文件中的问题
在Tokyo Cabinet中hashDB中的hash索引是通过mmap将数据库文件的一部分映射到内存中的,之前把Tokyo Cabinet移植到手机淘宝客户端当做一个通用的KV数据库来使用,因为各种手机的环境千差万别,手淘某些机型中得crash率很高. Tokyo Cabinet数据库文件总是不完整.因为是手机客户端又不方便像在server端一样使用一个单独的线程定时同步原创 2015-07-24 02:37:45 · 3872 阅读 · 0 评论 -
google linux kernel tcp reuseport patch
This patch implements so_reuseport (SO_REUSEPORT socket option) forTCP and UDP. For TCP,so_reuseport allows multiple listener socketsto be bound to the same port. In thecase of UDP, so_reusepor原创 2015-07-25 08:57:46 · 2176 阅读 · 0 评论 -
利用vmtouch管理文件的page cache
利用vmtouch管理文件的page cache, vmtouch主页和使用说明:https://hoytech.com/vmtouch/源码也比较简单 https://github.com/hoytech/vmtouch/blob/master/vmtouch.cvoid usage() { //使用说明 printf("\n"); .... printf("原创 2016-02-15 02:17:54 · 1115 阅读 · 0 评论