Menguji PostgreSQL dengan HugePages di Linux

Kernel Linux menyediakan berbagai opsi konfigurasi yang dapat mempengaruhi kinerja. Yang utama adalah memilih konfigurasi yang tepat untuk aplikasi dan beban kerja Anda. Seperti basis data lainnya, PostgreSQL perlu penyetelan optimal kernel Linux. Pengaturan yang salah dapat mengakibatkan kinerja yang buruk. Penting untuk melakukan analisis komparatif terhadap kinerja basis data setelah setiap sesi penyetelan. Dalam salah satu posting saya sebelumnya, berjudul “Parameter Tune Linux Kernel Untuk Optimasi PostgreSQL,” saya menjelaskan beberapa parameter kernel Linux yang paling berguna dan bagaimana mereka membantu meningkatkan kinerja database. Sekarang saya akan membagikan hasil pengujian komparatif setelah mengkonfigurasi HugePages di Linux di bawah berbagai beban PostgreSQL. Saya melakukan test suite lengkap di bawah banyak beban kerja PostgreSQL yang berbeda dengan sejumlah klien bersamaan.


gambar


PC tempat pengujian dilakukan


  • Server Supermicro:
    1. Intel® Xeon® CPU E5-2683 v3 @ 2.00 GHz
    2. 2 soket / 28 core / 56 utas
    3. Memori: RAM 256 GB
    4. Penyimpanan: SAMSUNG SM863 1.9 TB Enterprise SSD
    5. Sistem File: ext4 / xfs
  • OS: Ubuntu 16.04.4, kernel 4.13.0-36-generik
  • PostgreSQL: versi 11

Pengaturan kernel Linux


Saya menggunakan parameter kernel default tanpa optimasi / tweaker, hanya menonaktifkan HugePages Transparan. Teknologi ini diaktifkan secara default dan mengalokasikan halaman dengan ukuran yang tidak disarankan untuk digunakan dengan database. Secara umum, database membutuhkan HugePages dengan ukuran tetap, tetapi HugePages Transparan tidak dapat menyediakannya. Oleh karena itu, selalu disarankan untuk menonaktifkan fitur ini dan secara default menginstal HugePages klasik.


Pengaturan PostgreSQL


Saya menggunakan pengaturan PostgreSQL yang sama untuk semua tes untuk merekam beban kerja PostgreSQL yang berbeda dengan pengaturan Linux HugePages yang berbeda. Untuk semua tes, pengaturan PostgreSQL berikut diterapkan:


shared_buffers = '64GB' work_mem = '1GB' random_page_cost = '1' maintenance_work_mem = '2GB' synchronous_commit = 'on' seq_page_cost = '1' max_wal_size = '100GB' checkpoint_timeout = '10min' synchronous_commit = 'on' checkpoint_completion_target = '0.9' autovacuum_vacuum_scale_factor = '0.4' effective_cache_size = '200GB' min_wal_size = '1GB' wal_compression = 'ON' 

Skema pengujian


Skema pengujian memainkan peran penting. Semua tes dilakukan tiga kali, durasi setiap lari adalah 30 menit. Berdasarkan hasil dari 3 tes ini, saya menyimpulkan nilai rata-rata. Pengujian dilakukan dengan menggunakan alat pgbench PostgreSQL, ia bekerja dengan faktor penskalaan dalam penambahan sekitar 16 MB beban.


Hugepages


Secara default, Linux menggunakan halaman memori 4K, serta teknologi HugePages. BSD menggunakan teknologi Super Pages, dan Windows menggunakan Large Pages. PostgreSQL hanya mendukung teknologi HugePages (Linux). Dalam kasus di mana jumlah memori yang digunakan besar, halaman yang lebih kecil mengurangi kinerja. Menggunakan HugePages, Anda meningkatkan memori yang dialokasikan untuk aplikasi dan, karenanya, mengurangi "overhead" yang terjadi selama proses alokasi / swapping. Dengan demikian, HugePages meningkatkan produktivitas.


Berikut adalah pengaturan untuk ukuran HugePages 1 GB. Informasi ini tersedia kapan saja menggunakan / proc.


 AnonHugePages:     0 kB ShmemHugePages:    0 kB HugePages_Total:   100 HugePages_Free:    97 HugePages_Rsvd:    63 HugePages_Surp:    0 Hugepagesize:  1048576 kB 

Saya menulis lebih banyak tentang HugePages di posting sebelumnya.


https://www.percona.com/blog/2018/08/29/tune-linux-kernel-parameters-for-postgresql-optimization/


Secara umum, HugePages berukuran 2 MB dan 1 GB, jadi masuk akal untuk menggunakan 1 GB.


https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-transhuge


https://kerneltalks.com/services/what-is-huge-pages-in-linux/


Hasil tes


Tes ini menunjukkan efek keseluruhan menggunakan HugePages dari berbagai ukuran. Suite tes pertama dibuat dengan ukuran halaman 4K - digunakan secara default di Linux - dan tanpa aktivasi HugePages. Biarkan saya mengingatkan Anda: Saya menonaktifkan opsi HugePages Transparan untuk seluruh durasi tes.


Kemudian serangkaian tes kedua dilakukan untuk HugePages dengan ukuran 2 MB. Akhirnya, serangkaian tes ketiga dijalankan untuk 1GB HugePages.


Untuk semua tes komparatif, PostgreSQL DBMS 11 digunakan. Kit mencakup kombinasi berbagai ukuran database dan berbagai klien. Grafik di bawah ini menunjukkan hasil perbandingan kinerja menggunakan tes ini: TPS (jumlah transaksi per detik) - sepanjang sumbu Y, dan ukuran basis data dan jumlah klien untuk database dengan ukuran tertentu - di sepanjang sumbu X.


gambar


Dari grafik di atas, dapat dilihat bahwa, dari penggunaan HugePages, keuntungan bertambah ketika jumlah pelanggan dan ukuran basis data meningkat, selama ukuran ini tetap dalam buffer bersama yang dialokasikan sebelumnya.


Tes ini membandingkan TPS dan jumlah pelanggan. Dalam hal ini, ukuran basis data adalah 48 GB. Sumbu Y menunjukkan TPS, dan sumbu X menunjukkan jumlah klien yang terhubung. Ukuran basis data cukup kecil untuk muat dalam buffer bersama dengan ukuran tetap 64 GB.


gambar


Ketika HugePages berukuran 1 GB, peningkatan kinerja komparatif meningkat dengan jumlah pelanggan.


Grafik berikutnya adalah sama dengan yang sebelumnya, tetapi ukuran database adalah 96 GB. Ini lebih besar dari ukuran buffer total tetap 64 GB.



Hal utama yang perlu diperhatikan di sini: kinerja dengan HugePages sebesar 1 GB meningkat karena jumlah pelanggan meningkat dan pada akhirnya memberikan kinerja yang lebih baik daripada menggunakan HugePages sebesar 2 MB atau halaman 4 KB standar.


Tes ini menunjukkan rasio TPS terhadap ukuran basis data. Dalam hal ini, jumlah klien yang terhubung adalah 32. Pada sumbu Y, TPS ditampilkan, dan pada sumbu X, ukuran basis data.


gambar


Seperti yang diharapkan, ketika ukuran database melebihi ukuran HugePages yang telah dialokasikan sebelumnya, kinerja berkurang secara signifikan.


Kesimpulan


Salah satu rekomendasi utama saya adalah menonaktifkan Transparent HugePages. Anda akan mendapatkan peningkatan kinerja terbesar jika basis data ditempatkan dalam buffer bersama dengan HugePages diaktifkan. Ukuran optimal HugePages ditentukan oleh coba-coba, tetapi berpotensi pendekatan ini dapat mengarah pada peningkatan signifikan dalam TPS, ketika ukuran basis data cukup besar, tetapi pada saat yang sama memungkinkannya untuk masuk dalam buffer umum.

Source: https://habr.com/ru/post/id435558/


All Articles