极度缓慢(在“如何设计程序-初学者”语言中执行“(+ 1 1)”需要超过十秒钟)

9

我刚刚安装了DrRacket,并尝试使用“如何设计程序-入门学生”语言。

Racket - 一种可编程的编程语言

Racket - 入门指南

当我运行(+ 1 1)时,它需要超过十秒才能显示出结果:

Welcome to DrRacket, version 6.5 [3m].
Language: Beginning Student; memory limit: 128 MB.
2
> 

据我所知,我的安装基本上是“开箱即用”的。
我想知道的是,如果我的体验很不寻常,是否有明显的方法来排除故障(我已经查看了设置,没有找到任何明显的调整选项),或者可能整个HTDP语言已经被悄悄地放弃了吗?
编辑1:
我有这些文件:
/usr/share/racket $
find -iname "*htdp*.zo"
./pkgs/htdp-lib/lang/private/compiled/create-htdp-executable_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-reader_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-beginner-abbr-reader_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-langs-save-file-prefix_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-advanced-reader_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-intermediate-lambda-reader_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-advanced_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-beginner-abbr_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-intermediate_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-intermediate-reader_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-langs_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-beginner_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-intermediate-lambda_rkt.zo
./pkgs/htdp-lib/lang/compiled/htdp-beginner-reader_rkt.zo
./pkgs/htdp-doc/scribblings/htdp-langs/compiled/htdp-langs_scrbl.zo
./pkgs/htdp-doc/scribblings/htdp-langs/compiled/htdp-ptr_scrbl.zo
./pkgs/htdp-doc/htdp/compiled/htdp_scrbl.zo
./pkgs/htdp-doc/htdp/compiled/htdp-lib_scrbl.zo
./pkgs/htdp-doc/teachpack/htdp/scribblings/compiled/htdp_scrbl.zo
./pkgs/htdp-doc/teachpack/2htdp/scribblings/compiled/2htdp_scrbl.zo

编辑2 - CPU和硬盘规格

CPU(中央处理器)

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model               : 28
model name      : Intel(R) Atom(TM) CPU N450   @ 1.66GHz
stepping        : 10
microcode       : 0x107
cpu MHz             : 1000.000
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id             : 0
cpu cores       : 1
apicid              : 0
initial apicid  : 0
fpu                 : yes
fpu_exception   : yes
cpuid level     : 10
wp                  : yes
flags               : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dtherm
bugs                :
bogomips        : 3325.00
clflush size    : 64
cache_alignment : 64
address sizes   : 32 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model               : 28
model name      : Intel(R) Atom(TM) CPU N450   @ 1.66GHz
stepping        : 10
microcode       : 0x107
cpu MHz             : 1000.000
cache size      : 512 KB
physical id     : 0
siblings        : 2
core id             : 0
cpu cores       : 1
apicid              : 1
initial apicid  : 1
fpu                 : yes
fpu_exception   : yes
cpuid level     : 10
wp                  : yes
flags               : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts nopl aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dtherm
bugs                :
bogomips        : 3325.00
clflush size    : 64
cache_alignment : 64
address sizes   : 32 bits physical, 48 bits virtual
power management:

高清

$ sudo hdparm -I /dev/sda
/dev/sda:

ATA device, with non-removable media
    Model Number:       Hitachi HTS545016B9A300                 
    Serial Number:      100324PBPB06ECC0K6XL
    Firmware Revision:  PBBOC60F
    Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6; Revision: ATA8-AST T13 Project D1697 Revision 0b
Standards:
    Used: unknown (minor revision code 0x0028) 
    Supported: 8 7 6 5 
    Likely used: 8
Configuration:
    Logical                 max current
    cylinders       16383   16383
    heads                   16  16
    sectors/track   63      63
    --
    CHS current addressable sectors:   16514064
    LBA    user addressable sectors:  268435455
    LBA48  user addressable sectors:  312581808
    Logical/Physical Sector size:           512 bytes
    device size with M = 1024*1024:      152627 MBytes
    device size with M = 1000*1000:      160041 MBytes (160 GB)
    cache/buffer size  = 7208 KBytes (type=DualPortCache)
    Form Factor: 2.5 inch
    Nominal Media Rotation Rate: 5400
Capabilities:
    LBA, IORDY(can be disabled)
    Queue depth: 32
    Standby timer values: spec'd by Vendor, no device specific minimum
    R/W multiple sector transfer: Max = 16  Current = 16
    Advanced power management level: 254
    Recommended acoustic management value: 128, current value: 254
    DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
         Cycle time: min=120ns recommended=120ns
    PIO: pio0 pio1 pio2 pio3 pio4 
         Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
    Enabled Supported:
       *    SMART feature set
            Security Mode feature set
       *    Power Management feature set
       *    Write cache
       *    Look-ahead
       *    Host Protected Area feature set
       *    WRITE_BUFFER command
       *    READ_BUFFER command
       *    NOP cmd
       *    DOWNLOAD_MICROCODE
       *    Advanced Power Management feature set
            Power-Up In Standby feature set
       *    SET_FEATURES required to spinup after power up
            SET_MAX security extension
            Automatic Acoustic Management feature set
       *    48-bit Address feature set
       *    Device Configuration Overlay feature set
       *    Mandatory FLUSH_CACHE
       *    FLUSH_CACHE_EXT
       *    SMART error logging
       *    SMART self-test
       *    General Purpose Logging feature set
       *    WRITE_{DMA|MULTIPLE}_FUA_EXT
       *    64-bit World wide name
       *    IDLE_IMMEDIATE with UNLOAD
       *    WRITE_UNCORRECTABLE_EXT command
       *    {READ,WRITE}_DMA_EXT_GPL commands
       *    Segmented DOWNLOAD_MICROCODE
       *    Gen1 signaling speed (1.5Gb/s)
       *    Gen2 signaling speed (3.0Gb/s)
       *    Native Command Queueing (NCQ)
       *    Host-initiated interface power management
       *    Phy event counters
       *    NCQ priority information
            Non-Zero buffer offsets in DMA Setup FIS
       *    DMA Setup Auto-Activate optimization
            Device-initiated interface power management
            In-order data delivery
       *    Software settings preservation
       *    SMART Command Transport (SCT) feature set
       *    SCT Write Same (AC2)
       *    SCT Error Recovery Control (AC3)
       *    SCT Features Control (AC4)
       *    SCT Data Tables (AC5)
Security: 
    Master password revision code = 65534
        supported
    not enabled
    not locked
        frozen
    not expired: security count
        supported: enhanced erase
    64min for SECURITY ERASE UNIT. 66min for ENHANCED SECURITY ERASE UNIT. 
Logical Unit WWN Device Identifier: 5000cca5ffc040a7
    NAA             : 5
    IEEE OUI    : 000cca
    Unique ID   : 5ffc040a7
Checksum: correct

编辑3个命令行时间

在HTDP-beginner中运行(+ 1 1)三次 - 超过5秒。

$ time racket -t racket_HTDP_beginner.rkt
2
5.60user 1.04system 0:08.46elapsed 78%CPU (0avgtext+0avgdata 127968maxresident)k
5496inputs+0outputs (46major+40955minor)pagefaults 0swaps

$ time racket -t racket_HTDP_beginner.rkt
2
5.51user 0.67system 0:06.71elapsed 92%CPU (0avgtext+0avgdata 128124maxresident)k
24inputs+0outputs (0major+41790minor)pagefaults 0swaps

$ time racket -t racket_HTDP_beginner.rkt
2
5.41user 0.67system 0:06.55elapsed 92%CPU (0avgtext+0avgdata 128180maxresident)k
0inputs+0outputs (0major+36683minor)pagefaults 0swaps

在 #lang racket 中运行 (+ 1 1) 三次 -- 稍微超过了 2 秒。

$ time racket -t racket_lang_racket.rkt
2
2.13user 0.25system 0:02.71elapsed 87%CPU (0avgtext+0avgdata 64996maxresident)k
0inputs+0outputs (0major+12437minor)pagefaults 0swaps

$ time racket -t racket_lang_racket.rkt
2
2.15user 0.25system 0:02.63elapsed 91%CPU (0avgtext+0avgdata 61700maxresident)k
0inputs+0outputs (0major+15853minor)pagefaults 0swaps

$ time racket -t racket_lang_racket.rkt
2
2.28user 0.29system 0:02.89elapsed 89%CPU (0avgtext+0avgdata 61500maxresident)k
0inputs+0outputs (0major+15015minor)pagefaults 0swaps

编辑4

在运行lang HTDP-beginner下的(+ 1 1)代码时,每秒运行free -h,不运行任何其他应用程序(除了DrRacket和基本系统(如窗口管理器等))(顺便说一句,这是fish shell):

http://pastebin.com/2RdZAuXj

到那个时候,我不得不杀掉DrRacket,因为一切都冻结了。

无论如何,显然它在泄漏。

每次我在DrRacket中重新运行代码时,内存使用量都会增加并保持稳定。

到达接近极限的点我只运行了约二十...两个左右(?)
(所以总共可能是约三十个?)
然后我杀掉它以解冻系统。

我想我应该尝试使用普通的#lang racket看看会发生什么...

编辑5

是的,它以相同的方式泄漏:

http://pastebin.com/373PNnY7


2
我确认这比#lang racket慢得多,后者可以立即计算出结果,尽管对于我的情况,初学者语言只需要3秒钟。10秒钟似乎真的很糟糕... - Sorawee Porncharoenwase
1
你尝试过增加内存限制吗?(Racket -> 限制内存)。我在Windows XP上使用它(双仓鼠电脑),程序重新启动后就没问题了。 - Ryan Vincent
@RyanVincent 因为128MB的内存不够,所以做“一加一”需要超过十秒钟...?>:? - Owen_AR
是的,我在这里不得不同意,我几乎可以确定Racket不需要128 MB来进行1 + 1操作。@Owen_R,这只需要一次这么长时间吗?还是每次运行程序都需要这么长时间呢? - Leif Andersen
每次(请参见我对soegaard答案的评论 - 我认为我很清楚,但我应该更明确地使用动词形式“takes”而不是“took”xD)。 - Owen_AR
显示剩余10条评论
1个回答

7
我有90%的把握认为你等待的原因是你的Racket安装没有正确完成。
在安装过程中,需要运行程序setup-plt。它会将所有racket文件(.rkt)预编译成所谓的zo文件。如果省略了这一步,则DrRacket会在你需要文件时为你进行编译。
在你的情况下(我猜测),这是你第一次使用初学者语言,因此与之相关的所有文件都需要编译。这需要一些时间。
最好的解决方案是使用来自http://download.racket-lang.org/的官方安装程序,它们都包含预编译的zo文件。
如果你已经使用了这样的安装程序,请再试一次 - 如果问题仍然存在,请提交错误报告(在DrRacket的帮助菜单中使用错误报告)。

为了澄清一下,你说“不得不等待”,可能暗示只发生了一次,尽管我说的是“需要”而不是“已经花费的时间”。每次运行时都会出现这种情况。我编辑了我的问题,添加了我拥有的“.zo”文件列表... 你还认为这个答案可能适用吗? - Owen_AR
你的系统有更多的信息吗?它是Linux吗?你使用了download.racket-lang.org上的官方安装程序吗? - soegaard
4
我认为在为 Gentoo 打包 Racket 时出了些问题。我强烈建议使用官方安装程序:要么是“Linux x86_64”安装程序,要么是“Unix源码+已构建软件包”安装程序。 - soegaard
无论如何,我怀疑DrRacket/Racket可能只是被编写成非常慢的样子,在像我的这台净书一样不那么强大的系统上,绝对时间就变得非常明显了?(普通的racket在“一个加一”上需要3秒才能返回。)我添加了计算机硬盘和CPU的规格,以防有人想知道,但我想我已经失去了兴趣... - Owen_AR
你确定这不仅仅是 racket 在我的硬件上表现非常糟糕吗?比如说,你确定这些时间不管 racket 如何安装,在等效的硬件上都是正常的吗? - Owen_AR
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接