affinity

网卡软中断过高问题优化总结

爷,独闯天下 提交于 2020-05-05 13:40:59
问题 多核CPU游戏战斗服务器高峰期时会出现网络丢包, 发现CPU0软中断%si 过高,导致%id值过低触发告警 如下图,在线低峰期软中断%si 处理时间百分比高达20多,id值变低,服务器变卡和丢包,影响业务 中断 什么是中断? 指接收来自硬件或者软件的信号发送给CPU和系统内核进行处理,发出这样的信号称为进行中断请求(IRQ) 中断又分为: 硬中断:外围硬件比如网卡发给CPU的信号 软中断:由硬中断处理后对操作系统内核发出信号的中断请求 查看中断情况即CPU都在哪些设备上干活 通过命令cat /proc/interrupts 查看系统中断信息,长下面这个样子的。 第一列是中断号,比如eth0对应的中断号是35,后面是每个cpu对应的中断次数。 CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 127 0 0 0 0 0 0 0 IR-IO-APIC-edge timer 7: 15 0 0 0 0 0 0 0 IR-IO-APIC-edge 8: 182900 0 0 0 0 0 0 0 IR-IO-APIC-edge rtc0 9: 1 0 0 0 0 0 0 0 IR-IO-APIC-fasteoi acpi 23: 18575 0 0 0 0 0 0 0 IR-IO-APIC-fasteoi ehci_hcd:usb1 24: 0 0

Mac 设计师必备的设计绘图软件 推荐与下载

主宰稳场 提交于 2020-04-24 15:42:13
Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品。 Mac上优秀的设计类软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮助。 如有更好的设计类软件大家也可以留言推荐哦! 一、Sketch Sketch 是Mac上最强大的移动和网页应用设计工具,已经赶超PS作为首选设计工具了,尤其是在移动应用设计方面,Sketch的优点在于使用简单,学习曲线低,并且功能更加强大易用。 下载地址:https://www.scoee.com/8/sketch-for-mac-52-5-%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88?show=8#q8 二、PhotoShop PhotoShop,简称PS,Adobe公司出品,最知名的图片处理和设计工具,这个就不多做介绍了,可以说是装机必备了。 下载地址:https://www.scoee.com/11/adobe-photoshop-ps-cc-2019-0-1-for-mac-%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88?show=11#q11 三、Illustrator Illustrator,简称AI,Adobe公司出品,业界标准矢量绘图工具。 下载地址:https://www

GIC , SPI , PPI (窝窝科技的文章题目改了下)【转】

╄→гoц情女王★ 提交于 2020-04-24 03:45:36
转自: https://www.cnblogs.com/tureno/articles/6403408.html 转载于: http://www.wowotech.net/irq_subsystem/gic-irq-chip-driver.html GIC驱动代码分析(废弃) 这份文档状态是:废弃,新的文档请访问 http://www.wowotech.net/linux_kenrel/gic_driver.html 一、前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。 具体的分析方法是按照source code为索引,逐段分析。对于每一段分析的代码,力求做到每个细节都清清楚楚。这不可避免要引入很多对GIC的硬件描述,此外,具体GIC中断控制器的驱动代码和linux kernel中断子系统的交互也会描述,但本文不会描述linux kernel的generic interrupt subsystem。 本文以OMAP4460这款SOC为例,OMAP4460内部集成了GIC的功能

linux下把进程/线程绑定到特定cpu核上运行【转】

懵懂的女人 提交于 2020-04-24 02:10:01
转自: https://blog.csdn.net/guotianqing/article/details/80958281 概述 现在大家使用的基本上都是多核cpu,一般是4核的。平时应用程序在运行时都是由操作系统管理的。操作系统对应用进程进行调度,使其在不同的核上轮番运行。 对于普通的应用,操作系统的默认调度机制是没有问题的。但是,当某个进程需要较高的运行效率时,就有必要考虑将其绑定到单独的核上运行,以减小由于在不同的核上调度造成的开销。 把某个进程/线程绑定到特定的cpu核上后,该进程就会一直在此核上运行,不会再被操作系统调度到其他核上。但绑定的这个核上还是可能会被调度运行其他应用程序的。 操作系统对多核cpu的调度 目前windows和linux都支持对多核cpu进行调度管理。 软件开发在多核环境下的核心是多线程开发。这个多线程不仅代表了软件实现上多线程,要求在硬件上也采用多线程技术。 多核操作系统的关注点在于进程的分配和调度。进程的分配将进程分配到合理的物理核上,因为不同的核在共享性和历史运行情况都是不同的。有的物理核能够共享二级cache,而有的却是独立的。如果将有数据共享的进程分配给有共享二级cache的核上,将大大提升性能;反之,就有可能影响性能。 进程调度会涉及实时性、负载均衡等问题,目前研究的热点问题主要集中在以下方面: 程序的并行开发设计 多进程的时间相关性

快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

本小妞迷上赌 提交于 2020-04-22 08:32:26
1.Nginx日志管理 1.日志简单介绍   Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源、客户端信息、请求的资源等信息;通过错误日志(error_log)可以获取错误发生时间、错误信息等,方便我们及时定位和修复错误。看一下Nginx中日志相关的指令。 #设置 访问日志:访问日志文件为nginx/logs/mysite.access.log,格式为main   access_log logs/ mysite.access.log main;           位置 格式 #设置 错误日志:错误日志文件为nginx/logs/mysite.error.log,记录级别为error   error_log logs/ mysite.error.log error;              位置         级别 # 定义main格式的日志 log_format main ' $remote_addr - $remote_user [ $time_local ] " $request " ' ' $status $body_bytes_sent " $http_referer " ' ' " $http_user_agent " " $http_x_forwarded_for " ';  

Linux性能之CPU优化

廉价感情. 提交于 2020-04-09 18:14:43
CPU优化 我们接下来从应用程序和系统的角度,分别来看看如何才能降低 CPU 使用率,提高 CPU 的并行处理能力。 应用程序优化 首先,从应用程序的角度来说,降低 CPU 使用率的最好方法当然是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。除此之外,应用程序的性能优化也包括很多种方法,我在这里列出了最常见的几种,你可以记下来。 编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得编译器的帮助,来提升性能。比如, gcc 就提供了优化选项 -O2,开启后会自动对应用程序的代码进行优化。 算法优化:使用复杂度更低的算法,可以显著加快处理速度。比如,在数据比较大的情况下,可以用 O(nlogn) 的排序算法(如快排、归并排序等),代替 O(n^2) 的排序算法(如冒泡、插入排序等)。 异步处理:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 CPU 的问题。 多线程代替多进程:前面讲过,相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。 善用缓存:经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,这样在下次用时就能直接从内存中获取,加快程序的处理速度。 系统优化 从系统的角度来说

kubernetes 的调度

淺唱寂寞╮ 提交于 2020-03-30 17:45:09
kubernetes 的调度 标签(空格分隔): kubernetes系列 一: kubernetes的调度 二: kubernetes的节点的亲和性 三: kubernetes的污点与容忍 四: kubernetes的固定节点 一:kubernetes的调度 1.1 scheduler 的介绍 Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上。听起来非常简单,但有很多要考虑的问题: 1.公平:如何保证每个节点都能被分配资源 2. 资源高效利用:集群所有资源最大化被使用 3. 效率:调度的性能要好,能够尽快地对大批量的 pod 完成调度工作 4. 灵活:允许用户根据自己的需求控制调度的逻辑 Sheduler 是作为单独的程序运行的,启动之后会一直坚挺 API Server,获取 PodSpec.NodeName 为空的 pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上 1.2 调度过程 调度分为几个部分:首先是过滤掉不满足条件的节点,这个过程称为 predicate ;然后对通过的节点按照优先级排序,这个是 priority;最后从中选择优先级最高的节点。如果中间任何一步骤有错误,就直接返回错误 Predicate 有一系列的算法可以使用: PodFitsResources

sqlite3中的数据类型

痴心易碎 提交于 2020-03-07 06:42:33
大多数的数据库引擎(到现在据我们所知的除了 sqlite 的每个 sql 数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。 Sqlite 使用一个更一般的动态类型系统, sqlite 中, 值的数据类型跟值本身相关,而不是与它的容器相关 。 Sqlite 的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时, sqlite 中的动态类型允许它能做到一些传统刚性类型数据库所不可能做到的事。 1. 存储类和数据类型 每个存放在 sqlite 数据库中(或者由这个数据库引擎操作)的值 都有下面中的一个存储类 : l NULL ,值是 NULL l INTEGER ,值是有符号整形,根据值的大小以 1,2,3,4,6 或 8 字节存放 l REAL ,值是浮点型值,以 8 字节 IEEE 浮点数存放 l TEXT ,值是文本字符串,使用数据库编码( UTF-8 , UTF-16BE 或者 UTF-16LE )存放 l BLOB ,只是一个数据块,完全按照输入存放(即没有准换) 从上可以看出存储类比数据类型更一般化。比如 INTEGER 存储类,包括 6 中不同长度的不同整形数据类型,这在磁盘上造成了差异。但是只要 INTEGER 值被从磁盘读出进入到内存进行处理,它们被转换成最一般的数据类型( 8- 字节有符号整形

VMware中CPU分配不合理以及License限制引起的SQL Scheduler不能用于查询处理

爷,独闯天下 提交于 2020-03-03 07:47:18
VMware中CPU分配不合理以及License限制引起的SQL Scheduler不能用于查询处理 https://www.cnblogs.com/kerrycode/p/6101018.html 有一台SQL Server(SQL Server 2014 标准版)服务器中的scheduler_count与cpu_count不一致,如下截图所示: SELECT cpu_count , scheduler_count FROM sys.dm_os_sys_info; SQL Server中Scheduler数量应该与逻辑CPU的核数一致,而sys.dm_os_sys_info中的scheduler_count 为8,少于cpu_count的12个数量,那么很有可能,有一些Scheduler的状态为VISIBLE ONLINE.下面摘自 Healthy SQL: A Comprehensive Guide to Healthy SQL Server Performance SELECT is_online ,[status] , COUNT(*) AS [count] FROM sys.dm_os_schedulers WHERE scheduler_id < 255 GROUP BY is_online, [status]; 官方文档 https://msdn.microsoft

android task and activity

烈酒焚心 提交于 2020-03-02 08:22:27
a usful blog. http://changeyouforever.iteye.com/blog/1160038 android:allowTaskReparenting 用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。 如果这个特性没有被设定,设定到<application>元素上的allowTaskReparenting特性的值会应用到Activity上。默认值为“false”。 一般来说,当Activity启动后,它就与启动它的Task关联,并且在那里耗尽它的整个生命周期。当当前的Task不再显示时,你可以使用这个特性来 强制Activity移动到有着affinity的Task中。典型用法是:把一个应用程序的Activity移到另一个应用程序的主Task中。 例如,如果e-mail中包含一个web页的链接,点击它就会启动一个Activity来显示这个页面。这个Activity是由Browser应用程序 定义的,但是,现在它作为e-mail Task的一部分。如果它重新宿主到Browser Task里,当Browser下一次进入到前台时,它就能被看见,并且,当e-mail Task再次进入前台时,就看不到它了。