linux/kernel
文章平均质量分 91
junlon2006
Coding for fun.
展开
-
int epoll_create(int size) 入参到底需要设置成多少
结论:1、对于高版本的内核只要大于0,效果都一样。2、正常写个1024吧。原创 2019-09-23 13:45:40 · 1461 阅读 · 0 评论 -
物理内存与虚拟内存解析
转载于:第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,转载 2017-09-03 21:52:45 · 363 阅读 · 0 评论 -
cgdb常用命令
多线程相关:thread all apply all bt原创 2017-08-26 10:50:11 · 451 阅读 · 0 评论 -
CAS锁c源码实现
#define lock(lkp) do{ \ while(!__sync_bool_compare_and_swap(lkp, 0, 1)) \ sched_yield(); \} while(0)#define unlock(lkp) do{ \ *(lkp) = 0; \} while(0)原创 2017-08-13 19:07:49 · 1216 阅读 · 0 评论 -
一个内存空洞问题的定位
转载于:http://v2ex.io/2015/06/18/memory-hole-and-memory-leak-thought/背景:最近遇到一个问题,现象是主备反复倒换(产品的一个测试场景,对应到进程内多个线程反复起停),进程内存占用持续上涨直到系统OOM。从操作步骤及现象来看,第一感觉是有内存泄漏,但内存相关问题定位一般都比较棘手。可能由于近期代码做了比较大变动(日志优转载 2017-08-03 10:15:42 · 3189 阅读 · 1 评论 -
Perf
http://blog.csdn.net/zhangskd/article/details/37902159从2.6.31内核开始,Linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。 perf Performance analysis tools for linux.Performance counters for Li转载 2017-07-17 20:54:08 · 239 阅读 · 0 评论 -
samba配置
关于Samba,大家有没有这种感觉,弄了N久丫的死活不喘气儿。找来各种“哥”和“姐”,发现全是“详解…配置专题”,看了半天不知道别个在说什么,好不容易找了个简单的教程,从头到尾跟着做,尼玛,浪费时间精力不说,就是跑不起来。是不是有种吐血的生理反应了。唉,不会写文档的娃,伤不起啊。而本文实现的是Linux和Windows间资源互通的问题:在Linux下架设Samba服务器,在Windows下来访问。原创 2017-07-15 20:26:52 · 274 阅读 · 0 评论 -
Linux vmstat命令实战详解
转载于 :http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.htmlvmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比转载 2017-06-23 21:23:01 · 221 阅读 · 0 评论 -
valgrind
转载于:http://blog.csdn.net/sduliulun/article/details/7732906 zz自 http://blog.csdn.NET/destina/article/details/6198443 感谢作者的分享!一 valgrind是什么?Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Va转载 2017-06-23 14:41:59 · 216 阅读 · 0 评论 -
CAS锁与MUTEX锁性能测试
C源码:#include #include #include #include #define lock(lkp) do{ \ while(!__sync_bool_compare_and_swap(lkp, 0, 1)){ \ usleep(1000); \ } \}while(0)#define unlock(lkp) do{原创 2017-08-13 20:03:11 · 999 阅读 · 1 评论 -
各种奇特的事情:内存错误,无常的段错误,堆栈消失
转载于:http://blog.csdn.net/win_lin/article/details/78227621. 在修改较多文件,make和执行,发现总是提示SegmentFault,调试也找不到原因(gdb调试时,往往进入某个普通的函数就SegmentFault)解决方法:全部重新编译可能会解决问题,原因不明。make clean; make。环境:g++/gcc转载 2017-06-21 21:19:31 · 918 阅读 · 0 评论 -
内存优化总结:ptmalloc、tcmalloc和jemalloc
转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/概述需求系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。比如nginx, 它在每个连接accept后会malloc一块内存,作为整个连接生命周期内的内存池。 当HTTP请求到达转载 2017-09-05 18:57:12 · 70495 阅读 · 1 评论 -
cache update
看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻...转载 2019-09-05 20:22:28 · 917 阅读 · 0 评论 -
MEMORY OVERCOMMIT
http://linuxperf.com/?p=102Overcommit的意思是操作系统承诺给进程的内存大小超过了实际可用的内存。一个保守的操作系统不会允许memory overcommit,有多少就分配多少,再申请就没有了,这其实有些浪费内存,因为进程实际使用到的内存往往比申请的内存要少,比如某个进程malloc()了200MB内存,但实际上只用到了100MB,按照UNIX/Linux的算...转载 2019-06-16 14:43:11 · 477 阅读 · 0 评论 -
mtrace
#include <stdlib.h>#include <unistd.h>#include <mcheck.h>int main() { int i = 10; char *p = NULL; mtrace(); while (i--) { p = malloc(32); sleep(1); } free(p)...原创 2019-06-09 10:59:36 · 599 阅读 · 0 评论 -
中断产生EINTR错误
https://blog.csdn.net/u011068702/article/details/620697141、介绍慢系统调用该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就会一直阻塞。慢系统调用可以被永久阻塞,包括以下几个类别:(1)读写‘慢’设备(包括pipe,终端设...转载 2018-05-22 11:53:57 · 16398 阅读 · 0 评论 -
Linux Makefile自动生成--config.h
转载于:https://blog.csdn.net/spch2008/article/details/12510805Linux Makefile自动生成--总体流程Linux Makefile自动生成--实例Linux Makefile自动生成--config.hconfig.h主要用于代码移植,产生可移植代码。有些函数只适用于特定的系统,并不通用,如gettimeofday。只能在特定的系统上...转载 2018-05-14 16:43:32 · 1704 阅读 · 0 评论 -
errno
转载于:https://www.cnblogs.com/fjutacm/p/5969c7593fdb6516c11a55b0e6813938.html会用errno,事半功倍参考一 参考二 参考三 参考四一、 errno二、 把errno的数字转换成相应的文字说明1、 使用strerror函数2、 使用perror函数三、转载 2018-01-25 14:49:17 · 391 阅读 · 0 评论 -
centos7操作笔记
1、vi /etc/sysconfig/network-scripts/ifcfg-eno16777728原创 2017-09-20 11:24:23 · 340 阅读 · 0 评论 -
tcmalloc安装与使用
1、git clone https://github.com/junlon2006/gperftools2、./autogen.sh3、./configure4、make; make install5、 echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf6、/sbin/ldconfig7、8、gcc动态连接,加上-ltcm...原创 2017-09-05 20:49:15 · 1667 阅读 · 0 评论 -
Linux 0.11
转载于:http://tinylab.org/take-5-minutes-to-build-linux-0-11-experiment-envrionment/1 故事大概在 2008 年 5 月份开始阅读赵博的《Linux内核完全注释》,并在当时 兰大开源社区 的博客系统上连载阅读笔记。每阅读完一部分就会写一份笔记,当时社区的反响还是蛮大了,因此结识了很多技术方面的转载 2017-07-02 21:24:14 · 480 阅读 · 0 评论 -
malloc底层实现
转载于:本文大致讲解一下Linux下malloc的底层实现原理。首先malloc肯定是从堆中分配内存,而堆又在用户空间中占据什么位置?通过下面这张图可以看出来:很明显是32位系统,寻址空间是4G,linux系统下0-3G是用户模式,3-4G是内核模式。而在用户模式下又分为代码段、数据段、.bss段、堆、栈。各个segment所含内容在图中有具体说明。其中bss段转载 2017-07-02 09:09:48 · 339 阅读 · 0 评论 -
scp
http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.htmlSCP 命令\svn 删除所有的 .svn文件find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解转载 2017-06-09 15:28:50 · 528 阅读 · 0 评论 -
linux fork()
源地址:http://blog.csdn.net/jason314/article/details/5640969 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用for转载 2017-03-23 20:29:19 · 193 阅读 · 0 评论 -
ffmpeg在ubuntu安装方法
1、从官网http://ffmpeg.org/ 下载文件包。2、配置--prefix,命令如下:配置环境变量过程:3、执行编译:make4、安装:make install注:常见的开源应用安装的过程基本上都符合以上的规范。原创 2017-03-22 17:43:36 · 274 阅读 · 0 评论 -
管理处理器的亲和性(affinity)
源地址:https://www.ibm.com/developerworks/cn/linux/l-affinity.html简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁转载 2017-03-22 15:01:54 · 305 阅读 · 0 评论 -
深入分析 Linux 内核链表
源地址:https://www.ibm.com/developerworks/cn/linux/kernel/l-chain/一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置转载 2017-03-21 19:14:05 · 188 阅读 · 0 评论 -
Ubuntu 16.04 几个国内更新源
源地址:http://www.linuxidc.com/Linux/2017-01/139458.htm分享Ubuntu 16.04 几个国内更新源。如何更改源1/ 在修改source.list前,最好先备份一份执行备份命令sudo cp /etc/apt/sources.list /etc/apt/sources.list.old2/ 执行命令转载 2017-03-21 17:54:08 · 293 阅读 · 0 评论 -
IPC共享内存
#include #include #include #include #include #include #define SIZE 1024int main(){int shmid ;char *shmaddr ;struct shmid_ds buf ;int flag = 0 ;int pid ;shmid = shmget(IPC_PRIVATE, SIZE,原创 2017-03-21 10:06:17 · 414 阅读 · 0 评论 -
ubuntu查看和设置栈空间命令
1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为2~10M2、通过命令 ulimit -s 临时改变栈空间大小:ulimit -s 51200, 即修改为50M,最大值操作系统有限制。3、通过配置文件,修改后为默认配置,/etc/rc.local下面,ulimit -s 51200 则可设置栈空间大小4、在/etc/security/limi原创 2017-03-20 15:28:20 · 5407 阅读 · 0 评论 -
同步和异步
转载于:点击打开链接进程同步用来实现程序并发执行时候的可再现性。一.进程同步及异步的概念1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起床后,先洗涮,然后才能吃饭,不能在洗涮没有完成时,就开始吃饭.按照这个定义,其实绝大多数函数都是同步调用(例如sin,isdigit等)。但是一般而言,我们在说转载 2017-02-12 10:39:17 · 200 阅读 · 0 评论 -
Linux hook
转载于:http://www.cnblogs.com/pannengzhi/p/5203467.html相信很多人对"Hook"都不会陌生,其中文翻译为"钩子".在编程中,钩子表示一个可以允许编程者插入自定义程序的地方,通常是打包好的程序中提供的接口.比如,我们想要提供一段代码来分析程序中某段逻辑路径被执行的频率,或者想要在其中插入更多功能时就会用到钩子. 钩子都是以固定的目的转载 2017-03-31 13:43:55 · 318 阅读 · 0 评论 -
TCP checksum
转载于:http://blog.csdn.net/zhangskd/article/details/11770647概述 TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。TCP校验和覆盖TCP首部和TCP数据,而IP转载 2017-03-31 13:46:45 · 4369 阅读 · 0 评论 -
linux守护进程
static void daemon(){ pid_t pid; /* Start forking */ if ((pid = fork()) < 0) { print_sys_error("fork"); exit(1); } if (pid > 0) exit(0); /* parent */原创 2017-03-16 23:31:47 · 288 阅读 · 0 评论 -
how to performance better to handle multi-thread initialize
static void __sps_dns_ip_pairs_initialize(){ if (!running) { pthread_mutex_lock(&g_mutex); if (!running) { list_init(&g_dns_head); __sps_dns_launch();原创 2017-06-28 16:31:52 · 234 阅读 · 0 评论 -
TCP VEGAS
观察RTT、接收速率等指标,预判拥塞,并提前调整(不需router支持)BaseRTT = min(SampleRTT)ExpectedRate = CWnd / BaseRTTActualRate: 上一个RTT被ACK的字节数/ 上一个SampleRTTDiff = ExpectedRate – ActualRateDiff太小,增加CW原创 2017-05-21 22:03:17 · 1295 阅读 · 0 评论 -
list_head
#ifndef LIST_HEAD_H#define LIST_HEAD_Htypedef struct list_head { struct list_head *next, *prev;} list_head;#define LIST_HEAD_INIT(obj) { &(obj), &(obj) }/* For the entry to be added , INIT原创 2017-06-16 21:17:51 · 310 阅读 · 0 评论 -
strict aliasing
转载于:http://www.cnblogs.com/vv1133/articles/2633669.htmlzjs@xhacker:/tmp$ cat tt.c#include int main(){ int a = 0x12345678; short *p = (short *)&a; short temp; temp = *p;转载 2017-04-20 15:51:23 · 351 阅读 · 0 评论 -
Linux下如何产生coredump
转载于:http://www.cnblogs.com/aoyihuashao/archive/2012/09/14/2684605.html任务发生异常,需要记录遗言信息,利用gdb调试,因此需要记录coredump文件。设置查看:在root用户下执行sysctl -a | grep core,查看core文件的配置是否正确命令设置:1)使用命令 ulimi转载 2017-04-15 12:23:14 · 946 阅读 · 0 评论 -
TCP BBR
转载于:http://m.blog.csdn.net/article/details?id=53730374Linux 4.9内核的发布,最令人兴奋的特性当属BBR算法了,这个算法的发布让4.9内核简直成了一个里程碑。在4.9内核发布之前,我就详细分析过BBR算法的诸多细节,我的感情色彩从推崇到平淡直到冷漠和咒骂,我个人在刚刚刨去了对BBR的无知而黄袍加身给它的光环后,从头来看,我应该在最初的转载 2017-04-29 10:43:11 · 1652 阅读 · 0 评论