linux常用命令与程序

基础 man man 命令是一个帮助命令,用于在 Linux 系统中查看指令、配置文件和编程帮助等信息 man ls 查看程序 ls 的帮助文档 pwd pwd 的含义是 print working directory,用于显示当前工作目录的路径 pwd 最常用 pwd -P 显示实际的路径,而不是使用连接文件路径。这在查看多层嵌套的连接文件时非常有用 ls ls 用来列出用于列出目录中的文件和文件夹 ls -a 列出所有文件,包括隐藏文件 ls -R 列出包括文件,包括子目录 ls -l 以树形结构列出目录内容, 列出文件的详细信息,包括权限、所有者、大小和修改日期等 ls /path/to/directory 列出指定目录的内容 ls -lh 显示文件大小以人类可读的格式(例如,以K、M、G为单位) ls -lt 按修改时间排序文件(默认降序) ls -lhS 按文件大小排序文件(默认降序) ls *.txt 支持通配符 cd cd 的意思是 change directory,即改变当前的工作目录 cd directory_path cd / 进入根目录 cd ~ 进入当前用户的主目录 cd ....

created: 2020-02-03  |  updated: 2021-01-21  |  阿秀

《了解了实现再谈网络性能》

0. intro 《理解了实现再谈网络性能》,作者张彦飞,github 1. 内核是如何接收网络包的 在Linux内核实现中,链路层协议靠网卡驱动来实现,网络层、传输层由内核协议栈来完成。 内核收包的路径示意图: 注意:当RingBuffer满的时候,新来的数据包将给丢弃。ifconfig查看⽹卡的时候,可以 ⾥⾯有个overruns,表示因为环形队列满被丢弃的包。如果发现有丢包,可能需要通过ethtool命令来加⼤环形队列的⻓度 ⾸先在开始收包之前,Linux 要做许多的准备⼯作: 创建ksoftirqd线程,为它设置好它⾃⼰的线程函数(后⾯使用它来处理软中断) 协议栈注册,linux要实现许多协议,⽐如arp,icmp,ip,udp,tcp,每⼀个协议都会将⾃⼰的处理函数注册⼀下,⽅便包来了迅速找到对应的处理函数 ⽹卡驱动初始化,每个驱动都有⼀个初始化函数,内核会让驱动也初始化⼀下。在这个初始化过程中,把⾃⼰的DMA准备好,把NAPI的poll函数地址告诉内核 启动⽹卡,分配RX,TX队列,注册中断对应的处理函数 以上是内核准备收包之前的重要⼯作,等这些步骤都 ready 之后,打开硬中断,等待数据包的到来: ⽹卡将数据帧 DMA 到内存的 RingBuffer 中,然后向 CPU 发起中断通知 CPU 响应中断请求,调⽤⽹卡启动时注册的中断处理函数。中断处理函数完成后,发起软中断请求 内核线程 ksoftirqd 线程发现有软中断请求到来,先关闭硬中断。 ksoftirqd 线程开始调⽤驱动的 poll 函数收包 poll 函数将收到的包送到协议栈注册的 ip_rcv 函数中 ip_rcv 函数再将包送到 udp_rcv 函数中(对于 tcp 包就送到 tcp_rcv ) 2. 内核是如何与进程进行协作的 sock_owned_by_user 判断的是⽤户是不是正在这个 socket 上进⾏系统调⽤( socket 被占⽤),如果没有,那就可以直接放到 socket 的接收队列中。如果有,那就通过 sk_add_backlog 把数据包添加到 backlog 队列。 当⽤户释放的 socket 的时候,内核会检查 backlog 队列,如果有数据再移动到接收队列中。 sk_rcvqueues_full 接收队列如果满了的话,将直接把包丢弃。- 接收队列⼤⼩受内核参数 net....

created: 2023-04-04  |  updated: 2023-04-04  |  阿秀

《了解了实现再谈网络性能》目录

intro 目录索引 理解了实现再谈网络性能

created: 2023-04-04  |  updated: 2023-04-04  |  阿秀