- 博客(654)
- 资源 (4)
- 收藏
- 关注
转载 GCC 编译优化指南
前言网上关于编译优化的文章很多,但大多零零散散,不成体系,本文试图给出一个完整和清晰的优化思路,同时提供在实践中如何进行优化的详尽参考。但是,在介绍所有优化知识之前首先引用LFS-Book中的一句忠告:“使用编译器优化得到的小幅度性能提升,与它带来的风险相比微不足道”。你还要进行优化吗?%@&#=^%~*# ... OK, crazy guy! Let's Go!!在继续之前,作者还是奉劝各位:如
2017-02-23 20:28:49
2178
转载 GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)
GRUB2模块对于GRUB-2.0.2版本来说,官方提供的模块一共有200多个,这些模块大致可以分为以下几类(模块间的依赖关系位于"moddep.lst"文件中):命令模块[command.lst]提供了各种不同的功能,类似标准Unix命令,一共将近100个。例如:cat cpuid echo halt lspci chainloader initrd linux password ...加密模块
2017-02-23 20:26:54
5335
转载 Linux 内核引导选项简介
概述内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"__setup
2017-02-23 20:20:41
5414
原创 Linux系统网络性能实例分析
由于TCP/IP是使用最普遍的Internet协议,下面只集中讨论TCP/IP 栈和以太网(Ethernet)。术语 LinuxTCP/IP栈和 Linux网络栈可互换使用,因为 TCP/IP栈是 Linux内核的组成部分,也被看作是 Linux默认的网络栈。 一、实例分析中使用的基准测试 1、 NetBench NetBench是一种 Ziff-Davis基准测试, 可以测量文件服务器对
2016-10-28 16:35:52
3706
1
原创 数据库服务器的性能调优-续
一、进程管理 企业级数据库服务器可能拥有数千个并发访问数据库的用户。某些用户可能执行只需较少处理能力的简单事务,而其他用户则可能执行涉及更多系统资源的复杂事务。 数据库性能常常基于诸如每小时的事务数或 X个并发连接下的最小响应时间等度量来讨论。这些性能约束由企业施加,以便确保客户的质量保证等级。由于对并发处理具有如此高的需求,企业级数据库服务器需要运行于大型 SMP服务器上。早期的 Linu
2016-10-28 10:15:18
1658
1
原创 数据库服务器的性能调优
一、I/O调优 在进行 I/O调优时必须做出许多决策。是否使用原始设备或文件系统?是否使用直接 I/O?应该为数据库选取多大的块尺寸? 如果正在严格地执行在线事务处理(其特征为小型的随机读/写操作)工作负荷, 则应该选择较小的块尺寸如 2KB。 对于 DSS中长期运行的查询操作而言,在实现了复杂的查询优化器以及复杂的内存(分类/散列区域)参数控制的数据库中, 更大的块尺寸会提高数据库扫描速度
2016-10-27 14:23:50
2580
原创 Linux 虚存 linux2.6内核特性
一、大型页面的支持 当代计算机体系结构大都支持多种页面大小,例如,IA-32体系结构支持4KB或4MB的页面, Linux操作系统只是将大型页面用于映射实际的内核映像。大型页面的使用主要是为了改进高性能计算(HPC)以及其他内存密集型应用的性能。任何占用大量虚存的访存密集型应用程序都可以使用大型页面来改进性能(Linux使用 2MB或 4MB的大型页面, AIX使用 16MB的大型页面,而
2016-10-26 17:38:42
1671
原创 Linux 虚存的性能问题
虚存子系统是所有 UNIX 系统的核心组件。下面讨论虚存系统的实现及其对操作系统中几乎其他所有子系统的作用和影响。首先详细说明一些基本的内存管理问题;然后具体分析 Linux 操作系统如何实施虚存管理任务。进程(也标记为任务或默认线程)通过虚存子系统能够查看地址空间中的线性字节范围,这个功能与物理内存中的物理布局或者分片情况无关。 线程可以在一个呈现为 CPU 全部地址空间的虚拟环境中执行。这种(
2016-10-25 17:41:59
1840
原创 linux系统性能监控--网络利用率
Linux中提供了许多有助于评估各种 Linux网络性能的监视工具,其中一些监视工具也可用于解决网络问题以及监视性能。 Linux内核为用户提供了大量的网络系统信息,这有助于监视网络的健康状态并检测在配置、运行期间以及性能方面出现的问题。 下面分析在大多数 Linux主要发行版本中提供的一些网络工具,包括 netstat、nfsstat、 tcpdump、 ethtool、 snmp、 if
2016-10-24 11:51:23
9500
原创 linux系统性能监控--I/O利用率
尽管整体的处理器速度、 内存大小以及 I/O执行速度在不断提高,但 I/O操作的吞吐率和延迟性能仍然要比等价的内存访问操作低多个数量级。另外,由于许多工作负荷都拥有重要的I/O组件,I/O处理很容易成为整体吞吐率和应用整体响应时间的重要瓶颈。针对 I/O操作密集的应用, 性能分析人员必须通过工具来获取关于 I/O子系统操作的信息 。 磁盘 I/O的性能经常基于吞吐率和延迟来评估。 磁盘驱动器
2016-10-17 20:12:48
5372
原创 linux系统性能监控--内存利用率
Linux提供了对物理内存进行合理、高效的访问并可以访问潜在的海量虚存的技术。虚存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时又呈现出系统拥有大量物理内存的假象。糟糕的是,卸载内存的开销可能会比应用延迟高出数十甚至上百倍。如果被换出到磁盘上的内存空间是错误的内存页,或者如果应用程序的当前内存印迹大于物理内存容量的话,那么这些过高的延迟会极大地影响应用的响应时间
2016-10-12 17:27:04
5457
原创 linux系统性能监控--CPU利用率
在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量。 Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) 。[huangc@V-02-01-00860 ~]$ uptime 11:18:05 up 78 days, 1:17, 11 users, load average: 0.20, 0.13, 0
2016-10-12 16:23:48
16073
转载 在linux系统中I/O 调度的选择
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。在linux下面列出4种调度算法CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq):这是默认算法,对于通用服务器来说通常是最好的选择。它试图均匀地分布对I/O带宽的访问。在多媒体应用, 总能保证audio、vid
2016-10-10 18:51:55
1894
转载 POSIX 消息队列相关问题
一、查看和删除消息队列要想看到创建的posix消息队列,需要在root用户下执行以下操作:# mkdir /dev/mqueue# mount -t mqueue none /dev/mqueue删除队列使用 rm 命令即可。二、查看和调整消息队列限制参考 《Linux进程通信之POSIX消息队列》1、查看消息队列大小的限制# ulimit -a |grep messagePOSIX messag
2016-04-22 14:29:48
7789
转载 linux系统的7种运行级别
Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多用户状态(没有NFS)运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式运行级别4:系统未使用,保留运行级别5:X11控制台,登陆后进入图形GUI模式运行级别6:系统正常关闭并重启,
2016-04-22 14:22:46
12625
转载 如何判断是否开启超线程
“超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。 超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,虽然采用超线程技术能
2016-04-21 21:18:32
16358
转载 如何扩展/删除swap分区
背景: 由于安装Oracle 的时候,swap太小只划分了4G,后期发现交换分区太小,不满足使用,于是进行了swap分区的扩容过程: swap分区的扩展很简单,但是需要root用户权限.[root@localhost ~]# dd if=/dev/zero of=/swap bs=1024M count=2记录了2+0 的读入记录了2+0 的写出21474836
2015-12-19 02:32:47
5661
转载 Linux 中交换空间 (swap)应该分多大才好?
前一段时间,我们机房中一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,让我过去处理一下这一问题,登录到服务器之后,发现此服务器的物理内存是16G,而最初装机的时候,系统管理人员却只分配了4G的虚拟内存。查看内存的使用状况,物理内存并没有完全耗尽,但虚拟内存已经耗尽,整个系统CPU负载和磁盘IO都非常高。 知道了问题所在是由于交换分区不足导致,那么解决方法就是:将虚拟内存通过
2015-12-19 02:12:43
18780
1
转载 Linux SWAP 交换分区配置说明
一.SWAP 说明1.1 SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。 这个是SWAP 交换分
2015-12-19 01:55:30
1769
转载 Linux中的SWAP交换分区
大多数 Linux 在系统安装时都会提醒并建议你划分一个 SWAP 交换分区,如果你是从 Windows 切换到 Linux 的新用户,兴许对这个 SWAP 会感到十分疑惑。 SWAP 交换分区到底是干什么用的呢?我们是否真的需要划一个 SWAP 分区呢?答案是:视情况而定!SWAP 分区在一些情况下可以提升 Linux 操作系统性能,但在某些情况下又会成为系统运行的瓶颈,下面我们就
2015-12-19 01:37:20
1857
原创 UDP单播和组播使用SO_REUSEADDR 测试结果
UDP单播通信一、预置条件 A、B在同一台机器,网络中存在往A、B所在的机器的8888端口发送单播UDP数据 A:端口复用绑定在端口8888上 B:端口复用绑定在端口8888上操作步骤:(1)先启动A(2)再启动B(3)B退出预期结果:(1)A 正常接收数据(2)B 正常接收数据,A收不到数据(3)A 正常接收数据二、预置条件 A、B在同一台机器,网络中存在往A、B所在的机器的8888端口发送单播
2015-11-19 21:06:56
6858
1
转载 SO_REUSEADDR和SO_REUSEPORT异同
文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t 虽然不同的系统上socket的实现方式有一些差异,但都来源于对BSD socket的
2015-11-19 20:38:57
2026
转载 malloc_stats---检查内存泄露的神器
在之前的博客中提到过,valgrind可以用来检测内存泄露,但在使用中,往往会遇到一些问题,给调试工作带来很多不必要的麻烦,我自己遇到的有以下两种: (1)内存泄露误检(系统初始化时,可能有一些需要长期保存在内存中的数据结构,这些空间是永远不释放的,而这些内存会被认为绝对泄露) (2) valgrind检查内存泄露过于全面,运行后的结果太多往往很难从中找到有用的信息。有时候,我
2015-09-10 12:44:17
1760
转载 valgrind检测内存泄漏
Valgrind 使用用法:valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具-tool=最常用的选项。运行valgrind中名为toolname的工具。默认memcheck。h -help 显示帮助信息。-version 显示valgrind内核的版本,每个工具都有各自的版本。q -quiet 安静地运行,只打印错误信
2015-09-10 11:41:35
1142
原创 IP_ADD_MEMBERSHIP 失败
/*将本机加入多播组*/ err = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,&mreq, sizeof(mreq)); if (err { perror("setsockopt():IP_ADD_MEMBERSHIP"); exit(1); }因为不同的socket版本,定义IP_ADD_ME
2015-06-24 11:17:25
5440
1
原创 linux网络编程之二-----多播(组播)编程
多播编程实例服务器端下面是一个多播服务器的例子。多播服务器的程序设计很简单,建立一个数据包套接字,选定多播的IP地址和端口,直接向此多播地址发送数据就可以了。多播服务器的程序设计,不需要服务器加入多播组,可以直接向某个多播组发送数据。下面的例子持续向多播IP地址"224.0.0.100"的8888端口发送数据"BROADCAST TEST DATA",每发送一次间隔5s。/**broadcast
2015-06-20 01:25:54
2004
原创 linux网络编程之一-----多播(组播)编程
什么是多播 组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传 送。对其形象的比喻就是类似于广播电台和电视台节目的发送。电台或电视台向特定频道发送他们的节目,而接收者可以根据自己的喜好选择频道来收听或收看节 目。 传统网络的通信方式单 播(Unicast) 在许多场合下并不合适,
2015-06-20 00:33:27
5695
转载 对 /dev/shm 认识
一、/dev/shm理论/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建 ramdisk,直接使用/dev/shm/就可达到很好的优化效果。 /dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有
2015-06-19 22:42:40
2835
原创 使用GDB调试STL容器
GDB中print方法并不能直接打印STL容器中保存的变量,想知道STL容器保存的变量,使用如下办法:1. 创建文件~/.gdbinit:# # STL GDB evaluators/vi
2015-06-19 22:31:38
1451
原创 预处理指令--C语言
ANSI标准C还定义了如下几个宏:__LINE__ 表示正在编译的文件的行号__FILE__ 表示正在编译的文件的名字__DATE__ 表示编译时刻的日期字符串,例如:“25 Dec 2014”__TIME__ 表示编译时刻的时间字符串,例如:“12:30:55”__STDC__ 判断该文件是不是定义成标准C程序 如果编译器不是标准的,则可能仅支持以上宏的一部分,或根本不支持。当然编译器也有
2015-03-03 11:32:07
1286
原创 系统时钟和硬件时钟同步
硬件时钟调整与系统时钟一致://system("hwclock -w")int SyncSystemClockToHw(void){ struct timeval tv; struct tm tm_time; int fd; int ret = 0; ret = access("/dev/rtc1",F_OK); if(0 == ret) { fd = open("/dev/
2015-01-22 16:34:29
4089
转载 proc文件系统探索 之 根目录下的文件[三]
包括对proc根目录下meminfo文件的解析。> cat /proc/meminfo 读出的内核信息进行解释,下篇文章会简单对读出该信息的代码进行简单的分析。MemTotal: 507480 kBMemFree: 10800 kBBuffers: 34728 kBCached: 98852 kBSwapCached: 128 kBActive: 304248 kBInactive
2014-12-28 02:59:14
1920
转载 proc文件系统探索 之 根目录下的文件[二]
包括对proc根目录下stat,uptime,swaps三个文件的解析。/proc/stat文件包含了系统启动后的一些系统统计信息。Cat /proc/stat:cpu 77781 1077 7602 390390 13232 216 100 0 0cpu0 77781 1077 7602 390390 13232 216 100 0 0intr 401502 313 2041 0 2 1
2014-12-28 02:52:37
1340
转载 proc文件系统探索 之 根目录下的文件[1]
2.1根目录下的文件2.1.1lock文件内核锁,记录与被打开的文件有关的锁信息。该文件显示当前被内核锁定的文件。该文件包含的内容是内核调试数据,根据使用的系统的这些数据会变化很大。一个/proc/locks文件会和下面的相似:niutao@niutao-desktop:/proc$ cat locks1: POSIX ADVISORY READ 12944 08:0f::48897 10737
2014-12-28 02:47:04
1328
转载 proc文件系统探索 之 以数字命名的目录
在proc根目录下,以数字命名的目录表示当前一个运行的进程,目录名即为进程的pid。其内的目录和文件给出了一些关于该进程的信息。niutao@niutao-desktop:/proc/6584$ lsattr coredump_filter fd maps oom_score statmauxv cpuset fd
2014-12-28 02:25:49
4855
转载 Linux 性能监控、测试、优化工具
下面的三张图片分别总结了 Linux 各个子系统以及监控、测试、优化这些子系统所用到的工具。监控测试优化from:http://www.vpsee.com/2014/09/linux-performance-tools/
2014-12-28 02:14:28
1618
转载 理解Linux系统负荷
一、查看系统负荷如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。)你在终端窗口键入uptime,系统会返回一行信息。这行信息的后半部分,显示"load average",它的意思是"系统的平均负荷",里面有三个数字,我们可以从中判断系统负荷是大还是小。为什么会有三个
2014-12-28 02:05:07
1314
转载 linux:如何指定进程运行的CPU
coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。同时,因为最近在看redis的相关资料,redis作为单进程模型的程序
2014-12-28 01:59:37
1952
转载 linux:cpu 每-CPU 的变量
每-CPU 的变量每-CPU 变量是一个有趣的 2.6 内核的特性. 当你创建一个每-CPU变量, 系统中每个处理器获得它自己的这个变量拷贝. 这个可能象一个想做的奇怪的事情, 但是它有自己的优点. 存取每-CPU变量不需要(几乎)加锁, 因为每个处理器使用它自己的拷贝. 每-CPU 变量也可存在于它们各自的处理器缓存中, 这样对于频繁更新的量子带来了显著的更好性能.一个每-CPU变量的好的使用例
2014-12-28 01:55:22
1271
转载 linux:CPU私有变量(per-CPU变量)
一、简介2.6内核上一个新的特性就是per-CPU变量。顾名思义,就是每个处理器上有此变量的一个副本。per-CPU的最大优点就是,对它的访问几乎不需要锁,因为每个CPU都在自己的副本上工作。tasklet、timer_list等机制都使用了per-CPU技术。二、API使用注意,2.6内核是抢占式的。所以在访问per-CPU变量时,应使用特定的API来避免抢占,即避免它被切换到另一个CPU上被处
2014-12-28 01:51:54
3247
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人