VNX: kernel.cpu.utilization.cpuutil è > 90 per 15 minuti
Summary: kernel.cpu.utilization.cpuutil viene > 90 per 15 minuti.
Symptoms
CIFS e NFS danneggiati e utilizzo eccessivo della CPU nei data mover per periodi di tempo prolungati
I file /nas/log/sys_log sono inondati dai seguenti avvisi:
Oct 20 10:19:21 2016:CS_PLATFORM:PERFSTATS:NOTICE:3:::::nas_alerterd: Clearing event for policy: default:server_2:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes due to value = 88 Oct 20 10:20:26 2016:CS_PLATFORM:PERFSTATS:NOTICE:3:::::nas_alerterd: Clearing event for policy: default:server_3:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes due to value = 89 Oct 20 10:35:21 2016:CS_PLATFORM:PERFSTATS:WARNING:2:::::nas_alerterd: Raising event for policy: default:server_2:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes. The last sample value was 94 Oct 20 10:48:26 2016:CS_PLATFORM:PERFSTATS:WARNING:2:::::nas_alerterd: Raising event for policy: default:server_3:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes. The last sample value was 95 Oct 20 11:01:26 2016:CS_PLATFORM:PERFSTATS:NOTICE:3:::::nas_alerterd: Clearing event for policy: default:server_3:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes due to value = 87 Oct 20 11:17:21 2016:CS_PLATFORM:PERFSTATS:NOTICE:3:::::nas_alerterd: Clearing event for policy: default:server_2:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes due to value = 89 Oct 20 11:21:26 2016:CS_PLATFORM:PERFSTATS:WARNING:2:::::nas_alerterd: Raising event for policy: default:server_3:kernel.cpu.utilization.cpuutil is > 90 for 15 minutes. The last sample value was 96
[nasadmin@storage ~]$ server_sysstat server_2 server_2 : threads runnable = 216 threads blocked = 6859 threads I/J/Z = 1 memory free(kB) = 6925375 cpu idle_% = 2 < ------- 98% utilized [nasadmin@storage ~]$ server_sysstat server_3 server_3 : threads runnable = 61 threads blocked = 6940 threads I/J/Z = 1 memory free(kB) = 6683987 cpu idle_% = 1 < ------- 99% utilized
Cause
Sono state completate un'analisi della configurazione generale del sistema e della capacità per determinare i tipi di richieste (numero di replica, deduplica, pianificazioni dei checkpoint e così via) applicate a ciascun data mover. È stato determinato che per la gestione delle immagini veniva utilizzata un'applicazione VMware chiamata Mirage. Questo software eseguiva il backup di migliaia di workstation nell'ambiente del cliente nelle share CIFS e NFS creando più file CVD di piccole dimensioni.
In questo esempio, sono state configurate 200 sessioni VMware Mirage che acquisiscono istantanee orarie di 4.000 computer. Un computer richiede un file CVD che, a sua volta, richiede 1,5 IOPS per il completamento dell'istantanea. Durante l'esecuzione dei backup, le prestazioni erano lente e sul lato Mirage si riscontrava un'enorme latenza dell'ordine di 626,78 KB per ms.
Quando l'utilizzo della CPU era eccessivamente elevato e l'applicazione VMware Mirage era in esecuzione, veniva acquisito un profilo data mover di server_2. Il profilo è stato configurato per l'esecuzione per 60 secondi:
Esempio:
[nasadmin@storage ~]$ /nas/tools/profile_slot -slot 2 -method function -seconds 60 -output /root_vdm_3/FS_Backup_01/profile_slot2.out Starting profile on slot 2 with the following params... Slot = 2 Method = function Seconds = 60 Ignorebounds = no Frequency = 256 Outfile = /root_vdm_3/FS_Backup_01/profile_slot2.out Profile started. Waiting for 60 seconds... Profile stopped. Profile output has been written to /root_vdm_3/FS_Backup_01/profile_slot2.out on server in slot 2.
Dopo aver completato l'analisi del profilo del data mover, è emerso che il principale collo di bottiglia che consuma la maggior parte della CPU è un processo di crittografia di sicurezza SMB denominato "AES_encrypt". Questo processo SMB viene utilizzato per fornire la crittografia end-to-end dei dati SMB e proteggere i dati da eventi di intercettazione su reti non attendibili.
[nasadmin@storage ~]$ more profile_slot2.out | grep -i aes 0.0% ( 1 ) EVP_aes_128_cbc 0.0% ( 2 ) aes_init_key 1.0% ( 631 ) aes_cbc_cipher 0.0% ( 16 ) private_AES_set_encrypt_key 44.8% ( 27454 ) AES_encrypt < --------------------- 0.9% ( 581 ) AES_cbc_encrypt 0.0% ( 1 ) EVP_aes_128_cbc 0.8% ( 123 ) aes_cbc_cipher 0.0% ( 1 ) private_AES_set_encrypt_key 37.0% ( 5676 ) AES_encrypt < --------------------- 0.8% ( 128 ) AES_cbc_encrypt 0.0% ( 1 ) aes_init_key 0.9% ( 140 ) aes_cbc_cipher 0.0% ( 3 ) private_AES_set_encrypt_key 47.1% ( 7219 ) AES_encrypt < --------------------- 0.9% ( 146 ) AES_cbc_encrypt 0.0% ( 1 ) aes_init_key 1.3% ( 204 ) aes_cbc_cipher 0.0% ( 7 ) private_AES_set_encrypt_key 48.2% ( 7388 ) AES_encrypt < --------------------- 0.9% ( 151 ) AES_cbc_encrypt 1.0% ( 164 ) aes_cbc_cipher 0.0% ( 5 ) private_AES_set_encrypt_key 46.8% ( 7171 ) AES_encrypt < --------------------- 1.0% ( 156 ) AES_cbc_encrypt
Resolution
Sono disponibili due opzioni:
Opzione 1:
Non apportare modifiche, consentire al protocollo massimo per la comunicazione SMB di rimanere su SMB3, sopportare l'elevata CPU e le scarse prestazioni.
Opzione 2:
Implementare una soluzione alternativa per eliminare il protocollo massimo per la comunicazione SMB da SMB3 a SMB2. La differenza principale tra SMB3 e SMB2 è "AES_Encrypt". Eliminando il protocollo massimo su SMB2, il processo di crittografia si interrompe, l'utilizzo della CPU diminuisce e le prestazioni dovrebbero migliorare.
Per abilitare il protocollo SMB2 sul data mover:
-
Accedere alla control station primaria come utente "root" in putty/SSH
-
Richiedere l'autorizzazione al cliente per arrestare temporaneamente il servizio CIFS sul data mover. Ciò causa una piccola interruzione dell'accesso a CIFS mentre il servizio CIFS viene interrotto, quindi deve essere pianificato di conseguenza con il cliente.
server_setup server_x -P cifs -o stop
-
Modificare il protocollo massimo per la comunicazione SMB da SMB3 a SMB2:
server_cifs server_x -add security=NT,dialect=SMB2
-
Riavviare il servizio CIFS:
server_setup server_x -P cifs -o start
-
Assicurarsi che il servizio CIFS sia stato riavviato correttamente e che il protocollo massimo sia impostato su SMB2:
server_cifs server_x
Esempio:
[root@Bstorage]# server_cifs server_2 server_2 : 384 Cifs threads started Security mode = NT Max protocol = SMB2.1 < -----