Ubuntu 17.10 暫停後非常慢

Ubuntu 17.10 暫停後非常慢

我昨天更新了 Ubuntu 17.10,當我掛起和喚醒時速度非常慢。例如,這個指令:

time docker-compose run web rspec --color spec/models/user_spec.rb:7

暫停前需 5 秒,1.47分分鐘後。

我檢查了一下gnome-system-monitor,一切似乎都很正常。

我做了一些基準測試,在暫停之前就得到了這個結果:

~ sysbench cpu --threads=4 run

    WARNING: --num-threads is deprecated, use --threads instead
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Prime numbers limit: 10000

    Initializing worker threads...

    Threads started!

    CPU speed:
        events per second:  3766.37

    General statistics:
        total time:                          10.0009s
        total number of events:              37672

    Latency (ms):
             min:                                  1.02
             avg:                                  1.06
             max:                                 10.94
             95th percentile:                      1.10
             sum:                              39990.91

    Threads fairness:
        events (avg/stddev):           9418.0000/36.06
        execution time (avg/stddev):   9.9977/0.00

~ sysbench memory --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Running memory speed test with the following options:
      block size: 1KiB
      total size: 102400MiB
      operation: write
      scope: global

    Initializing worker threads...

    Threads started!

    Total operations: 104857600 (12034664.21 per second)

    102400.00 MiB transferred (11752.60 MiB/sec)


    General statistics:
        total time:                          8.7111s
        total number of events:              104857600

    Latency (ms):
             min:                                  0.00
             avg:                                  0.00
             max:                                  6.78
             95th percentile:                      0.00
             sum:                              21761.44

    Threads fairness:
        events (avg/stddev):           26214400.0000/0.00
        execution time (avg/stddev):   5.4404/0.06

~ sysbench fileio --file-total-size=15G --file-test-mode=rndrw --max-requests=0 --file-num=64 --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Extra file open flags: 0
    64 files, 240MiB each
    15GiB total file size
    Block size 16KiB
    Number of IO requests: 0
    Read/Write ratio for combined random IO test: 1.50
    Periodic FSYNC enabled, calling fsync() each 100 requests.
    Calling fsync() at the end of test, Enabled.
    Using synchronous I/O mode
    Doing random r/w test
    Initializing worker threads...

    Threads started!


    File operations:
        reads/s:                      83.32
        writes/s:                     55.38
        fsyncs/s:                     85.50

    Throughput:
        read, MiB/s:                  1.30
        written, MiB/s:               0.87

    General statistics:
        total time:                          10.0912s
        total number of events:              2263

    Latency (ms):
             min:                                  0.00
             avg:                                 17.78
             max:                                584.69
             95th percentile:                     92.42
             sum:                              40229.56

    Threads fairness:
        events (avg/stddev):           565.7500/61.92
        execution time (avg/stddev):   10.0574/0.03

~ sysbench threads --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Initializing worker threads...

    Threads started!


    General statistics:
        total time:                          10.0002s
        total number of events:              203148

    Latency (ms):
             min:                                  0.14
             avg:                                  0.20
             max:                                  6.25
             95th percentile:                      0.21
             sum:                              39963.81

    Threads fairness:
        events (avg/stddev):           50787.0000/116.11
        execution time (avg/stddev):   9.9910/0.00

~ sysbench mutex run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 1
    Initializing random number generator from current time


    Initializing worker threads...

    Threads started!


    General statistics:
        total time:                          0.1467s
        total number of events:              1

    Latency (ms):
             min:                                146.63
             avg:                                146.63
             max:                                146.63
             95th percentile:                    147.61
             sum:                                146.63

    Threads fairness:
        events (avg/stddev):           1.0000/0.00
        execution time (avg/stddev):   0.1466/0.00

之後:

~ sysbench cpu --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Prime numbers limit: 10000

    Initializing worker threads...

    Threads started!

    CPU speed:
        events per second:  3746.73

    General statistics:
        total time:                          10.0005s
        total number of events:              37474

    Latency (ms):
             min:                                  1.02
             avg:                                  1.07
             max:                                 12.04
             95th percentile:                      1.16
             sum:                              39992.93

    Threads fairness:
        events (avg/stddev):           9368.5000/452.12
        execution time (avg/stddev):   9.9982/0.00

~ sysbench memory --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Running memory speed test with the following options:
      block size: 1KiB
      total size: 102400MiB
      operation: write
      scope: global

    Initializing worker threads...

    Threads started!

    Total operations: 104857600 (11640930.78 per second)

    102400.00 MiB transferred (11368.10 MiB/sec)


    General statistics:
        total time:                          9.0057s
        total number of events:              104857600

    Latency (ms):
             min:                                  0.00
             avg:                                  0.00
             max:                                  6.41
             95th percentile:                      0.00
             sum:                              21740.13

    Threads fairness:
        events (avg/stddev):           26214400.0000/0.00
        execution time (avg/stddev):   5.4350/0.12

~ sysbench fileio --file-total-size=15G --file-test-mode=rndrw --max-requests=0 --file-num=64 --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Extra file open flags: 0
    64 files, 240MiB each
    15GiB total file size
    Block size 16KiB
    Number of IO requests: 0
    Read/Write ratio for combined random IO test: 1.50
    Periodic FSYNC enabled, calling fsync() each 100 requests.
    Calling fsync() at the end of test, Enabled.
    Using synchronous I/O mode
    Doing random r/w test
    Initializing worker threads...

    Threads started!


    File operations:
        reads/s:                      3.93
        writes/s:                     2.52
        fsyncs/s:                     1.81

    Throughput:
        read, MiB/s:                  0.06
        written, MiB/s:               0.04

    General statistics:
        total time:                          15.4994s
        total number of events:              128

    Latency (ms):
             min:                                  0.00
             avg:                                428.29
             max:                               6760.00
             95th percentile:                   1771.29
             sum:                              54820.53

    Threads fairness:
        events (avg/stddev):           32.0000/7.18
        execution time (avg/stddev):   13.7051/2.10


~ sysbench threads --threads=4 run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 4
    Initializing random number generator from current time


    Initializing worker threads...

    Threads started!


    General statistics:
        total time:                          10.0002s
        total number of events:              201233

    Latency (ms):
             min:                                  0.14
             avg:                                  0.20
             max:                                 11.33
             95th percentile:                      0.22
             sum:                              39965.00

    Threads fairness:
        events (avg/stddev):           50308.2500/318.90
        execution time (avg/stddev):   9.9913/0.00

~ sysbench mutex run
    sysbench 1.0.8 (using system LuaJIT 2.0.4)

    Running the test with following options:
    Number of threads: 1
    Initializing random number generator from current time


    Initializing worker threads...

    Threads started!


    General statistics:
        total time:                          0.1603s
        total number of events:              1

    Latency (ms):
             min:                                160.21
             avg:                                160.21
             max:                                160.21
             95th percentile:                    161.51
             sum:                                160.21

    Threads fairness:
        events (avg/stddev):           1.0000/0.00
        execution time (avg/stddev):   0.1602/0.00

我認為最重要的區別是 fileio。編輯:我錯了。我又做了一次測試,結果total number of events: 1282似乎與第一次測試相似。

我做了這個測試以獲得更多資訊:

~ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.2191 s, 881 MB/s
➜ dd if=./largefile of=/dev/null bs=4k
262144+0 records in
262144+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.174457 s, 6.2 GB/s

看來是對的。

我有這與dmesg

這是最重要的幾行:

[  117.822557] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  117.822561] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN1.DRV0._GTF, AE_NOT_FOUND (20170531/psparse-550)
[  117.822577] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  117.822579] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN1.DRV1._GTF, AE_NOT_FOUND (20170531/psparse-550)
[  117.822621] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  117.822623] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN0.DRV0._GTF, AE_NOT_FOUND (20170531/psparse-550)
[  117.822793] rtc_cmos 00:02: Alarms can be up to one month in the future
[  119.168408] ata1.01: failed to resume link (SControl 30)
[  119.323036] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  119.323043] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN0.DRV0._GTF, AE_NOT_FOUND (20170531/psparse-550)
[  120.781116] done.
[  123.636265] ata2.00: link is slow to respond, please be patient (ready=0)
[  127.848898] ata2.00: SRST failed (errno=-16)
[  129.051082] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  129.051093] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN1.DRV1._GTF, AE_NOT_FOUND (20170531/psparse-550)
[  129.205049] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170531/psargs-364)
[  129.205059] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.CHN1.DRV0._GTF, AE_NOT_FOUND (20170531/psparse-550)

看來ata2和ACPI有一些問題。我想這是相關的,但我不知道該怎麼辦。這些行僅在我暫停並返回時才會出現。

這是有關我的系統的信息

Linux oscar 4.13.0-16-lowlatency #19-Ubuntu SMP PREEMPT Wed Oct 11 19:51:52 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

你有什麼線索嗎?

答案1

我找到了一個適合我的解決方案(Ubuntu 20.04、DELL XPS 15)這裡。它似乎適用於廣泛的系統(我見過 Ubuntu 15.04、16.04、18.04 和一些 Archlinux 版本),因此它很有可能也適用於您的系統。

總之,請嘗試以下操作:

sudo apt install msr-tools
sudo modprobe msr
sudo rdmsr -a 0x19a

如果最後一個突擊隊不僅返回0s (在我的例子中它返回八次10),請運行:

sudo wrmsr -a 0x19a 0x0

事情應該立即加速。另外,當rdmsr以與上述相同的方式再次運行時,它現在應該只返回0s。

相關內容