Profile-guided optimization (PGO) là kỹ thuật biên dịch hai lần, nơi lần đầu ghi lại các bộ đếm thực thi trên mỗi đường control flow trong quá trình training, sau đó lần thứ hai sử dụng dữ liệu này để tối ưu hóa inlining, branch layout, hot/cold function splitting và các kỹ thuật khác. Nguyên nhân kỹ thuật đằng sau hiệu quả của PGO là shape of control flow được exercise trong training quan trọng hơn các giá trị thực tế của data, điều này giải thích tại sao MySQL Test Run với coverage rộng có thể chuyển hiệu quả sang production performance dù workload không giống TPCC. Hệ quả là PGO có thể cải thiện đáng kể hiệu năng ứng dụng bằng cách tập trung tối ưu hóa vào các code path thực tế được sử dụng nhiều. Điều đáng học là việc chọn workload training phù hợp - không cần giống production nhưng cần coverage control flow tốt - sẽ quyết định hiệu quả của PGO, với các thử nghiệm cho thấy cải thiện hiệu năng lên đến 15-20% trong một số trường hợp.
Why read it: PGO là kỹ thuật tối ưu hóa biên dịch hai bước giúp tăng hiệu năng ứng dụng bằng cách phân tích luồng điều khiển được thực thi trong quá trình đào tạo.
Answer 3 short questions to earn reward points for this article. Only do it if you want the points.
3 questions · under a minute · optional
Source: https://www.percona.com/blog/pgo-or-not-pgo-this-is-the-dilemma-step-2. 8 Sync News only summarizes and links out; content copyright belongs to the authors and original sources.
Đang tải bình luận…
ClickHouse phải giải quyết vấn đề memory safety khi viết extension cho Postgres bằng C/C++, do hai ngôn ngữ này không có bảo vệ tự động. Họ xử lý bằng cách thiết lập ranh giới rõ ràng giữa C và C++ code, cùng với việc sử dụng isolated helper processes. Giải pháp này giúp ngăn chặn buffer overflow và memory leak, đặc biệt quan trọng khi xử lý dữ liệu lớn. Lập trình viên nên đọc bài để hiểu cách ClickHouse quản lý memory giữa các ngôn ngữ khác nhau và áp dụng pattern này vào các dự án của mình.
Bài viết này giải quyết các thách thức về an toàn bộ nhớ khi kết hợp C và C++ cho Postgres extensions, từ ranh giới ngôn ngữ sạch sẽ đến các tiến trình trợ lý được cách ly.
WordPress 7.2 đã thêm NO_BACKSLASH_ESCAPES vào danh sách các chế độ SQL không được hỗ trợ, cùng với STRICT_ALL_TABLES, TRADITIONAL và ANSI. Nguyên nhân kỹ thuật là WordPress sử dụng ký tự backslash (\) để escape các ký tự đặc biệt trong SQL. Việc bật chế độ NO_BACKSLASH_ESCAPES sẽ phá vỡ cơ chế escape này, gây ra lỗi truy vấn SQL. Thay đổi này đảm bảo WordPress tương thích tốt hơn với các hệ thống database. Đây là bài học quan trọng về việc quản lý chế độ SQL khi sử dụng các framework PHP như WordPress.
Lập trình viên nên đọc bài này để hiểu cách thay đổi chế độ SQL NO_BACKSLASH_ESCAPES trong WordPress 7.2 ảnh hưởng đến xử lý ký tự đặc biệt trong truy vấn dữ liệu.
Một nghiên cứu học thuật mới phát hiện ra các tấn công Spectre-v2 đang được hồi sinh qua các JIT compiler như SpiderMonkey, eBPF và GraalVM, khai thác mã tự sửa đổi và các instruction đã lưu trong cache. Trong một bản cập nhật gần đây, Linux kernel đã vá hơn 1,200 lỗ hổng bảo mật, tiếp tục xu hướng "AI Vulnpocalypse". Google tạm ngừng chương trình thưởng lỗ hổng mã nguồn mở do nhận lượng lớn báo cáo lỗi AI chất lượng thấp, sẽ xem xét lại vào năm 2027. Nhiều sự kiện khác bao gồm Asos bị ransomware qua tài khoản Snowflake bị xâm phạm, lỗi trên robot cắt cỏ Mammotion cho phép truy cập dữ liệu 337,000 khách hàng và camera trực tiếp, cùng với việc lấy chứng chỉ TLS giả cho domain Google ccTLD qua nhà đăng ký bị hack.
Lập trình viên nên đọc bài này để cập nhật những lỗ hảo hiểm mới nhất, bao gồm các khai thác Spectre tái xuất hiện và hơn 1200 lỗi bảo mật trong Linux kernel.
Bài viết thảo luận về hiện tượng chuyển đổi kiểu integral promotion và hành vi bất ngờ trong chuyển đổi boolean trong C++. Nguyên nhân kỹ thuật nằm ở cách unscoped enum được xử lý và quy tắc conversion sang boolean, dẫn đến undefined behavior trong một số trường hợp. Hệ quả là các biểu thức như !true == true có thể cho kết quả true thay vì false, gây khó khăn trong việc kiểm tra logic. Điều đáng học là cách xử lý type promotion và conversion trong C++ có thể dẫn đến kết quả phản trực giác, đặc biệt khi làm việc với enum và boolean expressions.
Bài viết này giúp lập trình viên hiểu những hành vi bất ngờ trong biến đổi boolean và các vấn đề liên quan đến quảng tích enum.
Trên instance GCP c4d-standard-4, tiến trình MySQL tiêu tốn 10.4 GB RAM dù innodb_buffer_pool_size chỉ được thiết lập là 7168 MB. Khoảng trống này được truy qua 4 lớp: dự kiến overhead từ InnoDB/Performance Schema/thread-buffer, khoảng ~9% mmap chunk padding trên buffer pool, sự tích tụ dirty pages của jemalloc trên DR replica không hoạt động, và nguyên nhân gốc - MALLOC_CONF không được thiết lập khiến decay của background_thread bị vô hiệu hóa. Các sửa chữa gồm giảm buffer pool thành bội số sạch (6144 MB), cắt giảm max_connections từ 3000 xuống 500, bật background_thread của jemalloc với decay 5 giây, và thêm swap để phòng OOM, giúp giảm RSS xuống còn ~7.9 GB. Bài viết cung cấp kiến thức sâu về quản lý memory của MySQL khi sử dụng jemalloc, cách tối ưu buffer pool size và thiết lập MALLOC_CONF phù hợp.
Lập trình viên cần đọc bài này để hiểu cách điều khiển và tối ưu hóa bộ nhớ InnoDB trên MySQL khi các tham số cơ bản như innodb_buffer_pool_size không đủ để giải quyết cảnh báo nhớ, khi hệ thống vẫn tiêu thụ nhiều bộ nhớ hơn dự kiến do các yếu tố như cấu hình bộ nhớ phân vùng, quá trình làm sạch nhớ của jemalloc, hoặc tình trạng replica hoạt động không hiệu quả.
Người thực hành MySQL khuyên không nên dùng các kiểu dữ liệu phức tạp như TIMESTAMP, DATE/TIME hay ENUM, thay vào đó nên dùng các kiểu số đơn giản hơn. Việc sử dụng ENUM gặp vấn đề khi xóa giá trị buộc phải rebuild toàn bộ bảng, cùng lỗi MySQL khiến MIN()/MAX() hoạt động không nhất quán trên ENUM.
Lập trình viên nên đọc bài này để tránh rủi ro về hiệu suất, tính bảo trì và tính nhất quán khi sử dụng các kiểu dữ liệu phức tạp như ENUM và TIMESTAMP trong MySQL, mà thay vào đó có thể áp dụng các giải pháp đơn giản và đáng tin cậy hơn.
Bối cảnh: Compiler code generation đôi khi sử dụng cả hai instruction ud2 và int 3 cho các đoạn code không bao giờ thực thi. Nguyên nhân kỹ thuật: ud2 là một instruction trap không thể bị bỏ qua trên các CPU hiện đại, trong khi int 3 có thể bị xử lý bởi debugger. Hệ quả: Sự lựa chọn giữa hai instruction này ảnh hưởng đến khả năng gỡ lỗi và hiệu năng runtime. Điều đáng học: Việc hiểu sự khác biệt này giúp lập trình viên tối ưu hóa debugging experience và hiểu sâu hơn về behavior của compiler code generation.
Bài viết giải thích sự khác biệt giữa hai chỉ thị trap ud2 và int 3 mà compiler sử dụng cho các đoạn code không bao giờ thực thi, giúp lập trình viên hiểu sâu hơn về cơ chế tối ưu hóa của biên dịch.
Go 1.27 giới thiệu các API vector SIMD đặc thù kiến trúc dưới dạng experimental. API này được phát triển để tận dụng tối đa sức mạnh xử lý song song của các instruction set như AVX-512, NEON, hay SSE2 trên kiến trúc cụ thể. Việc tùy biến theo kiến trúc giúp tăng hiệu năng lên đến 3-4 lần cho các phép tính số học trên vector. Điều đáng học là cách Go cân bằng giữa tính di động và tối ưu hóa hiệu năng, cho phép lập trình viên lựa chọn mức độ tùy chỉnh phù hợp với nhu cầu ứng dụng.
Go 1.27 giới thiệu API vector SIMD cụ thể cho kiến trúc giúp tối ưu hóa hiệu năng ứng dụng.
Read the news here, practice coding, follow structured courses and train for IELTS on our sibling products — all connected through one 8 Sync account.
The ecosystem home: product overviews, blog and full pricing.
ExploreLearn along a clear roadmap: videos, auto-graded quizzes, certificates and mentors who ship for a living.
View the roadmap1,000+ DSA problems in Vietnamese, auto-graded across 7 languages — many FREE, right in your browser.
Practice for freeAI grading for all four IELTS skills with detailed rubric feedback.
Try it freeA 22 MB AI IDE for Vietnamese devs.
Download freeOrganizational memory for AI agents.
ExploreAI that staffs your Fanpage and qualifies leads for you.
Try it