KPTI Meltdown Linux 커널 수정이 성능에 미치는 영향

KPTI Meltdown Linux 커널 수정이 성능에 미치는 영향

그래서 저는 최근(2018년 1월 초)에 수정된 KPTI 커널 수정 사항이 포함된 Fedora 26 노트북용 커널 업데이트를 받았습니다.충돌 오류. 나는 이러한 수정 사항이 Linux 시스템에 미치는 영향에 대해 많은 추측을 들었습니다. 실제로 Intel은 황제를 믿는 것 같습니다.아직도 말끔하게 옷을 입고 있다. 이 링크에서 볼 수 있듯이 업계의 일부 소식통(특히 Apple, Microsoft, Amazon 및 Google)은 영향이 미미할 것이라고 주장합니다.이 링크. 다른 사람큰 영향을 미친다고 주장.

언론 보도의 혼란에 만족하지 않고 "이것이 실제로 내 컴퓨터에 어떤 영향을 미치는가?"를 알고 싶었습니다. 이론적으로 CPU 바인딩 프로세스에 미치는 영향은 미미한 반면, 많은 수의 시스템 호출(예: 디스크 또는 네트워크 I/O)을 수행하는 프로세스는 더 큰 영향을 받습니다.

나는 아래에 스스로 대답합니다.

추신: 저는 더 현대적인 프로세서에 대한 벤치마크를 본 적이 없습니다.매우흥미롭게도 내가 들었던 것처럼"...새로운 프로세서는 큰 피해를 입히지 않습니다."해당 프로세서는 무엇이며, "별로 크지 않은" 정도는 어느 정도입니까? 저는 Intel i5-3210m 듀얼 코어(코어당 스레드 2개) 프로세서를 탑재한 구형 Lenovo Thinkpad T430S를 사용하고 있습니다. 멜트다운과 그 복원에 관해 이것은 현대적인 것입니까? Microsoft에 따르면 "...(it)는 2015년 이전 프로세서를 탑재한 Windows 7, 8, 10을 실행하는 소비자 장치가 속도 저하를 경험할 가능성이 더 높다고 말합니다."자체 벤치마크에서는 2015년과 2017년 프로세서 간의 차이가 나타나지 않는 것 같습니다.

답변1

새 커널을 부팅하기 전에 몇 가지 실수를 얻고 싶습니다. 커널을 4.14.8에서 4.14.11로 업그레이드했습니다. 후자에는 Meltdown 취약점에 대한 KPTI 수정 사항이 포함되어 있습니다. 저는 Intel i5-3210m 듀얼 코어(코어당 스레드 2개) 프로세서를 탑재한 구형 Lenovo Thinkpad T430S를 사용하고 있습니다. 결과가 흥미로워서 여기에 게시해야겠다고 생각했습니다.

저는 세 가지 벤치마크를 수행했습니다.

결과는 다음과 같습니다. 몇 가지 놀라운 값(보조 루프/초 및 디렉터리 작업 AIM9 벤치마크, 블록 순차 출력 bonnie++ 벤치마크 모두 더 나은 성능을 보임) 외에도 시스템이 약간의 타격을 입은 것으로 보입니다. 컴파일에는 많은 파일 I/O 및 CPU 작업도 포함되기 때문에 gcc 컴파일이 매우 흥미롭다고 생각합니다. 이러한 것들은 내 컴퓨터에서 정기적으로 수행하는 작업과 유사합니다. 그럼에도 불구하고, 이 3가지 벤치마크 세트는 모두 한 가지 점에 동의하는 것 같습니다. 내 시스템은 일반적으로 KPTI Meltdown 복구 커널을 설치한 이후로 정수 및 부동 소수점 연산까지 상당한 타격을 입었습니다. 원래 160분이 걸렸던 gcc 컴파일이 이제 172분 밖에 걸리지 않습니다. 정말 나쁘다.

AIM9 benchmark
AIM Independent Resource Benchmark - Suite IX v1.1, January 22, 1996
Copyright (c) 1996 - 2001 Caldera International, Inc.
All Rights Reserved

BEFORE:
Machine's name                                    : rodin
Machine's configuration                           : kernel_4.14.8-200
Number of seconds to run each test [2 to 1000]    : 10
Path to disk files                                : /var/tmp/aim9

AFTER:
Machine's name                                    : rodin
Machine's configuration                           : kernel_4.14.11-200
Number of seconds to run each test [2 to 1000]    : 10
Path to disk files                                : /var/tmp/aim9

참고: AIM9 벤치마크에는 컴파일 시 테스트 중 하나가 완료되지 않는 버그가 있습니다. 이것이 작동하려면 creat-clo.c에서 97행을 변경해야 했습니다.

static int sigcount;           /* count of signals */

이와 관련하여:

volatile static int sigcount;           /* count of signals */

내 벤치마크 결과는 다음과 같습니다.

AIM9 Benchmark
         BEFORE        AFTER Percent Change   Description
01      1.996 M      1.929 M   -3.34 Thousand Double Precision Additions/second
02      1.980 M      1.945 M   -1.75 Thousand Single Precision Additions/second
03      8.559 M      8.259 M   -3.50 Thousand Long Integer Additions/second
04      8.592 M      8.280 M   -3.63 Thousand Integer Additions/second
05      8.599 M      8.268 M   -3.85 Thousand Short Integer Additions/second
06    205400.00    190400.00   -7.30 File Creations and Closes/second
07    552330.00    384665.33  -30.35 System Allocations & Pages/second
08      2.844 M      1.373 M  -51.71 System Memory Allocations/second
09     75.980 M     74.623 M   -1.78 Non-local gotos/second
10      1.131 M    651400.00  -42.43 Signal Traps/second
11       855.64       787.71   -7.93 Program Loads/second
12      3246.75      3846.15   18.46 Task Creations/second
13    166307.40    154135.80   -7.31 Link/Unlink Pairs/second
14    504839.16    369664.00  -26.77 Random Disk Reads (K)/second
15    451072.00    339628.37  -24.70 Random Disk Writes (K)/second
16      3.285 M      1.765 M  -46.24 Sequential Disk Reads (K)/second
17    698880.00    598528.00  -14.35 Sequential Disk Writes (K)/second
18    537088.00    431616.00  -19.63 Disk Copies (K)/second
19       115.78       116.58     .69 Sync Random Disk Writes (K)/second
20       116.42       114.75   -1.43 Sync Sequential Disk Writes (K)/second
21       116.05       114.90    -.99 Sync Disk Copies (K)/second
22     79020.00     73711.29   -6.71 Directory Searches/second
23    311100.00    299400.00   -3.76 Thousand Double Precision Divides/second
24    316483.52    305694.31   -3.40 Thousand Single Precision Divides/second
25    105284.72    101688.31   -3.41 Thousand Long Integer Divides/second
26    294660.00    286470.00   -2.77 Thousand Integer Divides/second
27    290700.00    282420.00   -2.84 Thousand Short Integer Divides/second
28    424.140 M    407.756 M   -3.86 Function Calls (no arguments)/second
29    462.336 M    448.460 M   -3.00 Function Calls (1 argument)/second
30    485.198 M    472.115 M   -2.69 Function Calls (2 arguments)/second
31    236.441 M    226.969 M   -4.00 Function Calls (15 arguments)/second
32       195.30       186.63   -4.43 Integer Sieves/second
33      1.202 M      1.160 M   -3.48 Thousand Double Precision Multiplies/second
34      1.204 M      1.166 M   -3.18 Thousand Single Precision Multiplies/second
35      1.396 M      1.359 M   -2.69 Thousand Long Integer Multiplies/second
36      1.396 M      1.357 M   -2.83 Thousand Integer Multiplies/second
37      1.365 M      1.327 M   -2.78 Thousand Short Integer Multiplies/second
38    554540.00    538080.00   -2.96 Numeric Functions/second
39      1.614 M      1.561 M   -3.28 Zeros Found/second
40      2.513 M      2.431 M   -3.28 Trigonometric Functions/second
41     18.605 M     17.861 M   -4.00 Point Transformations/second
42      3880.00      3766.00   -2.93 Linear Systems Solved/second
43     28060.00     26980.00   -3.84 String Manipulations/second
44     14.751 M     14.373 M   -2.55 Dynamic Memory Operations/second
46      5277.00      5121.00   -2.95 Sort Operations/second
47      4231.00     10771.00  154.57 Auxiliary Loops/second
48      2.828 M      2.900 M    2.54 Directory Operations/second
49       137.36       156.70   14.07 Shell Scripts/second
50       137.16       157.64   14.93 Shell Scripts/second
51       137.60       161.90   17.65 Shell Scripts/second
52     44.497 M     42.774 M   -3.87 Series Evaluations/second
53      1.092 M    607030.00  -44.43 Shared Memory Operations/second
56      1.318 M    825670.00  -37.38 FIFO Messages/second
57    922370.00    664690.00  -27.93 Stream Pipe Messages/second
58    866290.00    632950.00  -26.93 DataGram Pipe Messages/second
59      1.922 M      1.038 M  -45.96 Pipe Messages/second
60  19725.935 M  18947.483 M   -3.94 Memory to Memory Copy/second

=========================================================================================================
GCC compile, both "configure" and "make"
Results summary::
configure: 38% real slowdown

make (x86_64 only): 7.7% real slowdown, 5.5% user CPU slowdown

    BEFORE                                         AFTER
time ../gcc-7.2.0/configure --disable-multilib | time ../gcc-7.2.0/configure --disable-multilib
 ...                                           | ...   
configure: creating ./config.status            | configure: creating ./config.status
config.status: creating Makefile               | config.status: creating Makefile
                                               |
real    0m2.467s                               | real    0m3.420s      
user    0m1.835s                               | user    0m1.936s      
sys     0m1.108s                               | sys     0m1.295s      
                                               |
time make                                      | time make
...                                            | ...     
real    160m8.766s                             | real    172m28.158s
user    152m11.430s                            | user    163m34.790s      
sys     6m41.507s                              | sys     7m5.214s     

=========================================================================================================
BONNIE++
Version: 1.97
See https://www.coker.com.au/bonnie++/experimental/ . This version was provided by my Fedora distribution.

Run using: bonnie++ -n 1024

Sample results:
                                BEFORE          AFTER           % change from before
Sequential Output, per char     1115 K/s        890 K/s         -20
Sequential Output, block        358891 K/s      461208 K/s      +28
Sequential Input, per char      4181 K/s        1989 K/s        -52
Sequential Input, block         515347 K/s      521646 K/s      -1,2
Random Seeks                    5651 /s         5221 /s         -7.6
Sequential Create, Create       41855 /s        40751 /s        -2.74
                   Read         741945 /s       624554 /s       -15.8
                   Delete       79832 / s       78340 /s        -1.9
Random Create,     Create       41198 /s        41003 /s        -0.47
                   Read         741945 /s       719494 /s       -3.02
                   Delete       61154 /s        60698 /s        -0.74

Bonnie 결과는 다음에서 확인할 수 있습니다.

앞으로: https://bintray.com/greygnome/generic/download_file?file_path=bon_results_before_kpti.html

뒤쪽에: https://bintray.com/greygnome/generic/download_file?file_path=bon_results_after_kpti.html

관련 정보