当前位置: 首页 > news >正文

做网站用到的软件嵩县网站开发

做网站用到的软件,嵩县网站开发,国内十大咨询公司排名,临港注册公司优惠政策1、内核如何接收网络包 1.1 RingBuffer到底是什么#xff0c;RingBuffer为什么会丢包#xff1f; 问#xff1a;RingBuffer到底存在那一块#xff0c;是如何被使用到的#xff0c;真的就只是一个环形队列吗#xff1f;RingBuffer内存是预先分配好的#xff0c;还是随着…1、内核如何接收网络包 1.1 RingBuffer到底是什么RingBuffer为什么会丢包 问RingBuffer到底存在那一块是如何被使用到的真的就只是一个环形队列吗RingBuffer内存是预先分配好的还是随着网络包的收发动态分配为什么RingBuffer会丢包如果丢包了应该怎么去解决 答 RingBuffer是内存中的一块特殊区域RingBuffer包含内核使用的igb_rx_buffer数组和网卡使用的e1000_adv_rx_desc数组这两个数组存放指向skb的指针数组的内存是预先分配的skb是根据收包数据动态申请的。RingBuffer有大小和长度限制长度可以通过ethtool工具查看。如执行ethtool -g eth0;Pre-set maximums指的是RingBuffer的最大值Current hardware setting指的是当前的设置。如果内核处理的不及时导致RingBuffer满了那后面新来的数据包就会被丢弃通过ethtool和ifconfig工具可以查看是否有RingBuffer溢出发生可使用ethtool -S eth0如果rx_fifo_errors不为0(在ifconfig中体现为overruns指标增长)就表示有包因为RingBuffer装不下而被丢弃了。可以通过ethtool -G eth1 rx 4096 tx 4096增大RingBuffer但是这种方法只能解决偶发的瞬时的丢包而且会在包排队过多时导致延时增大正确的做法应该是让内核处理网络包的速度更快一些 1.2 网络相关的硬中断、软中断都是什么 问硬中断和软中断的区别是什么二者是怎么协作的为什么操作硬中断号和CPU之间的绑定关系但最终的效果是软中断跟着一起绑定调整了软中断开销也被绑定到不同的CPU 在网卡将数据放到RingBuffer中后接着就发起硬中断通知CPU进行处理。不过硬中断的上下文里做的工作很少将传过来的poll_list添加到CPU变量softnet_data的poll_list里(softnet_data中的poll_list是一个双向列表其中的设备都带有输入帧等着被处理)接着触发软中断NET_RX_SOFTIRQ。 在软中断中对softnet_data的设备列表poll_list进行遍历执行网卡驱动提供的poll来收取网络包。处理完后会送到协议栈的ip_rcv、udp_rcv、tcp_rcv_v4等函数中处理。 1.3 Linux里的ksoftirqd内核线程是干什么的 这几个内核线程是做什么用的机器上会有几个为什么有这么多它们和软中断又是什么关系 设备有几个核就会有几个ksoftirqd线程内核线程koftirqd包含了所有软中断的类型执行不同的处理函数。对于软中断NET_RX_SOFTIRQ。软中断的信息可以从/proc/softirqs读取。 1.4 为什么网卡开启多队列能提升网络性能 多队列提升网络性能的优化方案的基本原理是什么什么时候该动用这个方法用的话开到几个队列合适 通过ethtool可以查看当前网卡的多队列情况(”ethtool -l eth0“)。使用”ls /sys/class/net/eth0/queues“命令也可以看到真正生效的队列数如果要加大队列数ethtool -L eth0 combined 32调整。通过/proc/interrupts可以看到该队列对应的硬件中断号。通过该中断号对应的smp_affinity可以查看到亲和的CPU和是哪一个cat /proc/irq/中断号/smp_affinity。这个亲和性通过比特位来标记。8代表的是第4个CPU核心-CPU3。在硬中断的处理中发起软中断的时候是基于当前CPU核的smp_processor_id的这意味着哪个核响应的硬中断那么该硬中断发起的软中断任务就必然由这个核来处理。 如果网络包的接收频率高而导致个别核si偏高那么通过加大网卡队列数并设置每个队列中断号的smp_affinty将各个队列打散到不同的CPU就行了。 1.5 tcpdump是如何工作的 tcpdump工作在设备层是通过虚拟协议的方式工作的。它通过调用packet_create将抓包函数以协议的形式挂到ptype_all上。 1.6 iptable/netfilter是在哪一层实现的 netfilter主要是在IP、ARP等层实现的。可以通过搜索NF_HOOK函数的引用来深入了解其实现。如果配置过于复杂的规则会消耗过多的CPU加大网络延迟。 1.7 tcpdump能否抓到被iptable封禁的包 tcpdump可以抓到iptable封禁的收包但是抓不到iptable封禁的发包。 1.8 网络接收过程中的CPU开销如何查看 在网络接收过程中CPU是如何被消耗的CPU中的si、sy开销究竟是什么含义 在网络包的接收处理过程中主要工作集中在硬中断核软中断上二者的消耗可以通过top命令来查看。 其中hi是CPU处理硬中断的开销si是处理软中断的开销都是以百分比的形式来展示。 如果发现某个核的si过高那么可能是当前数据包的接收已经非常频繁了需要通过上面的多队列配置让其它核参与进来。 2、内核是如何与用户进程协作的 2.1 阻塞到底是怎么一回事 阻塞就是进程因为等待某个事件而主动让出CPU挂起的操作。评估是否阻塞关键要看进程是否让出CPU。 2.2 同步阻塞IO都需要哪些开销 从CPU开销角度来看一次同步阻塞网络IO将导致两次进程上下文切换开销。每一次大约花费3~5微秒。 2.3 多路复用epoll为什么就能提高网络性能 其它epoll高性能最根本的原因是极大程度地减少无用的进程上下文切换让进程更专注地处理网络请求。至于红黑树只是提高了epoll查找、添加、删除的效率。 2.4 epoll也是阻塞的 阻塞不会导致低性能过多过频繁的阻塞才会。epoll的阻塞和它的高性能并不冲突。 3、内核是如何发送网络包的 3.1在查看内核发送数据消耗的CPU时应该看sy还是si 在网络包的发送过程中用户进程在内核态完成了绝大部分的工作甚至连调用驱动的工作都干了。只有当内核态进程被切走前才会发起软中断。发送过程中绝大部分90%以上的开销都是在用户进程内核态消耗掉了。只有一少部分情况才会触发软中断(NET_TX类型)由软中断ksoftirqd内核线程来发送。所以在监控网络IO对服务器造成的CPU的开销时候不能仅看si而是应该把si、sy都考虑进来。 3.2 在服务器上查看/proc/softirqs为什么NET_RX要比NET_TX大得多 当数据发送完之后通过硬中断的方式通知驱动发送完毕。但是硬中断无论是有数据接收还是发送完毕触发的软中断都是NET_RX_SOFTIRQ。对于读来说都要经过NET_RX软中断都走ksoftirqd线程。对于发送来说绝大部分工作都在用户进程内核态处理了只有系统态配额用尽了才会发出NET_TX。 3.3 发送网络数据的时候都涉及哪些内存拷贝操作 第一次拷贝操作是在内核申请完skb之后这时候会将用户传递进来的buffer里面的数据拷贝到skb如果要发送的数据量比较大这个拷贝操作的开销还是不小的CPU拷贝。第二拷贝操作是从传输层进入网络层的时候每一个skb都会被克隆出来一个新的副本。目的是保存原始的skb当没有收到对方返回ACK时还可以重新发送以实现TCP要求的可靠传输。不过这次是浅拷贝仅拷贝skb描述符本身所指向的数据还是复用的。第三次拷贝不是必需的只有当IP层发现skb大于MTU时才需要进行。此时会再申请额外的skb并将原来的skb拷贝为多个小的skb。 3.4 零拷贝到底是怎么回事 零拷贝是指数据不用拷贝到用户内存可以节省两次CPU内存拷贝。 3.5为什么Kafka的网络性能很突出 使用了零拷贝技术。 4、深度理解本机网络IO 4.1 127.0.0.1本机网络IO需要经过网卡吗 不需要经过网卡。 4.2 数据包在内核中是什么走向和外网发送相比流程上有什么差别 本机网络IO和跨机网络IO比较起来确实是节约了驱动上的一些开销。发送数据不需要近Ringbuffer的驱动队列直接把skb传给接收协议栈(经过软中断)。 4.3 访问本机服务时使用127.0.0.1能比使用本机IP例如192.168.x.x更快吗 没有区别都会走环回设备lo。 5、深度理解TCP连接建立过程 5.1 为什么服务端程序都需要先listen一下 内核在响应listen调用的时候是创建了半连接、全连接两个队列这两个队列是三次握手中很重要的数据结构有了它们才能正常响应客户端的三次握手。 5.2 半连接队列和全连接队列长度如何确定 服务端在执行listen的时候就确定好了半连接和全连接队列的长度。 对于半连接队列来说其最大长度是min(backlog,somaxconn,tcp_max_syn_backlog)1再向上取整到2dN次幂但最小不能小于16。如果考虑要加大半连接队列那么需要一并考虑backlogsomaxconntcp_max_syn_backlog。 对于全连接队列来说其最大长度是listen时传入的backlog和net.core.somaxconn之间较小的那个值。如果需要加大全连接队列那么调整backlog和somaxconn。 5.3 Cannot assign requested address这个报错你知道是怎么回事吗该如何解决 一条TCP连接由一个四元组构成Server IP、Server PORT、Client IP、Client Port。在连接建立前前面的三个元素是确定了的只有Client Port是需要动态选择出来的。 客户端在connect发起的时候自动选择端口号。具体的选择过程就是随机地从ip_local_port_rang选择一个位置开始循环判断跳过ip_local_reserver_ports里设置的端口然后挨个判断是否可用。如果循环完也没有找到可用的端口会报错Cannot assign requested address。 解决方法扩大可用端口范围、减小最大TIME_WAIT状态连接数量等方法都是可行的。 5.4 一个客户端端口可以同时用在两条连接上吗 可以。 5.5 服务端半/全连接队列满了会怎么样 服务端响应的第一次握手的时候会进行半连接队列和全连接队列满的判断。如果半连接队列满了且未开启tcp_syncookies那么该握手包将直接被丢弃所以建议不要关闭这个内核参数。如果全连接队列满了且有young_ack(表示刚刚有ACK到达)那么同样也是直接丢弃。 5.6 新连接的socket内核对象是什么时候建立的 在第三次握手完成时就创建好了。 5.7 建立一条TCP连接需要消耗多长时间 正常情况是1个RTT时间。如果丢包就至少1秒了。 5.8 把服务器部署在北京给纽约的用户访问可行吗 可以但是服务延迟太高最好在当地建立服务器。 5.9服务器负载很正常但是CPU被打到底是怎么回事 在端口极其不充足的情况下connect系统调用的内部循环需要全部执行完毕才能判断出来没有端口可用。如果发出的连接特别频繁就会消耗掉大量的CPU。
http://www.hkea.cn/news/14461573/

相关文章:

  • 郑州网站制作电话新品发布会的目的和意义
  • 邵阳网站建设上科互联html网站素材网
  • 建设银行支行网站石家庄招投标公共服务平台官网
  • 怀来网站seo几分钟弄清楚php做网站
  • 哈尔滨如何快速建站山东通信局报备网站
  • 网站注册后能不能注销内在空间官网
  • 陕西高端建设网站诸城网页制作公司
  • 推荐网站建设服务话术wordpress空间服务器
  • 外贸展示型模板网站模板文案策划公司
  • 终身免费建站网站微信支付申请流程
  • php网站开发如何实现删除功能品牌设计公司50强
  • 响应式网站设计多少钱门户网站建设议题汇报材料
  • 网站seo优化主要有哪些手段wordpress的分类目录
  • 网站建设怎么设置网址wifi网络优化软件
  • asp网站好还是php网站好婚介所网站开发费用
  • 优化网站内容的方法海拉尔网站设计
  • 个人网站logo图片中国做的最好的网站建设公司
  • 双通网络网站建设价格网站建设有哪些企业
  • 网站建设计地方网站方案
  • 岳阳公司做网站高端t恤定制网站
  • 外贸企业网站推广公司东莞市建网站制作方案
  • 网站特效怎么做自适应天津网站建设价位
  • 室内设计专业网站公司建站服务
  • 怎样在织梦网站建设目录手机靓号网站建设
  • 四川手机响应式网站建设推荐wordpress破解登录可见
  • 交易平台网站模板在线制图
  • 做网站策划需要什么技能海珠做网站要多少钱
  • 网站js跳转给别人建设网站怎么收费
  • 专业网站优化软件wordpress博客 翻墙
  • 在哪个网站可以找到做国珍的人PS做图标兼职网站