Để biên dịch gói phần mềm trên máy trạm có nhiều lõi CPU (giả sử 12), giai đoạn cấu hình thường mất nhiều thời gian hơn so với giai đoạn biên dịch thực tế vì ./configure
thực hiện kiểm tra từng cái một, trong khi make -j
chạy gcc
song song các lệnh khác.
Tôi cảm thấy thật lãng phí tài nguyên khi có 11 lõi còn lại hầu hết thời gian chờ đợi ./configure
để hoàn thành chậm . Tại sao nó cần phải làm các bài kiểm tra tuần tự? Có phải mỗi bài kiểm tra phụ thuộc vào nhau? Tôi có thể bị nhầm lẫn, nhưng có vẻ như phần lớn trong số họ là độc lập.
Quan trọng hơn, có cách nào để tăng tốc ./configure
?
Chỉnh sửa: Để minh họa tình huống, đây là một ví dụ với GNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
Các kết quả:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
Với coreutils-8,9 , ./configure
mất nhiều thời gian hơn 6 lần make
. Mặc dù ./configure
sử dụng ít thời gian CPU hơn (nhìn vào thời gian "người dùng" và "sys"), nhưng sẽ mất nhiều thời gian hơn ("thực") vì nó không song song. Tôi đã lặp lại thử nghiệm một vài lần (với các tệp có liên quan có thể nằm trong bộ nhớ cache) và thời gian trong vòng 10%.