DEV Community

Laptop Hưng Phát
Laptop Hưng Phát

Posted on Originally published at technologyspot.vn

Ổ SSD đầy 80% hụt 50% IOPS ảnh hưởng tốc độ Metro React Native

Tại sao việc biên dịch mã nguồn qua Metro bundler lại chậm đi rõ rệt khi ổ cứng bắt đầu chật chội? Câu trả lời nằm ở độ trễ truy xuất ngẫu nhiên của bảng ánh xạ FTL trên ổ lưu trữ.

Cơ chế đọc ghi ngẫu nhiên của Metro bundler và giới hạn HMB

Khi phát triển ứng dụng React Native, Metro bundler liên tục quét hàng chục nghìn tập tin rời rạc trong node_modules để thực hiện Fast Refresh và dựng dependency graph. Khối lượng công việc này tạo ra áp lực I/O ngẫu nhiên 4KB liên tục lên hệ thống tệp.

Về mặt kỹ thuật, SSD có DRAM chuyên dụng duy trì tỷ lệ 1 GB DRAM trên 1 TB NAND để chứa toàn bộ bảng Flash Translation Layer (FTL). Bộ điều khiển tra cứu địa chỉ vật lý trong vài nano giây mà không cần đi qua bus hệ thống. Ngược lại, các ổ DRAM-less dùng chuẩn Host Memory Buffer (HMB) mượn 16–64 MB RAM từ máy chủ qua giao thức PCIe. Khi dung lượng ổ đĩa vượt ngưỡng 80%, vùng nhớ đệm 64 MB (như trên Samsung 980) không còn đủ sức bao quát dữ liệu phân tán. Bộ điều khiển buộc phải liên tục nạp và xả bảng FTL trực tiếp từ chip NAND flash.

Dữ liệu phân tích từ TechnologySpot ghi nhận trên bộ điều khiển Silicon Motion SM2263XT, khi mất vùng đệm ánh xạ, hiệu năng đọc ngẫu nhiên 4KB giảm từ 280.000 IOPS xuống còn 140.000 IOPS, tức sụt giảm đúng 50%.

Tối ưu hóa I/O cho môi trường dev React Native

Sự sụt giảm IOPS ngẫu nhiên phản hồi ngay vào thời gian Fast Refresh và quá trình build bundle khi chạy đồng thời cùng Android Emulator. Để hạn chế nghẽn cổ chai I/O khi ổ đĩa tiến sát mức 80%, cấu hình phân bổ luồng xử lý trong metro.config.js là giải pháp kỹ thuật cần thiết:

module.exports = {
  maxWorkers: 2,
  resetCache: false,
};
Enter fullscreen mode Exit fullscreen mode

Giảm maxWorkers giúp tránh tình trạng tranh chấp I/O quá mức khi bộ điều khiển SSD đang phải hoán đổi bảng chỉ mục FTL qua khe PCIe. Đồng thời, cấu hình Watchman theo dõi thư mục dự án thay vì để Node.js quét thủ công toàn bộ cây thư mục sẽ cắt giảm đáng kể các lệnh đọc 4KB không cần thiết.

Nếu thường xuyên làm việc với các dự án React Native quy mô lớn có cây thư mục phân tán, hãy chủ động dọn dẹp dung lượng ổ cứng để duy trì mức sử dụng dưới 70%, hoặc ưu tiên trang bị SSD có DRAM vật lý để giữ trọn vẹn băng thông truy xuất.

Top comments (0)