Unix 的早期版本包括 Doug McIlroy 的工具tmg
(“transmogrifier”),一个早期的编译器-编译器。TMG 是用 Dennis Ritchie 的汇编语言以及 TMGL 本身(TMG 翻译成汇编的语言)实现的。这是TMG 的手册(1972)。这是来自第 6 版 Unix 的完整源代码。
由于我试图了解 McIlroy 对 TMG 的实施是如何工作的,因此我正在阅读该文件tmgl.s
,这tmgl.t
是由 TMG 完成的翻译。我对以下摘录感到困惑:
.1=.
1
.2=.
2
.3=.
Run Code Online (Sandbox Code Playgroud)
和:
goto;..2
..3:null
..2:
Run Code Online (Sandbox Code Playgroud)
我阅读了PAL-11R和Unix 汇编手册,但不记得有任何解释。
特别:
.
意思是“位置计数器”,但什么是.3=.
?..
意思是“搬迁柜台”,但什么是..3
?(更糟糕的是,这种语法似乎只在 TMG 实现中遇到,而不是 Unix V6 的任何其他源文件。而且,为了排除损坏代码或逐步淘汰语法的可能性,TMG 源实际上是在Python 中编译的运行 Unix V6 的PDP-11 模拟器。)
他们不!至少,不适合我。
看我的回答。
根据去年的 Phoronix 基准测试,FreeBSD 上的应用程序运行速度大多比 Debian 慢(包括 Stockfish 国际象棋引擎、Node.js、FLAC 编码和其他计算任务)。
Phoronix 文章本身将一些性能差异归因于使用 Clang 而不是 GCC 编译器。其他一些意见说,使用ZFS使得FreeBSD的慢,因为ZFS是天生就比EXT4慢。
但即使是在用 GCC8 编译的 FreeBSD 上的纯计算任务也比在 Linux 上执行得慢。
那是什么原因呢?它是固有的FreeBSD和Linux内核之间的差异可能是由驱动程序的质量越差造成的或者是有其他原因?
PS为了更具体,这里有一个相当简单的纯计算程序,根据 Phoronix:m-queens 1.2,它在 FreeBSD 上的运行速度比在 Linux 上慢。编译如下:
gcc -o m-queens.bin main.c -O2 -march=native -mtune=native -std=c99 -fopenmp
Run Code Online (Sandbox Code Playgroud)
由于这是这两个20核CPU上运行多线程任务,我怀疑的性能差异归结为OS手柄多线程有多好。
PPS为了使它更清楚,我知道,FreeBSD有良好的网络功能,并且它使用Netflix的。现在的问题是专门关于计算任务,像上面的。
PPPS在我的 6 核桌面和 Ubuntu 上安装 FreeBSD (TrueOS) 并尝试自己运行 Queens 基准测试后,我没有注意到多线程性能有任何显着差异。虽然 Phoronix 声称它在 FreeBSD 上的运行速度慢了 39%,但在我的测试中它只慢了 3.7%,这可能是由于编译器版本的细微差异(TrueOS 上的 gcc 7.4,Ubuntu 上的 gcc 7.2)。我稍后会测试更多。