龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 2646|回复: 7

Fedora 21 for Loongson / Loongnix 1.0 系统特性介绍(二)——64位和Multilib

[复制链接]
发表于 2015-10-29 14:48:07 | 显示全部楼层 |阅读模式
本帖最后由 冲天飞豹 于 2015-11-2 09:41 编辑

前言

    从我开始接触龙芯的时候,当时最新的是龙芯2E,这就已经是一款64位的处理器了,可使用的操作系统还是32位的,所以当时就做过一个基于LFS的64位系统,当时加入了一个自己设计的包管理,勉为其难发布了当作第一个基于龙芯的64位Linux发行版的系统,这个系统呢有很多特点,第一……(无数鸡蛋飞来~),好吧,我们把主题切回来。
    我主要是想说当时龙芯系统的64位软件环境真的还很不完善,但是现在不同了,得益于整个计算机行业的64位系统化,许多软件在64位的支持上都得到了改善,当然很多Linux下的开源软件虽然支持x86的64位,但对MIPS的64位支持并不好,甚至无法支持,好在咱们用的开源软件,所以有啥东西都可以从代码的角度来处理。
    现在x86上64位的桌面系统已经是普遍存在的了,所以龙芯的系统也不能总在32位上自满了,那么这次我们就将系统的基调定为64位的Loongson3/MIPS64 的系统。

关于Loongson(MIPS)64位

    我简单的介绍一下Loongson的指令集和abi:
    指令集:mips1、mips2、mips3、mips4、mips32、mips32r2、mips64、mips64r2等
    abi:O32、N32、64等
    指令集主要是包含了各种操作指令实现的约定,而ABI这主要是规定了程序各方面调用的约定,如寄存器的使用。
    我们这里指的64位系统通常是指ABI=64的情况,当然我们使用的指令集也使用了mips64r2,但即使ABI=O32也是同样可以使用mips64(r2)指令的,另一个64位系统的主要特征是,位于/bin或者/lib(32,64)之类目录下的可执行文件或者库文件是使用ELF64的格式,而32位的系统是ELF32。
     关于64 ABI相关的内容可以参考Heiher的一篇文章:https://hev.cc/2570.html
     另外有个问题要能回答清楚还是不容易的,那就是“用Loongson/MIPS 64位究竟有什么好处?”,这个问题其实我回答的不好,但还是尝试的回答一下。
     我觉得64位指令集最主要的一点就是有大量使用64位长的指令,这些指令相比32位长可以同时处理的数据量多了一倍,如果指令执行的周期一样的情况下,那么处理数据的性能可以提高一倍,当然这个是理论上的,而目前大量的程序设计的时候并没有充分使用64位长优势,所以同样的程序在编译为64位的可执行文件后并没有提高执行效率,反而由于64位的程序文件会比32位的大一些,甚至会出现64位的程序执行的比32位程序更慢。
     另外,我们再看一个简单的程序,代码如下:
#include <stdio.h>
int main()
{
        printf("char:%d\n", sizeof(char));
        printf("short:%d\n", sizeof(short));
        printf("int:%d\n", sizeof(int));
        printf("long:%d\n", sizeof(long));
        printf("long long:%d\n", sizeof(long long));
        printf("float:%d\n", sizeof(float));
        printf("double:%d\n", sizeof(double));
        printf("void *:%d\n", sizeof(void *));
        return 0;
}
     这是一段查看不同变量类型长度的程序,使用32位编译后的运行结果为:
char:1
short:2
int:4
long:4
long long:8
float:4
double:8
void *:4
     64位的编译执行后的结果为:
char:1
short:2
int:4
long:8
long long:8
float:4
double:8
void *:8
    可以看出,有两种变量类型的尺寸是不一样的:long和指针类型(void *),所以软件程序如果使用这两种类型的变量就要注意有可能存在代码兼容性的问题,所以有时候32位编译运行正常的程序不一定编译为64位程序还可以正常运行。
    以上说明软件从32位到64位并不是想当然的提高了性能,不但存在降低执行性能的可能,而且还有代码兼容的问题,但我不是想说64位没有了优势,只是目前很多软件还没有发挥64位的优势,所以大家要能够理解目前一些程序执行效率并没有提高的事实。

    那我们这个64位系统的意义在哪里?
    首先,在现在的很多图形图像处理中,或者一些软件中会使用大量的浮点运算,而浮点运算多数都是64位、128位,甚至更高位数的计算,这个时候64位的指令处理能力就被发挥出来了,因此64位系统明显会在一些大量浮点运算的软件中提升优势,这点可以通过spec的浮点运算性能相关的用例测试数据中看出来。
    再将眼光放长远一些,当64位成为主流的时候,大量软件的64位优化将使软件的执行效率提高,这会成为趋势。

    所以,目前的Fedora 21 for Loongson也许在某些软件的执行效率上未必比现在32位的系统上运行的更快,甚至还会慢一些,但至少64位为软件的提速提供了空间。

关于Multilib
     正如上面的篇幅介绍的,64位和32位是存在兼容性的问题,所以32位程序和64位程序并不能共享同一段代码,因此也不能共享同一个库文件,Linux系统用一个粗匡的方式描述一个程序执行的需要就是:
      内核+可执行程序
     现在多数Linux系统都会使用共享库的方式来把通用的代码提取出来,那么就变成:
        内核+共享库+可执行程序
     目前来说Linux作为内核可以提供32位和64位的兼容支持,因为目前一个系统还是同一时刻只有一个跟自己相关的内核在运行,而共享库目前还没有做到同一个文件同时兼容32位和64位,那么如果一个64位的系统中我还想运行一些32位的程序时该如何呢?
     方法1:直接编译一个不依赖任何共享库的执行文件;
     方法2:在其它32位的Linux系统上编译一个静态的执行文件,该方法原理同方法1;
     方法3:在64位系统中想办法同时提供64位和32位的共享库,运行32位程序的时候就使用32位的共享库,这个方法我们就成为“Multilib”。

     Fedora 21 for Loongson采用的就是Multilib的方案,我们在Linux系统中加入了大量的32位共享库,目前已提供了能支持32位程序能使用基本的图形库的要求,如GTK+、QT等。
     MIPS除了32和64的ABI外,还支持一种叫做N32的ABI,它的类型长度同32位一样,但程序对寄存器调用的规范却和64位相同,所以在某些情况下N32有自己的优势,但目前使用的并不多。
     Fedora 21 for Loongson 首次将3中ABI的Mutilib方案支持程度提高到图形环境下。

     宗上所述,为什么称呼Fedora 21 for Loongson叫做64位系统呢?
     最主要的原因是,几乎Fedora 21 for Loongson编译的软件都带有64位执行文件,而32和N32的软件包目前只支持到基本的图形系统,总的来说系统是靠64位软件支撑运行的,32和N32支持软件的范围目前是一致的。

     关于32和N32软件支持程度这里也可以说明一下,支持32位的软件更多的是位了能使用第3方以前基于32位Linux系统开发的软件,以及当前还无法运行在64位下的软件而提供的必要迟迟,我们根据目前在Loongson平台上主要的Linux操作系统涉及到的第3方软件,当前32位支持到基础图形库就基本满足绝大多数32位第3方软件的运行,而大量自带的软件因为已经有了64位的软件包则无需再提供32位的版本。

      Fedora 21 for Loonson提供的Multilib是在Loongson平台上第一次提供的真正意义上的Multilib,之前声称提供Multilib的多数情况只提供了GLibc的支持,几乎没有用处,要说明我们这个Multilib的现实和实际作用,我们来举个例子:当前支持Loongson的Flash播放插件只有32位版本,并且无法得到源代码进行修改或者重新编译,要在64位的软件环境下使用就要在我们提供了大量的Multilib库后,这个32位的插件可以运行在64位的系统中了,所以Fedora 21 for Loongson是第一个也是目前唯一在Loongson平台上可以在64位系统中使用Flash插件的系统。

  总结:
           本次特性介绍中的两点是相互关联的,64位系统目前运行效率不一定比32位的系统高,但我们为将来提升软件性能提供了有效的平台,并且目前在浮点类相关的软件已经可以获得相当的性能优势;在朝着64位发展方向进发的同时我们也不能放弃当前32位的现实需求,在此基础上我们实现了一个真正有意义的Multilib环境,保证当前的应用可以很好的在Fedora 21 for Loongson上运行。
发表于 2015-11-5 18:45:44 | 显示全部楼层
大赞!!!在专业领域64位太重要了。音频,图形,多媒体。
发表于 2015-11-21 15:30:54 | 显示全部楼层
你发的有错阿,“我觉得64位指令集最主要的一点就是有大量使用64位长的指令”
MIPS64R2的指令也是32长的啊
发表于 2015-11-21 21:49:02 | 显示全部楼层
sunboy1987910 发表于 2015-11-21 15:30
你发的有错阿,“我觉得64位指令集最主要的一点就是有大量使用64位长的指令”
MIPS64R2的指令也是32长的啊

指令本身是32位长没错,楼主说的是操作64位数的指令。
 楼主| 发表于 2015-11-26 16:28:03 | 显示全部楼层
不能拿你这个例子来否定64位啊~~

殊不知256M的内存却是不合适使用64位系统,现在也没几个64位的机器还配置一个1G以下的内存。
 楼主| 发表于 2015-11-26 20:55:54 | 显示全部楼层
好吧,我承认我语文学的不好,我还是没有看出来你的意思,我去继续学习了~
发表于 2016-6-6 10:37:09 | 显示全部楼层
龙芯还是一个孩子;
我们要爱护他,但不能溺爱他;
他的缺点和错误我们要批评,改正了还是好孩子;我们不能因为他的缺点和错误而打骂他,更不能因此抛弃他;
在他还是孩子的时候我们不能用世界冠军的标准来要求他,但我们要用世界冠军的目标来科学的培养他
发表于 2016-6-20 15:19:29 | 显示全部楼层
Inter 64位 CPU,可以模拟成2个32CPU,MIPS也可以吗?其实,对于普通应用,32足够。64位浪费资源(内存,硬盘)

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-1-20 11:03 , Processed in 0.197122 second(s), 19 queries .

快速回复 返回顶部 返回列表