2012-10-23 27 views
8

Gần đây tôi đã học về jemalloc, nó là bộ cấp phát bộ nhớ được sử dụng bởi firefox. Tôi đã thử tích hợp jemalloc vào hệ thống của tôi bằng cách ghi đè toán tử mới và xóa và gọi các hàm jemalloc tương đương của malloc và je_malloc và je_free.I miễn phí đã viết một ứng dụng thử nghiệm với 100 triệu phân bổ. Tôi đã chạy ứng dụng cả với glocc malloc và jemalloc, trong khi chạy với jemalloc mất ít thời gian hơn để phân bổ như vậy việc sử dụng CPU là khá cao, hơn nữa việc in chân bộ nhớ cũng lớn hơn so với malloc. Sau khi đọc tài liệu này trên jemalloc analysis có vẻ như jemalloc có thể có dấu chân lớn hơn malloc vì nó sử dụng các kỹ thuật để tối ưu hóa tốc độ hơn bộ nhớ. Tuy nhiên, tôi đã không có bất kỳ con trỏ đến việc sử dụng CPU với Jemalloc. Tôi muốn nói rằng tôi làm việc trên một máy đa xử lý các chi tiết được đưa ra dưới đây.Sử dụng CPU và bộ nhớ của jemalloc so với glibc malloc

vi xử lý: 11 nhà cung: GenuineIntel cpu gia đình: 6 mô hình: 44 mô hình và tên: Intel (R) Xeon (R) CPU X5680 @ 3.33GHz bước: 2 cpu MHz: kích thước 3325,117 cache: 12.288 KB id vật lý: 1 anh chị em: 12 lõi id: 10 lõi CPU: 6 apicid: 53 FPU: yes fpu_exception: yes mức CPUID: 11 wp: yes cờ: FPU VME de PSE tsc MSR pae MCE cx8 APIC tháng chín mtrr PGE MCA cmov pat pse36 clflush dts acpi mmx fxsr SSE SSE2 ss ht tm syscall nx pdpe1gb rdtscp lm constant_tsc ida nonstop_tsc Arat PNI dõi ds_cpl SMX vmx est TM2 SSSE3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm bogomips: 6649,91 clflush kích thước: 64 cache_alignment: 64 địa chỉ kích cỡ: 40 bit vật lý, 48 bit ảo quản lý điện: [8]

tôi đang sử dụng đầu -c -b -d 1.10 -p 24.670 | awk -v time = $ TIME '{print time, ",", $ 9}' để theo dõi việc sử dụng CPU.

Có ai đó có trải nghiệm tương tự khi tích hợp Jemlloc không?

Cảm ơn!

Trả lời

1

Câu hỏi này có thể không thuộc về ở đây vì các giải pháp trong thế giới thực, nó không liên quan đến những gì người khác tìm thấy trên các tình huống phần cứng/môi trường/sử dụng khác nhau của họ. Bạn nên kiểm tra trên hệ thống đích và xem những gì phù hợp với bạn.

Đối với bộ nhớ cao hơn, một trong những tối ưu hóa hiệu suất cổ điển nhất trong khoa học máy tính là sự cân bằng thời gian. Tức là, lưu trữ một số kết quả nhất định để tra cứu ngay sau này và ngăn ngừa tính toán lại thường xuyên. Ngoài ra, vì nó có lẽ phức tạp hơn rất nhiều, có lẽ sẽ có rất nhiều sách kế toán nội bộ hơn. Loại cân bằng này sẽ ít nhiều được mong đợi, đặc biệt là khi chọn giữa các biến thể của các mô-đun lõi thấp và được sử dụng rộng rãi như vậy. Bạn phải phục vụ các đặc tính peformance cho các đặc điểm sử dụng của bạn, vì thông thường, không có viên đạn bạc.

Bạn cũng có thể muốn xem google TCMalloc khá gần mặc dù tôi tin rằng Jemalloc có hiệu suất cao hơn một chút nói chung, cũng như tạo phân mảnh ít hơn theo thời gian.

+0

cảm ơn nhận xét của bạn Đã đặt trước. Tôi hoàn toàn đồng ý với bạn rằng hiệu suất chính xác sẽ hoàn toàn phụ thuộc phần cứng, tuy nhiên tôi đã tự hỏi nếu mô hình sử dụng CPU nên là cùng một nghĩa là cao hơn cho jemalloc trong bộ vi xử lý đa. – deb

1

Aerospike thực hiện jemalloc trên cơ sở dữ liệu NoSQL của chúng tôi và công bố công khai việc triển khai khoảng một năm trước với v3.3.x.Chỉ cần ngày hôm nay Psi Mankoski xuất bản an article on High Scalability về lý do tại sao và làm thế nào chúng tôi đã làm nó, và cải thiện hiệu suất nó đã cho so với GlibC malloc.

Chúng tôi thực sự thấy giảm sử dụng RAM do cách chúng tôi có thể sử dụng khả năng gỡ lỗi của jemalloc để giảm thiểu phân mảnh RAM. Trong môi trường sản xuất, bộ nhớ máy chủ% miễn phí thường là "đồ thị có gai nhọn" và thường tăng vọt 54% trước khi triển khai JEMalloc. Sau khi triển khai, bạn có thể thấy việc giảm sử dụng RAM trong khoảng thời gian phân tích 4 tháng. RAM% bộ nhớ miễn phí bắt đầu "flatline" và được dự đoán nhiều hơn, lơ lửng giữa ~ 22-40% tùy thuộc vào nút máy chủ.

Như đã nói trước, có ít phân mảnh hơn theo thời gian, điều này đồng nghĩa với việc sử dụng RAM ít hơn. Bài viết của Psi cho "bằng chứng trong bánh pudding" đằng sau một tuyên bố như vậy.

19

Một anh chàng khôn ngoan nói trên CppCon rằng bạn không bao giờ phải đoán về hiệu suất. Bạn phải đo nó thay thế. Tôi đã cố gắng sử dụng jemalloc với ứng dụng đa luồng Linux. Đó là máy chủ giao thức cấp ứng dụng tùy chỉnh (qua TCP/IP). Ứng dụng C++ này đã sử dụng một số mã Java thông qua JNI (gần 5% thời gian nó sử dụng Java, và 95% thời gian nó sử dụng mã C++). Tôi chạy 2 cá thể ứng dụng trong chế độ sản xuất. Mỗi người có 150 chủ đề. Sau 72 giờ chạy glibc một bộ nhớ sử dụng 900 M và jemalloc một bộ nhớ sử dụng 2,2 G bộ nhớ. Tôi không thấy sự khác biệt đáng kể về cách sử dụng CPU. Hiệu suất thực tế (thời gian phục vụ yêu cầu trung bình của khách hàng) gần giống nhau cho cả hai trường hợp. Vì vậy, trong thử nghiệm của tôi glibc tốt hơn nhiều là jemalloc. Tất nhiên, đó là ứng dụng của tôi cụ thể. Kết luận: Nếu bạn có lý do để nghĩ rằng quản lý bộ nhớ ứng dụng của bạn không hiệu quả do phân mảnh, bạn phải thực hiện kiểm tra tương tự như mô tả tôi đã mô tả. Đây là nguồn thông tin đáng tin cậy duy nhất cho các nhu cầu cụ thể của bạn. Nếu jemalloc luôn tốt hơn là glibc, glibc sẽ làm cho jemalloc người cấp phát chính thức của nó. Nếu glibc luôn tốt hơn, jemalloc sẽ ngừng tồn tại. Khi đối thủ cạnh tranh tồn tại thời gian dài song song, điều đó có nghĩa là mỗi đối thủ đều có sở thích sử dụng riêng của mình.

0

Tôi đang phát triển cơ sở dữ liệu NoSQL đơn giản.
(https://github.com/nmmmnu/HM4)

jemalloc vs chuẩn malloc

Khi tôi sử dụng jemalloc, giảm hiệu suất, nhưng bộ nhớ "phân mảnh" giảm là tốt. Jemalloc cũng dường như sử dụng ít bộ nhớ trên đỉnh, nhưng sự khác biệt là 5-6%.

Điều tôi muốn nói với phân mảnh bộ nhớ như sau.

  • Trước tiên tôi phân bổ rất nhiều cặp giá trị quan trọng (5-7 GB bộ nhớ)
  • Sau đó, tôi nhìn vào việc sử dụng bộ nhớ.
  • Sau đó, tôi xử lý tất cả các cặp và bất kỳ bộ nhớ nào khác mà tệp thực thi của tôi sử dụng. Thứ tự phân bổ giống như thứ tự của deallocation.
  • Cuối cùng tôi kiểm tra lại việc sử dụng bộ nhớ.

Trong tiêu chuẩn malloc, ussage gần như giống như trên đỉnh. (Tôi đặc biệt kiểm tra bộ nhớ mmap và không có).

Với mức sử dụng jemalloc tối thiểu.


thông tin tiền thưởng - tcmalloc

Thời gian qua tôi đã kiểm tra với tcmalloc, nó đã thực sự rất nhanh - có lẽ 10% cải tiến so với malloc chuẩn.

Trên đỉnh, nó tiêu thụ ít bộ nhớ hơn so với tiêu chuẩn malloc, nhưng nhiều hơn jemalloc.

Tôi không nhớ về phân mảnh bộ nhớ, nhưng nó đã xa kết quả jemalloc.

Các vấn đề liên quan