Ubuntu Server 14.04 in VirtualBox: le prestazioni del disco diminuiscono con più di 1 CPU


1

Sto eseguendo VirtualBox 4.3.18 su OSX 10.9.5.

Installo Ubuntu Server 14.04 64 bit ed eseguo questo test di scrittura su disco di base:

dd if=/dev/zero of=bigfile bs=1024 count=5000000

Configurazione dell'host (MacBook Pro 2014):

  • 16 GB di RAM
  • SSD da 500 GB

La configurazione della macchina ospite:

  • 2 GB di RAM
  • Disco VDMK da 60 GB (occupa solo 1-2 GB dopo l'installazione minima)

Il risultato con CPU 14.04 / 1: 13.6s / 376 MB / s
Il risultato con CPU 14.04 / 2: 41.5s / 123 MB / s

Su 12.04 64 bit con 1 o 2 CPU non cambia la velocità da circa 376 MB / s

Ho escogitato questo semplice ddtest dopo aver notato che molte cose sembravano lente rispetto alla mia configurazione precedente con 12.04. Esecuzione di marionette, migrazione di database, ecc. Tutto evidentemente degradato dopo aver eseguito un 14.04 con 2 CPU.

L'installazione è fatta con l'immagine ufficiale 14.04 amd64 e la procedura di installazione standard (dicendo semplicemente sì a tutte le finestre di dialogo), nessuna impostazione di fantasia / personalizzata.

Qualche idea su quale potrebbe essere il problema?

Modifica: cose che ho provato (senza alcun effetto)

  • utilizzare diversi chipset della scheda madre
  • usa IDE invece di SCSI (già durante l'installazione)
  • usa diversi chipset IDE

Modifica 2: confronto vmstat

Prima di scrivere gli zero da 5 GB, avvio vmstate lo esco in seguito; questi sono i registri. Forse aiutano qualcuno che li capisce?

vmstat con 1 CPU

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1939068  16684  45944    0    0  2887    11  207 1421  5  9 85  0  0
 1  0      0 1834700  16844 147360    0    0   160     0  136  143  5 21 73  1  0
 0  1      0 1494508  16880 477948    0    0    32 196640 1742  215 17 80  0  3  0
 1  0      0 1216688  16904 748316    0    0    12 336720 3065  357 13 83  0  4  0
 1  1      0 916324  16912 1040380    0    0     8 300164 2490  275 15 85  0  0  0
 1  1      0 623784  16924 1325020    0    0    12 290818 2590  304 14 86  0  0  0
 1  0      0 331540  16932 1609576    0    0     8 277380 2602  261 15 84  0  1  0
 1  0     92  84544   5816 1860588    0   92     8 266408 2373  275 14 85  0  1  0
 3  0    416  69840     96 1880244    0  324     8 326136 2865  493 16 84  0  0  0
 1  0    724  81064     88 1869532    0  308    12 366776 3180  556 16 84  0  0  0
 1  0   1052  69352     92 1881392    0  328    12 336204 3074  541 17 82  0  1  0
 1  1   1480  80160     96 1870952    0  428    16 345776 2909  506 16 84  0  0  0
 1  0   1936  78492    104 1873396    0  456    12 347420 3146  547 16 81  0  3  0
 1  0   2544  67684     96 1884676    0  608     8 320156 2890  481 17 83  0  0  0
 3  1   3108  80780     96 1871980    0  564    12 350136 2974  507 16 83  0  1  0
 2  0   3548  79064     84 1873748    0  440    12 355388 3107  570 16 84  0  0  0
 1  0   3988  72260     96 1881724    0  440    16 319932 2990  505 17 83  0  0  0
 0  0   4112  77012    248 1877096    0  124  2712 269248 2306  350  4 43 38 14  0
 0  0   3980  75284    256 1878256  608    0  1748    76   63  110  0  2 97  1  0

vmstat con 2 CPU

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   4728  72916    772 1879116    1    8   166 17813  252  111  7 13 79  1  0
 1  0   4728 1965416    852  37852    0    0    80     0  313  246  6 19 74  1  0
 1  0   4728 1838368    852 161568    0    0     0     0  494   21 21 29 50  0  0
 1  0   4728 1726976    856 269924    0    0     4 106516 1388  237 19 32 44  6  0
 1  0   4728 1604976    860 388704    0    0     4 106500 1357  189 22 36 40  3  0
 1  0   4728 1487140    880 503360    0    0     8 229588 2272  213 21 43 27  9  0
 1  0   4728 1357332    880 629844    0    0     0     0  506   33 22 29 50  0  0
 1  1   4728 1234228    884 749264    0    0     4 137664 1429  103 22 37 39  3  0
 1  0   4728 1112300    888 867996    0    0     4 128772 1629  123 21 37 38  4  0
 1  0   4728 987976    892 989032    0    0     4 106500 1329   83 22 35 41  3  0
 1  0   4728 871432    912 1102492    0    0    12 229424 2270  246 21 43 27  9  0
 1  0   4728 743556    912 1226964    0    0     0     0  486   18 22 29 50  0  0
 2  0   4728 620096    916 1346932    0    0     4 108188 1338   98 21 36 40  3  0
 1  0   4728 498700    920 1465012    0    0     4 158084 1737  145 22 39 35  4  0
 1  0   4728 375956    924 1584600    0    0     4 106500 1335   92 22 36 40  3  0
 1  0   4728 258288    940 1698692    0    0     8 225324 2223  210 21 43 27  9  0
 1  0   4728 132520    940 1821260    0    0     0     0  501   20 22 29 50  0  0
 1  0   4996  66768    112 1885580    0  268   220 106788 1511  219 19 34 41  5  0
 1  2   5012  71568    116 1880736    0   16     8 134292 1479  314 22 37 38  3  0
 1  0   5052  78080    116 1874516    0   40     4 132012 1719  275 21 40 36  4  0
 1  0   5088  67908    120 1884508    0   36     4 225356 2301  361 22 44 26  8  0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   5132  74848    112 1877920    0   44     0    44  589  263 22 29 49  0  0
 1  0   5172  72924    112 1879676    0   40     4 106556 1385  249 21 37 40  3  0
 1  1   5240  78988    116 1873796    0   68     4 137672 1476  277 22 37 38  3  0
 1  0   5308  70256    116 1882532    0   68     4 128712 1699  257 22 39 36  4  0
 1  0   5340  77468    136 1875524    0   32    16 225360 2289  366 21 44 27  8  0
 2  0   5388  77840    128 1875324    0   48     0    48  580  242 22 30 49  0  0
 2  0   5440  69500    120 1883484    0   52     4 106576 1387  248 22 37 39  3  0
 2  0   5496  76928    124 1876008    0   56     4 117564 1407  275 22 36 40  3  0
 1  0   5552  68904    124 1883932    0   56     4 148796 1754  281 21 40 35  4  0
 1  0   5600  70356    136 1882664    0   48     8 225372 2320  381 22 44 26  8  0
 1  0   5668  69292    132 1883832    0   68     0    68  572  241 22 30 49  0  0
 1  0   5720  74508    132 1878824    0   52     0 106572 1393  258 21 37 39  3  0
 1  0   5768  67348    120 1885924    0   48     4 106548 1494  272 22 37 39  3  0
 1  1   5836  73112    120 1880196    0   68     4 145992 1566  299 21 38 37  4  0
 1  0   5892  68260    132 1885004    0   56     8 239200 2562  400 22 46 24  9  0
 1  0   5976  66812    128 1886448    0   84     0    84  588  246 21 30 49  0  0
 1  0   6068  74444    132 1878868    0   92     4 106608 1407  316 22 36 39  3  0
 1  0   6140  65820    124 1887572    0   72     4 106572 1389  253 22 37 40  3  0
 1  1   6220  64992    124 1888248    0   80     4 137556 1506  288 22 37 38  3  0
 1  0   6296  69388    140 1884176    0   76    12 247672 2625  421 21 46 23  9  0
 1  0   6400  73392    124 1880312    0  104     0   104  599  237 22 30 49  0  0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   6484  71628    124 1882636    0   84   656 106604 1419  276 22 37 39  3  0
 0  1   6556  79784    120 1873452    0   72     8 221772 2087  355 17 37 39  7  0
 0  0   6556  78296    120 1876500    0    0  3036 39232  574  195  0  5 93  2  0

Modifica 3: confronto iostat

Dato che è troppo per la domanda, ho creato un pastoe con confronto iostat:

iostat con 1 CPU: http://pastie.org/private/ne8llizdt9pgnzt7gu2vbq

iostat con 2 CPU: http://pastie.org/private/xsgzoq7zrlzarbwqkqdbq


Quanta RAM per la VM ed è a 32 bit o 64?
harrymc,

@harrymc ha aggiunto la RAM (2 GB); arch è a 64 bit ma era già lì.
segna il

La mia ipotesi è che si tratti di un bug introdotto nel driver del disco di Ubuntu 14.04, attivato per più CPU dal disco virtuale troppo veloce per il driver. Un modo per testare questa ipotesi potrebbe essere quello di cambiare il tipo di disco da IDE a SCSI (o viceversa) e sperare che l'altro driver non abbia lo stesso bug.
harrymc,

@harrymc grazie, l'ho già provato, non fa differenza. Ho aggiornato la domanda, grazie. Ma la tua menzione di un driver / bug mi rende curioso. Sfortunatamente mi manca la conoscenza del kernel, ma mi piacerebbe scavare più a fondo, qualche suggerimento per me?
segna il

Il bug potrebbe quindi esistere in alcuni codici comuni a entrambi i driver del disco. Non sono uno sviluppatore del kernel Ubuntu, non posso indicare direttamente il codice errato. So che un tale bug è possibile, ad esempio questo del 2009, ma dovresti piuttosto indirizzare gli sviluppatori di Ubuntu.
harrymc,

Risposte:


1

Ho scoperto che il colpevole è che il kernel di immagine amd64 del server Ubuntu 14.04.1 è compilato con il CONFIG_CONTEXT_TRACKING_FORCE=yquale, secondo http://cateee.net/lkddb/web-lkddb/CONTEXT_TRACKING_FORCE.html :

Dì Y solo se stai lavorando allo sviluppo di un backend di architettura per il rilevamento del contesto.
Dire N altrimenti, questa opzione comporta un sovraccarico che non si desidera in produzione .

La ricompilazione del kernel senza flag o l'aggiornamento a un kernel che non ha il flag impostato risolve il problema per me. La differenza è evidente:

CPU multipla, kernel 14.04.1 stock (3.13.0-32):

vagrant@ubuntu-14:~$ dd if=/dev/zero of=bigfile bs=1024 count=5000000
5000000+0 records in
5000000+0 records out
5120000000 bytes (5.1 GB) copied, 46.6511 s, 110 MB/s

Più CPU, kernel ricompilato (3.13.0-39; ma ho testato questo kernel specifico con entrambi i flag abilitati / disabilitati):

vagrant@ubuntu-14:~$ dd if=/dev/zero of=bigfile bs=1024 count=5000000
5000000+0 records in
5000000+0 records out
5120000000 bytes (5.1 GB) copied, 10.4548 s, 490 MB/s

Alcune ulteriori informazioni che ho trovato:

Grazie a @harrymc per avermi motivato a scavare più a fondo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.