php array占用内存测试
[ 2010/09/21 11:12 | by selboo ]
<?php
function convert($size)
{
$unit=array(‘b’,'kb’,'mb’,'gb’,'tb’,'pb’);
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).’ ‘.$unit[$i];
}
$start=memory_get_usage(true);
$test=array();
for($i=0;$i<100000;$i++)
$test[md5($i)]=1;
echo convert(memory_get_usage(true) – $start);
function convert($size)
{
$unit=array(‘b’,'kb’,'mb’,'gb’,'tb’,'pb’);
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).’ ‘.$unit[$i];
}
$start=memory_get_usage(true);
$test=array();
for($i=0;$i<100000;$i++)
$test[md5($i)]=1;
echo convert(memory_get_usage(true) – $start);
结果:17.25 mb
意思就是10万个32位的array key,占用内存17.25M
/proc/cpuinfo
[ 2010/01/25 11:46 | by selboo ]
一些操作系统的最新版本已经更新了 /proc/cpuinfo 文件,以支持多路平台.如果您的系统中的 /proc/cpuinfo 文件能够正确地反映出处理器信息,那么就不需要执行上述步骤.反之,可采用本文中的信息进行解释.
/proc/cpuinfo 文件包含系统上每个处理器的数据段落./proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id 和 cpu cores.
processor 条目包括这一逻辑处理器的唯一标识符.
physical id 条目包括每个物理封装的唯一标识符.
core id 条目保存每个内核的唯一标识符.
siblings 条目列出了位于相同物理封装中的逻辑处理器的数量.
cpu cores 条目包含位于相同物理封装中的内核数量.
如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel.
拥有相同 physical id 的所有逻辑处理器共享同一个物理插座.每个 physical id 代表一个唯一的物理封装.Siblings 表示位于这一物理封装上的逻辑处理器的数量.它们可能支持也可能不支持超线程(HT)技术.每个 core id 均代表一个唯一的处理器内核.所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上.如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术.如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器.cpu cores 条目也可以表示是否支持多内核.
例如,如果系统包含两个物理封装,每个封装中又包含两个支持超线程(HT)技术的处理器内核,则 /proc/cpuinfo 文件将包含此数据.(注:数据并不在表格中.)
processor 0 1 2 3 4 5 6 7
physical id 0 1 0 1 0 1 0 1
core id 0 2 1 3 0 2 1 3
siblings 4 4 4 4 4 4 4 4
cpu cores 2 2 2 2 2 2 2 2
此例说明逻辑处理器 0 和 4 驻留在物理封装 0 的内核 0 上.这就表示逻辑处理器 0 和 4 支持超线程(HT)技术.相同的工作可用于封装 0 内核 1 上的逻辑处理器 2 和 6,封装 1 内核 2 上的逻辑处理器 1 和 5,以及封装 1 内核 3 上的逻辑处理器 3 和 7.此系统支持超线程(HT)技术,因为两个逻辑处理器共享同一个内核.有两种方式可以确定是否支持多内核.由于内核 0 和 1 存在于封装 0 上,而内核 2 和 3 存在于封装 1 上,所以这是一个多内核系统.此外,cpu cores 条目为 2,也说明有两个内核驻留在物理封装中.这是一个多路系统,因为有两个封装.
值得注意的是 physical id 和 core id 的编号可能是也可能不是连续的.系统上有两个物理封装并不罕见,而且 physical id 等于 0 和 3
通过physical id来判断,硬件的CPU Socket到底有几个,即按照插槽来计算的CPU
个数,如果你的是两个四核CPU,那么physical id应该是0和1;
通过sibling来判断,一个socket上的CPU是否是双核或者超线程:
如果sibling是2,而后面的cpu cores也是2,那么这个CPU则是双核;
如果sibling是1,而后面的cpu cores若是1,那么这个CPU是单核但支持超线程;
如果sibling是4,而后面的cpu cores也是2,那么这个CPU则是双核且每个核都支
持超线程;
如果sibling是4,而后面的cpu cores若是4,那么这个CPU是4核但不支持超线程
core id通常表示在一个CPU Socket上物理核心的id编号。
/proc/cpuinfo 文件包含系统上每个处理器的数据段落./proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id 和 cpu cores.
processor 条目包括这一逻辑处理器的唯一标识符.
physical id 条目包括每个物理封装的唯一标识符.
core id 条目保存每个内核的唯一标识符.
siblings 条目列出了位于相同物理封装中的逻辑处理器的数量.
cpu cores 条目包含位于相同物理封装中的内核数量.
如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel.
拥有相同 physical id 的所有逻辑处理器共享同一个物理插座.每个 physical id 代表一个唯一的物理封装.Siblings 表示位于这一物理封装上的逻辑处理器的数量.它们可能支持也可能不支持超线程(HT)技术.每个 core id 均代表一个唯一的处理器内核.所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上.如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术.如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器.cpu cores 条目也可以表示是否支持多内核.
例如,如果系统包含两个物理封装,每个封装中又包含两个支持超线程(HT)技术的处理器内核,则 /proc/cpuinfo 文件将包含此数据.(注:数据并不在表格中.)
processor 0 1 2 3 4 5 6 7
physical id 0 1 0 1 0 1 0 1
core id 0 2 1 3 0 2 1 3
siblings 4 4 4 4 4 4 4 4
cpu cores 2 2 2 2 2 2 2 2
此例说明逻辑处理器 0 和 4 驻留在物理封装 0 的内核 0 上.这就表示逻辑处理器 0 和 4 支持超线程(HT)技术.相同的工作可用于封装 0 内核 1 上的逻辑处理器 2 和 6,封装 1 内核 2 上的逻辑处理器 1 和 5,以及封装 1 内核 3 上的逻辑处理器 3 和 7.此系统支持超线程(HT)技术,因为两个逻辑处理器共享同一个内核.有两种方式可以确定是否支持多内核.由于内核 0 和 1 存在于封装 0 上,而内核 2 和 3 存在于封装 1 上,所以这是一个多内核系统.此外,cpu cores 条目为 2,也说明有两个内核驻留在物理封装中.这是一个多路系统,因为有两个封装.
值得注意的是 physical id 和 core id 的编号可能是也可能不是连续的.系统上有两个物理封装并不罕见,而且 physical id 等于 0 和 3
通过physical id来判断,硬件的CPU Socket到底有几个,即按照插槽来计算的CPU
个数,如果你的是两个四核CPU,那么physical id应该是0和1;
通过sibling来判断,一个socket上的CPU是否是双核或者超线程:
如果sibling是2,而后面的cpu cores也是2,那么这个CPU则是双核;
如果sibling是1,而后面的cpu cores若是1,那么这个CPU是单核但支持超线程;
如果sibling是4,而后面的cpu cores也是2,那么这个CPU则是双核且每个核都支
持超线程;
如果sibling是4,而后面的cpu cores若是4,那么这个CPU是4核但不支持超线程
core id通常表示在一个CPU Socket上物理核心的id编号。
谷歌贡献内存测试工具
[ 2009/11/18 14:44 | by selboo ]
Stressful Application Test(stressapptest)是一款谷歌专用的测试软件,它的大小只有不到200KB。现在,它采用了Apache license 2.0许可证,已经可以为外人所用。
为了模拟一个高负载的环境,stressappteest通过处理器和输入输出通道创造最大数量的输入压力。据谷歌的介绍,这个软件会生产线程来拷贝和直接对磁盘进行读取和写入。目标则是尽可能地载入系统内存,以便更加有效地进行测试。
该软件更多的时候测试的是内存控制器和总线接口,而不是存储单元的功能(如在Memtest86的情况下)。谷歌称,与其他内存诊断程序的比较,五分之一的内存模块相关的系统误差只能通过stressapptest发现。
你可以在谷歌的项目页面下载到该软件已经压缩好的tar包。
Google Streeapptest Team的成员,从左到右分别为:Matthew Blecker, John Huang, Rapahel Menderico, Nick Sanders, John Hawley, James Vera。
为了模拟一个高负载的环境,stressappteest通过处理器和输入输出通道创造最大数量的输入压力。据谷歌的介绍,这个软件会生产线程来拷贝和直接对磁盘进行读取和写入。目标则是尽可能地载入系统内存,以便更加有效地进行测试。
该软件更多的时候测试的是内存控制器和总线接口,而不是存储单元的功能(如在Memtest86的情况下)。谷歌称,与其他内存诊断程序的比较,五分之一的内存模块相关的系统误差只能通过stressapptest发现。
你可以在谷歌的项目页面下载到该软件已经压缩好的tar包。
Google Streeapptest Team的成员,从左到右分别为:Matthew Blecker, John Huang, Rapahel Menderico, Nick Sanders, John Hawley, James Vera。
Linux支持4G以上内存
[ 2008/11/27 22:02 | by selboo ]
问题
Linux无法支持超过4G的内存,笔者使用的Linux是CentOS 5,机器是DELL PE1950服务器。
原因:
X86系统默认寻址能力的限制
解决办法:
安装具有PAE(物理寻址扩展)功能的内核
1) 命令行下运行内核安装命令 'yum install kernel-PAE'。
2) 编辑启动配置文件 'vi /etc/grub.conf',修改default值为0。这样的做的目的是让kernel-PAE做为默认启动内核.
3) 保存配置,重启机器.
Linux无法支持超过4G的内存,笔者使用的Linux是CentOS 5,机器是DELL PE1950服务器。
原因:
X86系统默认寻址能力的限制
解决办法:
安装具有PAE(物理寻址扩展)功能的内核
1) 命令行下运行内核安装命令 'yum install kernel-PAE'。
2) 编辑启动配置文件 'vi /etc/grub.conf',修改default值为0。这样的做的目的是让kernel-PAE做为默认启动内核.
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-53.1.4.el5PAE)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.1.4.el5PAE ro root=LABEL=/1
initrd /initrd-2.6.18-53.1.4.el5PAE.img
title CentOS (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/1
initrd /initrd-2.6.18-8.el5.img
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-53.1.4.el5PAE)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.1.4.el5PAE ro root=LABEL=/1
initrd /initrd-2.6.18-53.1.4.el5PAE.img
title CentOS (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/1
initrd /initrd-2.6.18-8.el5.img
3) 保存配置,重启机器.