Linux底层
文章平均质量分 73
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
什么是 mmap
换言之,CPU 进行一次磁盘读写操作涉及的数据量至少是 4KB,但是进行一次内存操作涉及的数据量是基于地址的,也就是通常的 64bit(64 位操作系统)。mmap 受限于操作系统内存大小:例如在 32-bits 的操作系统上,虚拟内存总大小也就 2GB,但由于 mmap 必须要在内存中找到一块连续的地址块,此时你就无法对 4GB 大小的文件完全进行 mmap,在这种情况下你必须分多块分别进行 mmap,但是此时地址内存地址已经不再连续,使用 mmap 的意义大打折扣,而且引入了额外的复杂性;转载 2022-09-22 17:09:53 · 11252 阅读 · 0 评论 -
对int变量赋值的操作是原子的吗?
count++;是原子操作吗?先说答案1、在单处理器下,如果将count++;语句翻译为单指令时,是原子操作。不过现在处理器都会对语句进行优化。2、在多处理器下,对于X86和ARM两个处理器来说(1)、在X86架构下,指令集提供了指令前缀lock用于锁定前端串行总线,保证了指令执行时不会收到其他处理器的干扰。因此是原子操作。(2)、在ARM架构下,引入了独占访问内存来实现"原子操作"。原问题什么指令集支持原子操作?其原理是什么?如果考虑到全部的指令集,问题太大了,这里简化下。...转载 2022-07-26 15:31:53 · 842 阅读 · 0 评论 -
网卡驱动收发包过程图解
网卡网卡工作在物理层和数据链路层,主要由PHY/MAC芯片、Tx/Rx FIFO、DMA等组成,其中网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线PHY芯片主要负责:CSMA/CD、模数转换、编解码、串并转换MAC芯片主要负责:1. 比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD2. CRC校验3. Packet Filtering:L2 Filtering、VLAN Filtering、Manageability /转载 2021-12-22 19:21:14 · 3240 阅读 · 0 评论 -
epoll原理详解
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/83862311设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问操作系统收集有事件发生的TCP连接时,把这100万个连接告诉操作系统,然后由操作系统找出其中有事件发生的几百个连接呢?实际上,在Linu转载 2021-06-07 14:08:58 · 523 阅读 · 0 评论 -
Linux 查看进程的命令
1、psps -x : 只显示当前用户下的所有进程信息ps -aux : 所有用户下的进程信息2、top显示动态的进程信息,5s刷新一次;3、htop需要自己安装htop命令,比较牛,个人也只是简单使用过,比top命令快,可以使用鼠标操作,但是操作时比较慢,选中一条进程信息后使用F9 直接杀死进程,而不用kill -9 pid...原创 2020-09-24 14:14:27 · 268 阅读 · 0 评论 -
linux Swap交换分区概念
Swap交换分区概念什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料:Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on ..转载 2020-09-24 14:06:46 · 205 阅读 · 0 评论 -
unlink(file_name)
官方描述:unlink的文档是这样描述的:unlink()deletesanamefromthefilesystem.If that name was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse.If the name was the...原创 2020-07-14 10:53:39 · 1722 阅读 · 0 评论 -
ELF文件格式
ELF文件格式ELF文件(Executable Linkable Format)是一种文件存储格式。Linux下的目标文件和可执行文件都按照该格式进行存储,有必要做个总结。概要本文主要记录总结32位的Intel x86平台下的ELF文件结构。ELF文件以Section的形式进行存储。代码编译后的指令放在代码段(Code Section),全局变量和局部静态变量放到数据段(Dat...转载 2020-03-18 11:23:49 · 337 阅读 · 0 评论 -
linux中fork()函数详解
原文地址:http://blog.csdn.net/jason314/article/details/5640969 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork(...转载 2019-02-18 12:06:05 · 408 阅读 · 0 评论 -
Tcmalloc
TcmallocPtmalloc在性能上还是存在一些问题的,比如不同分配区(arena)的内存不能交替使用,比如每个内存块分配都要浪费8字节内存等等,所以一般倾向于使用第三方的malloc。Tcmalloc是Google gperftools里的组件之一。全名是 thread cache malloc(线程缓存分配器)其内存管理分为线程内存和中央堆两部分。 小内存分配对于小...转载 2019-02-22 11:33:47 · 3064 阅读 · 0 评论 -
ptmalloc,tcmalloc和jemalloc内存分配策略研究
转载:https://cloud.tencent.com/developer/article/1173720 操作系统内存布局各种malloc的内存分配管理方式离不开操作系统的内存布局策略。32位经典内存布局32位系统下经典内存布局如上,程序起始的1GB地址为内核空间,接下来是向下增长的栈空间和由0x40000000向上增长的mmap地址。而堆地址是从底部开始,去除ELF、...转载 2019-02-22 11:24:12 · 472 阅读 · 0 评论 -
C++中的定位放置new(placement new)
转载:https://www.cnblogs.com/weekbo/p/8533368.html今天在使用new时,需要使用特定位置的一块内存,因此查了资料,发现该文章有帮助就现转载做一个备份。一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就...转载 2018-12-17 15:53:41 · 348 阅读 · 0 评论 -
linux编译动态库之-fPIC
在生成动态库时,常常习惯性的加上fPIC选项,fPIC有什么作用和意义,加不加有什么区别,这里做下小结:fPIC的全称是 Position Independent Code, 用于生成位置无关代码。什么是位置无关代码,个人理解是代码无绝对跳转,跳转都为相对跳转。1、不加fPIC选项即使不加fPIC也可以生成.so文件,但是对于源文件有要求,例如因为不加fPIC编译的so必须要在加载...转载 2018-10-11 08:58:52 · 1376 阅读 · 0 评论 -
Linux下修改只读文件
最近在linux Ubuntu下配置hadoop,遇到了一个只读文件core-site.xml,需要修改其中的内容,但是该文件是只读的。chattr -i 文件 让只读文件可编辑。chattr +i 文件 让文件只读。sudo vim 文件。原创 2018-08-08 15:01:37 · 28309 阅读 · 1 评论 -
EPOLL模型
最近在公司里面主要负责一些手机网络游戏的服务器端的编写。虽然接触时间不多,但是感触良多。特意将我此段时间的体会和大家分享。 以前公司的服务器都是使用HTTP连接,但是这样的话,在手机目前的网络情况下不但显得速度较慢,而且不稳定。因此大家一致同意用SOCKET来进行连 接。虽然使用SOCKET之后,对于用户的费用可能会增加(由于是用了CMNET而非CMWAP),但是,秉着用户体验至上的原则转载 2017-05-22 18:50:29 · 347 阅读 · 0 评论 -
Linux/Windows系统内核性能调优
做过Linux平台性能测试的童鞋平时可能会遇到如下问题:1、 TCP端口号不够用导致并发上不去(即与服务器端建立新连接失败) 2、 TIME_WAIT状态连接过多导致应用服务器(Nginx、Haproxy、Redis、Tomcat等)性能下降或假死等等 我们可以通过优化系统内核参数来解决上述问题,优化步骤如下: Linux 平台 1、 参考附件1中sysctl.co原创 2017-06-09 10:38:32 · 1638 阅读 · 0 评论 -
pthread_join()函数理解
pthread_t tid;使用方式:pthread_join(tid,NULL); 为什么要使用pthread_join()?在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到pthread_jo...原创 2017-07-08 13:13:26 · 3425 阅读 · 0 评论 -
Linux下的基本常用命令解析
1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序。 ps -A 显示所有程序。 ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 ps -e 此参数的效果和指定"A"参数相同。 ps e 列出程序时,显示每个程序所使用的环境变量。 ps转载 2017-07-06 13:39:28 · 228 阅读 · 0 评论 -
find与grep的区别
find功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。 语法: find 查找位置 匹配文件名 说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。grepgrep全称是Global Regular Expression Print。 一种强大的文本搜索工具,它能使原创 2018-01-13 20:00:19 · 3678 阅读 · 0 评论 -
OpenSSL原理与实现
1. 概念 1.1. SSL(Secure Sockets Layer安全层套接字)/TLS(Transport Layer Security传输层套接字)。 最常见的应用是在网站安全方面,用于http数据传输的加密。 1.2. 安全的目标:保密性(confidentiality),完整性(integrity),可用性(availability)转载 2018-02-05 11:33:17 · 1742 阅读 · 0 评论 -
Socket api接口--Send(),Recv()的长度问题
一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系统)的缓冲区,8k的数据由底层分片,而应用层看来只是一次发送。而windows的缓冲区经验值是4k。 Socket本身分为两种,流(TCP)和数据报(UDP),你的问题针对这两种不同使用而结论不一样。甚至还和你是用阻...原创 2018-03-15 17:31:44 · 2350 阅读 · 0 评论 -
socket api中send()和recv()函数工作原理与要点
send()和recv()函数是网络编程中经常使用到的函数,下面详细的比较两者的不同之处send函数工作原理: send函数只负责将数据提交给协议层。 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR; 如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲...原创 2018-03-15 17:49:39 · 3268 阅读 · 1 评论 -
strdup与strcpy具体的区别
我分别在XP的环境和linux环境下编译运行C代码,我发现一个不解的现象: 现象描述: 两个字符串 char* from, char* to;要把from的内容复制给to。 我在XP下,用strcpy(to, from)出现memory问题,于是换成 to = strdup(from),就运行正常。 而在linux下,用to = strdup(from)出现memory问题(报错信息:* gli...转载 2018-03-02 13:37:36 · 713 阅读 · 0 评论 -
Linux下共享内存的查看和释放
说明:1、查看共享内存,使用命令:ipcs -m2、删除共享内存,使用命令:ipcrm -m [shmid]使用如下:[plain] view plain copy[negivup@negivup mycode]$ ipcs -m 查看共享内存区 ------ Shared Memory Segments -------- key ...转载 2018-05-22 19:08:11 · 12738 阅读 · 0 评论 -
linux下epoll如何实现高效处理百万句柄的
开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?先简单回顾下如何使用C库封装的3个epoll系统调用吧。[cpp] view...转载 2018-05-28 22:02:29 · 219 阅读 · 0 评论 -
Linux内核裁减
Linux内核裁减(1)安装新内核: i)将新内核copy到/usr/src下, #tar xzvf linux-2.6.38.4.tar.gz -----解压缩. ii) 将名为linux的符号链接删掉,这是旧版本内核的符号链接. #ln -s linux-2.6.38.4 linux ------建立linux-2.6.38.4的符号链接linux. (2)设置内核. # cd /us转载 2017-05-19 18:58:02 · 1274 阅读 · 0 评论