- 博客(16)
- 资源 (2)
- 收藏
- 关注
原创 Linux IO多路复用之select,epoll实现分析
一.select的实现在fs/select.c:1.我们来看fd_set的定义:可见fd_set最多能容纳1024个fd;当然也可以修改__FD_SETSIZE宏并编译内核来增大fd_set管理的fd数,但是这样会导致性能下降,具体原因见第3点。2.select的三个fd_set的参数inp,oup,exp会进行两次用户空间和内核空间之间的拷贝:第一次作为入参拷贝到内核空间,第二次将fd的就绪状态...
2018-06-04 23:35:09
472
原创 TCP之ACK/DUPACK
RFC中ACK/DUPACK的说明如下: The delayed ACK algorithm specified in [RFC1122] SHOULD be used by a TCP receiver. When using delayed ACKs, a TCP receiver MUST NOT excessively delay acknowledgments. S...
2018-05-20 18:41:56
4968
原创 BLOCK IO之PLUG/UNPLUG
PLUG/UNPLUG即蓄流/泄流,蓄流的目的是为了提高bio在elevator queue合并和排序的机会,以提高 IO效率。 PLUG/UNPLUG对应blk_start_plug()和blk_finish_plug()两个函数,blk_start_plug()很简单,仅仅做了初始化:plug主要是在blk_queue_bio()里完成,bio先尝试merge,merge try...
2018-05-01 18:49:34
1450
原创 Page Cache之writeback
由于page cache的存在,用户write时只是将数据缓存到了page cache,并标记为dirty,而没有真正写到块设备(如硬盘)上 。内核在某个时刻会将page cache里的dirty数据wirteback到块设备上,这就是内核的writeback机制。 writeback是通过delayed_work来实现的,在wb_init()函数里初始化了这个delay...
2018-04-30 18:32:10
1843
原创 Page Cache之Readahead
readahead即预读,提前从块设备(如硬盘)里多读一些page缓存到page cache tree,以便下次读时能直接从page cache中命中,而不需要触发实际块设备的访问,提高IO效率。 那么什么时候readahead,readahead多少个page呢? 调用系统调用read时,先find page cache,若cache miss则进行sync readahead;若...
2018-04-30 11:42:45
2371
转载 linux 路由表设置 之 route 指令详解
目录(?)[+]使用下面的 route 命令可以查看 Linux 内核路由表。 [cpp] view plain copy # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.25
2017-10-26 00:39:21
472
转载 Linux VRF(Virtual Routing Forwarding)的原理和实现
版权声明:本文转自http://blog.csdn.net/dog250/article/details/78069964?utm_source=tuicool&utm_medium=referral目录(?)[+]动机明天,是2017年9月24日,两年前的明天,我从上海第一次来到深圳参加面试,两年前的今天,此时我还在上海虹桥机场等候延误的飞机,两年前的今晚,我在深圳南
2017-10-10 00:08:09
7589
原创 USB驱动之XHCI驱动调试总结二
最近公司测试USB发现一个问题:将U盘插在单板上重启会概率性的出现检测U盘失败的情况,要重新拔插才能正确识别到U盘。这里将这个问题的分析做一个总结。首先查看日志,有如下错误打印:xHCI dying or halted, can't queue_commandcouldn't allocate usb_device从日志信息可以看出来,在检测到U盘后创建usb_device
2017-10-01 23:25:12
14620
4
原创 SD spec摘要
SD卡管脚:SD卡分别在SD模式和SPI模式的管脚描述:模式选择:总线协议:SD卡命令分为广播命令和点对点的命令两类:广播命令有的需要response,有的不需要response;点对点的命令都需要response,有的点数据,有的不带数据:命令格式:SD卡初始化流程:
2017-09-23 23:53:38
928
原创 USB驱动之XHCI驱动调试总结一
最近调公司一款芯片的USB接口的驱动,USB3.0的控制器,枚举失败,有如下错误打印:device descriptor read/8, error -110即读设备描述符超时,通过USB协议分析仪抓包,发现host没有发出GET_DESCRIPTOR请求,分析怀疑:1.驱动发出的GET_DESCRIPTOR请求数据不对2.有cache一致性问题导致host取到的数据不对通过
2017-09-16 15:06:57
12294
5
原创 MMC驱动之SD卡
SD卡作为一种块设备,其驱动是挂在gendisk下实现的,对应代码在drivers/mmc/core/block.c两个主要的函数是mmc_blk_alloc,mmc_add_diskmmc_blk_alloc里调用alloc_disk分配了一个gendisk,调用blk_init_queue分配并初始化了一个request_queuemmc_add_disk调用device_add_
2017-08-27 10:23:36
735
原创 MMC驱动之mmc host
mmc host驱动的核心的数据结构是struct mmc_host,而对具体的mmc host驱动,是要实现host相关的操作函数集struct mmc_host_ops,比如卡的检测,写保护,发送命令请求等,然后创建一个mmc_host并添加进系统
2017-08-16 23:30:01
2714
1
原创 DMA映射
由于cpu cache的影响,设备在进行DMA操作时存在数据一致性的问题,kernel实现了一系列 api来解决dma一致性问题:include/linux/dma-mapping.hdma_alloc_coherent/dma_free_coherent:一致性DMA缓冲区申请和释放dma_map_single/dma_unmap_single:流式DMA映射dma_map_sg
2017-08-06 16:51:37
1717
原创 USB驱动之xhci
xhci是USB3.0的host规范,对于SoC的芯片,xhci host作为一个platform_device,对应的驱动是usb_xhci_driver: dirvers/usb/host/xhci-plat.c 先看 xhci_init_driver: 这里用到了面向对象思想的多态,对hc_driver进行初始化。hc_driver是
2017-08-06 11:12:15
17669
1
原创 usb驱动之设备插拔检测
先看一张熟悉的图:usb_bus_topo.png (94.28 KB, 下载次数: 0)下载附件2017-07-22 23:25 上传可见usb设备都是接在hub上的,设备的检测自然跟hub相关了,这里以root hub为例。看usb hub驱动代码,跟usb设备检测相关的有如下几处(按在hub_probe中的调用顺序):1.INIT_WORK(&
2017-07-23 11:22:15
4731
原创 likely与unlikely
在可能性比较大的条件判断加likely(),反之加unlikely(),这样编译器会将可能性大的分支语句块紧跟在前面的代码后面,运行时就会减少指令跳转带来的性能下降。
2017-07-23 11:19:53
488
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅