我昨天更新了 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
如果最后一个突击队不仅返回0
s (在我的情况下它返回了八次10
),请运行:
sudo wrmsr -a 0x19a 0x0
事情应该会立即加速。此外,当rdmsr
以上述相同的方式再次运行时,它现在应该只返回0
s。