大家还会考虑 32 位系统吗?

2014-12-16 09:09:44 +08:00
 initialdp
貌似现在大部分都已经是64位系统,CentOS7都不再发布32位版本。这种情况下,大家安装新系统或者发布新软件时,是否只用考虑64位?我个人感觉只有一些遗留系统还是32位的。
9976 次点击
所在节点    Linux
59 条回复
librehat
2014-12-16 19:01:59 +08:00
@initialdp @gnup 占用更大的内存是没错的,这就是一个trade-off,32位系统是根本用不到4G内存的,没有PAE的情况下只有3G多一点,现在旗舰手机都超2G的时代,3~4G内存的电脑估计过不了一两年就会淘汰掉了。

其实这也是看用途吧,没有必要一窝蜂全部上64位,计算密集型的肯定要上64位,而低功耗、移动设备上64位意义不是很大。至于游戏?我呵呵,代表游戏产业的不是只有PC好吗,自己去看Xbox One还有PS4……游戏主机才代表游戏的未来,有的主机上一代就开始用64位了。64位除了更大的内存,还有更多的指令集,以及更大的register地址。
gnup
2014-12-16 19:13:22 +08:00
@librehat

64位的优点谁都知道,64位也是未来。

看清我说的重点 4G以内的内存是32位还是64 位!
msg7086
2014-12-16 20:55:21 +08:00
@gnup

#18楼 QUOTE { 内存占用单字节变双字节,双字节变四字节,以此类推,内存占用必然增多。 }

#21楼 REPLY { 单字节变双字节是什么鬼?只有指针会从32位变成64位,数据又不会变。 }

#35楼 QUOTE { 简单来说、64位和32位、他们处理整数数据单元的大小 一个是64位(8字节) 一个是32位。64位系统占用的内存地址也是64位、因而比32位要耗内存。 }

我就引用上面的对话,你自己看你说的是什么,我说的是什么。
你觉得32位下占用1KB的char[1024]到了64位下会占用2KB么……

另外64位系统下32位程序性能比64位好我也是醉了。32位应用程序白白比64位程序少用了一堆寄存器,竟然还能运行得更快,有此黑科技请务必告诉我这是怎么做到的。

度娘百科还是不要引用的比较好,否则会引起很多笑话的。
gnup
2014-12-16 21:13:39 +08:00
@msg7086
你说你弱智不,还当自己会点啥!
你都指定char[1024]了,他必然是1024.能不能在弱点!!!

是32位CPU,跟64位CPU比较.麻烦你看字能不能仔细点

度娘的东西怎么也不你说的靠谱
msg7086
2014-12-16 21:35:47 +08:00
@gnup 顿时开始同情起你的逻辑能力了。

先是自己说单字节变双字节,双字节变四字节,以此类推,我举个单字节的char又说不会变,打自己脸也不能这样打啊,看着都没意思。

引用你#35楼 「即使是64bit处理器,目前情况下也是在32bit应用下性能更强。」

能不能麻烦你自己发的东西自己看仔细点?

要是你真的觉得度娘能比我靠谱,那我们还是不要聊下去了,位面不同没法谈。
至于骂人弱智嘛,我也不是不能理解。总有人觉得别人都是弱智就自己智商特别高,特别优越。
gnup
2014-12-16 21:35:51 +08:00
一帮XX.都以为自己会点啥,轮番车轮战.

都跟你说了,你用32 跟 64的系统测试下,对比下,看看是不是64的占用内存非常大.
都在闭着眼睛说话.

多做几次测试看看,内存占用那么大,你行你就给我解释解释.
都办瓶子水,还真以为自己懂呢
cchange
2014-12-16 21:37:45 +08:00
有些行业 像我们的工控行业用旧系统很正常,有些软件有十年以上的历史。 现在工业现场用VB6 VC6比比皆是……
initialdp
2014-12-16 21:44:11 +08:00
@cchange 是的。遗留系统、嵌入式系统,当然不得不保留对32位、甚至16位系统的支持。

对于新的服务器端程序(基于x86-64),尤其是基于通用linux系统(例如CentOS、ubuntu等)的程序,我觉得可以考虑放弃32位版本了,同时维护两个版本的话对小公司而言成本有点高。
gnup
2014-12-16 21:54:01 +08:00
@msg7086
你接话能力可挺强啊
好,这个帖子,我不回复任何人了,就单独跟你聊下去

你先测试下.64位与32位比,双倍的内存占用,你解释下.
gnup
2014-12-16 22:07:34 +08:00
@msg7086

也不用那么多废话了.
整理了下你的思路,你的意思 "指针会从32位变成64位" 而数据内存占用不会变

我知道你根本可能都没测试过,就来讲一些不靠谱的理论.

你就说这多出近一倍的内存占用是谁占用?去哪了?为什么内存开销这么大?也总得有个用途吧?
别平白无故的被64位用的内存,被你一说好像没用是的.

你连测试都懒得测试,你能讲出什么理论啊
msg7086
2014-12-16 22:24:20 +08:00
@gnup 大清早的不想聊太多这种事情,累。

还是那句话,64位和32位比,不是比个浏览器比个魔兽就能解决问题的。
每个应用的情况都不一样。

比如32位程序因为有内存寻址模型影响,所以有2G的上限。
就算打开LAA大内存寻址,最大寻址空间也不能超过3G,因为3G以外的区域是内核保留的。
对于仅仅只有2G大小的内存空间来说,像山口山这样的程序就必须严格限制自己的内存消耗。
明明读取了一张图片或者一个材质,却因为顾及内存大小而不得不在稍后就清理掉以释放内存。

而对于64位的程序来说,内存空间可以用起来更轻松。
稍后还会用到的图片或者资源,就先在内存里放一下,反正就算整体内存占用超过2G也不会出问题。
这样虽然内存占用更大了,但是运行起来更流畅,延迟是更小。

山口山这种即时游戏,当然是运行效能越高越好。
浏览器里大量的图片、图层、javascript代码、flash广告,当然也是效能越高越好。
为了效能,多使用一些内存,就和ramdisk一样。要是这样就指责说占用内存过多,实在是冤枉了。
因此说64位的软件可以运行得更快,不只是纸上谈兵,是有实际依据的。

另外64位下可用的寄存器也更多。32位程序做64位计算的时候,必须要用到SSE指令集才能快速计算,否则就只能用32位计算来模拟,效率非常差。64位指令集加入了RAX等扩展寄存器,直接在寄存器上就可以做64位运算,节约了拷贝到SSE寄存器的时间,或是用32位计算来模拟的时间。

而且64位程序在编译的时候可以更好地利用编译器特性进行优化。例如现在很多Linux发行版里的32位程序都是基于i386编译,因为32位从20多年前的386就出现了。而64bit则可以直接对应现代处理器,例如P4或者速龙之后的版本,因此可以直接假定处理器会带有SSE指令集,也因此所有的可以并行的操作,都会去用SSE指令集来优化。例如memcpy,32位下为了兼容性可能只能逐字节复制,最多用MMX来优化(但是会和浮点数运算冲突),而64位下可以直接做MEM->XMMREG->MEM的批量复制,速度快得多。

对比以下代码
32位,i386兼容:
MOV EAX, [p]
MOV [q], EAX
一次复制4字节

64位,使用SSE:
MOVNTDQA XMM0, [p]
MOVNTDQA [q], XMM0
一次复制16字节

后者的性能至少是前者的2倍或者更多。

所以在同一个基准线上,64位的程序会运行得更快。
gnup
2014-12-16 22:56:59 +08:00
@msg7086

你的意思是64位内存占用大不是白用的,是被缓存了.开发人员用起来也会比较轻松.不用考虑太多内存占用的问题.你是想说类似MongoDB这种内存数据库吧,但是内存也得够大啊.

你举的64位的例子得在大量运算的情况下才明显,运算量小差别不明显.这是64位的优点.
而内存的开销相对与32位系统要大很多.

而对于4G的内存的64位系统,装上了你这样肆无忌惮的使用内存的程序.而不考虑内存情况,那结果就是内存不够用.或使用虚拟内存,或程序崩溃.

4G的内存32位的系统可以使用的非常舒服,而换成64位后,马上感觉内存不够了就必须升级内存.
这时32位系统的优势就明显了.吃内存少.这也是我想说的,4G以下的内存32位的系统
msg7086
2014-12-16 23:19:36 +08:00
@gnup MongoDB只是其中一个特例。
我上面也说了,具体的情况需要具体分析,每个应用的情况都不一样。
有些软件对速度要求高,所以他们更吃内存一些。
你不能在享受到速度快的同时又去指责内存消耗大。
对于只有4G内存的系统来说,挑选合适的软件才是更重要的。
玩游戏的话本来就应该配置更多的内存以优化性能。
玩山口山天天H RAID或者5H的你只配个4G内存是几个意思。
应用程序,比如像Chrome这样的浏览器,以多进程高性能为卖点,本来就是吃内存吃得多。
如果要省着内存用,Opera显然是更合适的,省着点用2G内存都能跑得欢。
弹性内存占用,大内存吃得多,小内存吃得少,速度和资源占用兼顾。

至于4G内存。说起来我用4G已经是很久很久以前的事情了。
记得最起码4年前就已经在用8G了,3年前就在用16G了。

另外我从第一个回帖就已经说了,我针对的论点是你说的一变二的占用。
我不否认4G内存用32位更好,但是我不能接受你说的64位下占用率直接变2倍这种没有科学依据的说法。
只看表面现象不讨论本质,实在谈不上是科学依据。

这就天亮了,我也不多说了,睡觉去了。
ryd994
2014-12-17 02:54:49 +08:00
看楼上论战我也是醉了,32位消耗略小这是有的
so what?
于是就该大多数人迁就少数老爷机?而且即使是4g以下,性能就真的差那么远么?能用老爷机的人,都是只上上网看看电影的人,谈什么性能?要用老爷机来玩游戏的人,只有一个原因,没钱。
以少数人的少量性能损失为代价,减轻了维护成本,加快了开发,事实上对所有人包括老爷机用户都是有利的
希望各位的讨论围绕主题,不要歪到单纯的性能比较上去,否则我还可以说单片机上8位最好
esile
2014-12-17 03:05:58 +08:00
小vps继续32位
initialdp
2014-12-17 08:26:50 +08:00
@esile 这得看小到什么程度啊。我觉得内存低于512M,可以使用32位,超过512M的都可以直接上64。

以我们生产环境的服务器(Debian系统)为例,32位系统时内存占用190M,CPU平均为5.1%,升级为64位系统后内存占用大约是200M, CPU平均为5%。内存占用略有提升,效率略有提高。

因此我觉得以目前的市场环境,内存不是制约因素,更好的扩展性、更强大的底层支持,都值得将系统升级到64位。另外非常重要的是,统一到64位,开发者的维护成本也要少一些。
wy315700
2014-12-17 09:03:20 +08:00
@initialdp

虚拟机里 64位系统的进程切换更慢了

用sysbench测试的结果,
32位系统进程切换效率是64位的2倍

因为寄存器更多,需要更多的资源去调度
choury
2014-12-17 09:08:08 +08:00
@gnup 如果你看了32位和64位的代码调用传参的规定就不会这么认为了

以下内容来自https://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A

在32位下面,所有参数都是压栈传递(除了fastcall,因为这个调用方式没有标准)

而在64位系统下面,微软x64调用约定使用RCX, RDX, R8, R9这四个寄存器传递头四个整型或指针变量(从左到右),使用XMM0, XMM1, XMM2, XMM3来传递浮点变量。

头六个整型参数放在寄存器RDI, RSI, RDX, RCX, R8和R9上,同时XMM0到XMM7用来放置浮点参数。

所以说除非你的程序不进行任何其他的函数调用,否则对性能上肯定是有提升的,不要相信百度百科的鬼话。
Ixizi
2014-12-17 09:22:40 +08:00
32位用 的只会越来越少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX