ring

(9)How to take a picture of a black hole

血红的双手。 提交于 2020-05-08 21:14:19
https://www.ted.com/talks/katie_bouman_what_does_a_black_hole_look_like/transcript 00:13 In the movie " Interstellar [ˌɪntərˈstelə(r)] 星际的 ," we get an up-close look at a supermassive black hole. Set against a backdrop of bright gas, the black hole's massive gravitational [ˌgrævɪˈteɪʃənl] 万有引力的 pull bends light into a ring. However, this isn't a real photograph, but a computer graphic rendering -- an artistic interpretation of what a black hole might look like. 00:32 A hundred years ago, Albert Einstein first published his theory of general relativity. In the years since then, scientists have

关于Win7 x64下过TP保护(应用层)

拈花ヽ惹草 提交于 2020-05-06 03:51:46
关于Win7 x64下过TP保护(应用层)(转) 调试对象:DXF 调试工具:CE、OD、PCHunter、Windbg 调试先言:TP的应用层保护做得比较多,包括对调试器的检测,比如CE工具会被DXF报非法。有的保护还是内核与应用层交替保护。 应用层: 1、TP让调试器卡死(内核互动) 如图,TP会检测调试器让调试器暂停运行,实际上就是暂停了调试器所有的线程而已。 这个保护是今年7月份新出的,所以我这里重点分析下,我刚开始调试的时候就发现OD会莫名其妙地卡死。 打开PCHunter发现OD的进程线程全部被暂停了。 开始我认为是TP调用了SuspendThread(函数:暂停指定线程)来让调试器卡死的。 于是我就打开Windbg附加并在这个函数上下断点,发现没有断下来。 然后我认为是调用了接口函数NtSuspendThread(函数:暂停指定线程<内核接口>) 但是还是没有断下。所以排除了DXF在Ring3调用了暂停线程让OD卡死。 于是我思考了一下,打开虚拟机,简单过了双机调试保护(一段时间后还是会蓝屏),在DXF启动之后, 在Windbg输入!process OD的进程ID 来查看线程的调用堆载,我发现了很有意思的东西。 SuspendCount被置为了1,再看看调用堆载。 原来TP在Ring0中调用了KiSuspendThread来暂停OD的线程啊。怪不得断不下来。

数据结构 — 链表

无人久伴 提交于 2020-05-05 15:52:01
目录 文章目录 目录 双向链表 跳表 双向链表 双向链表支持顺序查找和逆序查找,如下图: 所以双向链表也常被称之为环(Ring),常见于处理网络数据包的内存缓存空间的组织。双向链表的缺点是不支持按某个值或区间的快速查找,也不支持数据的快速插入。 跳表 跳表是在链表之上加上多层索引构成的,相对于双向链表,支持快速查找,更新,删除。 假设我们现在要查找区间 7- 13 的记录,就不用从头开始查找了,只要在上图中的二级索引开始找即可,遍历三次即可找到链表的区间位置,时间复杂度是 O(logn),非常快,这样看来,跳表是能满足我们的需求的,实际上它的结构已经和 B+ 树非常接近了,只不过 B+ 树是从平衡二叉查找树演化而来的而已。 来源: oschina 链接: https://my.oschina.net/u/4339497/blog/4267220

LINUX网络子系统中DMA机制的实现

岁酱吖の 提交于 2020-05-04 14:06:15
本文由西邮陈莉君教授研一学生进行解析,由白嘉庆整理,薛晓雯编辑,崔鹏程校对. 我们先从计算机组成原理的层面介绍DMA,再简单介绍Linux网络子系统的DMA机制是如何的实现的。 一、计算机组成原理中的DMA 以往的I/O设备和主存交换信息都要经过CPU的操作。不论是最早的轮询方式,还是我们学过的中断方式。虽然中断方式相比轮询方式已经节省了大量的CPU资源。但是在处理大量的数据时,DMA相比中断方式进一步解放了CPU。 DMA就是Direct Memory Access,意思是I/O设备直接存储器访问,几乎不消耗CPU的资源。在I/O设备和主存传递数据的时候,CPU可以处理其他事。 1. I/O设备与主存信息传送的控制方式 I/O设备与主存信息传送的控制方式分为程序轮询、中断、DMA、RDMA等。 先用“图1”大体上说明几种控制方式的区别,其中黄线代表程序轮询方式,绿线代表中断方式,红线代表DMA方式,黑线代表RDMA方式,蓝线代表公用的线。可以看出DMA方式与程序轮询方式还有中断方式的区别是传输数据跳过了CPU,直接和主存交流。 “图1”中的“接口”既包括实现某一功能的硬件电路,也包括相应的控制软件,如 “DMA接口” 就是一些实现DMA机制的硬件电路和相应的控制软件。 “DMA接口”有时也叫做“DMA控制器”(DMAC)。 图1 上周分享“图1”时,刘老师说在DMA方式下,

Linux 操作系统原理 — 内核态与用户态

陌路散爱 提交于 2020-05-03 15:42:50
目录 文章目录 目录 Linux 的内核态与用户态 系统调用 Shell CPU 与内核态 用户态和内核态的切换 Linux 的内核态与用户态 我们常说的 Linux 严格来说指代的是 Linux Kernel,泛指使用或裁剪标准 Linux Kernel 并在此基础之上实现各种应用程序解决方案的操作系统发行版本(e.g. RHEL、SUSE 和 Ubuntu)。一个完整的 Linux 操作系统体系架构通常由下列几个核心层级组成: Applications :在操作系统上安装并运行的用户态应用程序 Shell :支持编程的命令行解析器 Libs :操作系统标准库函数 System Calls :暴露给用户态的内核态系统调用接口 Kernel :操作系统的核心,真正对接硬件平台的软件程序 Linux Kernel 本质上看是一种软件,实现了进程管理器、内存管理器、文件系统、设备驱动以及网络管理组件来负责对接、管理计算机硬件平台,并通过系统调用(System Calls)为上层应用程序暴露硬件资源以提供程序运行环境。 以系统调用为边界将 Linux 操作系统的体系架构分为用户态和内核态(包括系统调用)。用户态的应用程序可以通过三种方式来访问内核态的资源: 系统调用 库函数 Shell 脚本 系统调用 系统调用是操作系统的最小功能单位,具有原子性

DPDK 网络加速在 NFV 中的应用

匆匆过客 提交于 2020-05-02 08:32:47
目录 文章目录 目录 前文列表 传统内核协议栈的数据转发性能瓶颈是什么? DPDK DPDK 基本技术 DPDK 架构 DPDK 核心组件 应用 NUMA 亲和性技术减少跨 NUMA 内存访问 应用 CPU 绑核技术减少上下文切换损耗 应用大页内存技术减少 TLB miss 应用 PMD 轮询技术减少网卡外设的硬件中断 应用 UIO 和内存池技术减少内存拷贝 应用无锁循环队列较少锁操作对 CPU 的开销 DPDK 优化技术 DPDK 性能影响因素 硬件结构的影响 OS 版本及其内核的影响 OVS 性能问题 内存管理 CPU 核间无锁通信 设置正确的目标 CPU 类型与模式 优化方案 DPDK 在 NFV 中的应用 参考文章 前文列表 《OpenStack Nova 高性能虚拟机之 NUMA 架构亲和》 《OpenStack Nova 高性能虚拟机之 CPU 绑定》 《OpenStack Nova 高性能虚拟机之大页内存》 《多进程、多线程与多处理器计算平台的性能问题》 《计算机组成原理 — 存储系统》 《计算机组成原理 — 输入输出系统》 《计算机组成原理 — 总线系统》 《Linux 的零拷贝技术》 《数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程》 传统内核协议栈的数据转发性能瓶颈是什么? 在 x86 结构中,处理数据包的传统方式是

理解 Linux 网络栈(1):Linux 网络协议栈简单总结

为君一笑 提交于 2020-05-02 08:32:28
引自:https://www.cnblogs.com/sammyliu/p/5225623.html 本系列文章总结 Linux 网络栈,包括: (1) Linux 网络协议栈总结 (2) 非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3) QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的 API,通过它,应用程序可以访问传输层协议。 socket 位于传输层协议之上,屏蔽了不同网络协议之间的差异 socket 是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体 在Linux系统中,socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取

Linux 网络协议栈收消息过程-Ring Buffer

江枫思渺然 提交于 2020-05-02 07:19:52
想看能不能完整梳理一下收消息过程。从 NIC 收数据开始,到触发软中断,交付数据包到 IP 层再经由路由机制到 TCP 层,最终交付用户进程。会尽力介绍收消息过程中的各种配置信息,以及各种监控数据。知道了收消息的完整过程,了解了各种配置,明白了各种监控数据后才有可能在今后的工作中做优化配置。 所有参考内容会列在这个系列最后一篇文章中。 Ring Buffer 相关的收消息过程大致如下: 图片来自参考1,对 raise softirq 的函数名做了修改,改为了 napi_schedule NIC (network interface card) 在系统启动过程中会向系统注册自己的各种信息,系统会分配 Ring Buffer 队列也会分配一块专门的内核内存区域给 NIC 用于存放传输上来的数据包。struct sk_buff 是专门存放各种网络传输数据包的内存接口,在收到数据存放到 NIC 专用内核内存区域后, sk_buff 内有个 data 指针会指向这块内存 。Ring Buffer 队列内存放的是一个个 Packet Descriptor ,其有两种状态: ready 和 used 。初始时 Descriptor 是空的,指向一个空的 sk_buff,处在 ready 状态。当有数据时, DMA 负责从 NIC 取数据,并在 Ring Buffer 上按顺序找到下一个

用ethtool 命令解决Linux 网卡丢包【转】

痴心易碎 提交于 2020-05-02 05:27:53
转自: https://blog.csdn.net/chengxuyuanyonghu/article/details/73739516 生产中有一台Linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备前想能不有通过软件方法解决,通过网上一些资料显示,出现这种现象,也有可能是网卡buffer size 太小的原因,遂尝试更改buffer 大小解决,下面的设备运行了64天,丢包超过20多亿 . ethtool命令用于获取以太网卡的配置信息,或者修改这些配置 -a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 -A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 ​ -c display the Coalesce information of the specified ethernet card。 -C Change the Coalesce setting of the specified ethernet card。 ​ -g Display the rx/tx ring parameter information of the specified ethernet card。 -G

修改网卡缓存,解决Linux 网卡丢包严重问题

我只是一个虾纸丫 提交于 2020-05-02 05:27:36
Linux 网卡丢包严重 生产中有一台linux设备并发比较大,droped包比较多,尤其是在跑游戏数据包的时候,存在严重的丢包现象,怀疑网卡性能不足,在更换设备前想能不有通过软件方法解决,通过网上一些资料显示,出现这种现象,也有可能是网卡buffer size 太小的原因,遂尝试更改buffer 大小解决,下面的设备运行了64天,丢包超过20多亿 找了一些国外的文章,可以通过ethtool来修改网卡的buffer size ,首先要网卡支持,我的服务器是是INTEL 的1000M网卡,我们看看ethtool说明 -g –show-ringQueries the specified ethernet device for rx/tx ring parameter information. -G –set-ringChanges the rx/tx ring parameters of the specified ethernet device. 查看当前网卡的buffer size情况 ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: 4096RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 256 RX Mini: 0 RX