![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 96
李兆龙的博客
Distributed Systems & NoSQL & Linux Kernel / eBPF & Chaos Engineering
展开
-
从BMC看出一个 idiot 的思维变化
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。那一天我二十一岁,在我一生的黄金时代。我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消失,最后变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。大学生活没什么意外的话确实是要结束了。毕设开始是在CL原创 2022-05-22 21:05:11 · 1471 阅读 · 0 评论 -
从X86架构中cahe的组织结构引发的各种思考
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言有写这篇文章的冲动既不是因为想聊聊X86架构中cahe的组织结构,也不是为了说slab缓存着色问题,而是为了聊一聊这个问题《Why is transposing a matrix of 512x512 much slower than transposing a matrix of 513x513?》。这个问题想要真正了解必须明白cach原创 2021-01-10 23:22:59 · 683 阅读 · 0 评论 -
从false sharing到缓存一致性,这其实与我们息息相关
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。文章目录引言false sharing引言缓存对于我们广大程序员来说显然是一个极度重要的东西,但是很多人其实在大多数时候忽视了它的存在,这实在是一个非常遗憾的事情,我们今天不谈类似于Redis,memcache,Tair这样的分布式缓存,也不谈操作系统中逻辑上的缓存,比如说VFS中的四级缓存[1]。我们只是谈谈CPU中的高速缓存中的两个问题原创 2021-01-09 20:46:25 · 493 阅读 · 0 评论 -
对Linux服务端编程的一点浅薄理解
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。文章目录引言一次连接的断开与关闭套接字选项buffer必要性与设计网络编程模型的选择异步框架的威力引言最近总喜欢没事的时候想一想上了大学以后究竟学了哪些东西,身为小组Linux/C服务端的一名成员,显然需要思考下对服务端编程来说有哪些需要注意的知识点。因为就写RabbitServer时的感受来说,确实感觉到了很多细小的知识点对于整体性能的影原创 2021-01-06 23:08:27 · 865 阅读 · 4 评论 -
再聊聊Linux IO
文章目录引言提出问题块设备与存储介质缓存引言写这篇文章是因为看到了欢神的一篇文章[1],文章固然精彩,但是依我看来宽泛有余,细致不足,欢神这样的人对于这些基础知识点的掌握自然是炉火纯青的,但是抽出大把的时间去写出来当然就显得成本太高,但是这并不妨碍这篇茶余饭后创作的小几千字的文章仍是让人受益匪浅。在[1]的文末欢神自己也提到了希望这篇文章的读者能够继续往下走一走,所以这篇文章的目的就是更深入的谈谈这个看似简单,但实则让人踩坑无数的问题。当然很多地方理解可能是不全然正确的,遂希望各位抱着批判的态度来看这篇原创 2021-01-01 16:26:46 · 736 阅读 · 0 评论 -
Linux下修改MySQL编码
引言在默认情况下,mysql下是不支持直接使用汉语的,原因是因为在MySQL中送客户端向MySQL服务器发送的消息和MySQL服务器向客户端发送的数据默认编码均为UTF-8,所以我们需要把这些编码信息修改为GBK国码以支持汉语.首先我们需要执行如下指令找到配置文件所在,你可以在根目录下运行,比较慢,一般在/etc下,名为my.cnf find -name 'my*.cnf' 我们直接操...原创 2020-02-29 19:01:28 · 791 阅读 · 0 评论 -
epoll惊群问题详解
引言惊群问题的存在会使得我们的程序把宝贵的cpu资源花费在无效的上下文切换,用户态与内核态的转换与空转的循环中,这显然对于一个要求高效率的网络程序来说是不可忍受的,而内核在2.6以后已经完全解决了accept的惊群问题,对于epoll的惊群问题却没有完全解决,这个"完全"其实是很耐人寻味的,epoll其实在一定程度上避免了惊群问题,但并没有完全解决,这是为什么呢?原因就是对于accept来说...原创 2020-02-27 22:43:56 · 1310 阅读 · 0 评论 -
epoll源码解析(3) epoll_wait
引言这篇文章主要对epoll_wait进行分析,其中可以说藏着很多以前想知道而又没办法知道的东西,正如侯捷老师所言,“源码面前,了无秘密”.在这篇文章里你可以知道ET与LT究竟有什么区别,epoll如何防止惊群问题等等有意思的东西./* * Implement the event wait interface for the eventpoll file. It is the kernel...原创 2020-02-27 22:43:23 · 2985 阅读 · 0 评论 -
epoll源码解析(2) epoll_ctl
示例代码内核版本为2.6.38引言上一篇文章中分析的epoll的重要数据结构和epoll_create的实现,如果说上篇文章是理解epoll的基础,那这篇文章就是解释为何epoll如此高效的原因,我们来一起看看吧!/* * epfd 为epoll_create创建的fd * op 是我们的操作种类 增删改 ADD DEL MOD * fd 当然是我们要加入的fd了 * event ...原创 2020-02-27 22:43:05 · 1433 阅读 · 0 评论 -
epoll源码解析(1) epoll_create
示例代码内核版本为2.6.38引言这篇文章主要对于epoll_create以及epoll中所使用的重要数据结构进行分析,这些是在后续文章中搞懂epoll为何如此高效的前提.我们首先来看看两个数据结构.struct eventpoll { /* Protect the access to this structure */ spinlock_t lock; //自旋锁,提供更细粒度的锁定,...原创 2020-02-27 22:42:37 · 2506 阅读 · 1 评论 -
epoll源码解析(0) 概述与总结
讨论的内核版本为2.6.38引言在开始对源码的学习之前我们先来回顾下epoll对于程序员来说涉及到的主要接口和结构.int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)int epoll_wait(int epfd, struct epoll_event *...原创 2020-02-27 22:42:23 · 343 阅读 · 0 评论 -
listen backlog的参数
引言东哥和欢神确实让我们注意到了很多平时没有注意到的东西,下面博客参考杨博东学长的思路杨博东的博客问题listen 中的 backlog参数到底是什么意思若服务器全连接队列满而半连接队列接收到ack即将转入全连接队列该怎么办.结论backlog参数的意思是全连接队列的长度加1服务器维护一个会在一段时间后断掉, 而客户端仍维护一个状态为ESTABLISHED的连接验证验证...原创 2019-12-29 13:18:09 · 523 阅读 · 0 评论 -
多进程读能否同时写一个文件
1.问题多个进程对同一个文件进行访问会使得写入的数据出现错乱吗,write与fwrite之间到底有什么区别呢,哪种情况会丢掉数据呢.2.结论多个进程写同一个文件不会出现数据交叉的情况在多进程使用write时不会丢掉数据, fwrite会丢掉数据fwrite速度优于write3.实验write版本#include<stdio.h>#include<sys/ty...原创 2019-12-28 21:44:03 · 5028 阅读 · 1 评论 -
Deepin下解决/etc目录下未找到rsyslog.conf配置文件
一般情况下Linux的各类发行版下应该都是默认安装的 但Deepin下却并没有安装 刚开始的时候以为是配置文件位置可能与书上有出入 可是whereis以后发现本机中并不存在 果断尝试下载 果然Deepin下并没有默认安装 所以我们只需要一句语句就好了sudo apt-get install rsyslog随后我们就可以在/etc下找到我们需要的配置文件这样就好了...原创 2019-09-26 18:23:31 · 2151 阅读 · 1 评论 -
实现一个ls命令 (-alR)
ls命令是我们平时可以说是用的最频繁的命令之一了 本文就来实现一个简单的ls命令代码一共是实现了三个参数 -a -l -R 其中a与l可以说是比较简单的 我们只需要去解析命令行参数以及通过路径名来获取其下的文件 然后通过获取的文件名来进行状态的获取 就OK了 我们重点来说下-R命令的实现。-R命令的实现(实现打印根目录)先说下具体的实现方法 其实也很简单 就是像一般的ls一样 先便利一遍 记...原创 2019-07-21 17:54:15 · 10586 阅读 · 0 评论