Как устранить серьезные задержки IOWait во время компиляции GCC? - PullRequest
0 голосов
/ 14 января 2012

(Не знаю, строго ли это по теме, но я не вижу для этого лучшего сайта Stack Exchange.)

У моей машины для разработки Linux ограниченный объем памяти (так чтоговорить - 2,5 ГБ не кажется мне большим ограничением).В первый раз, когда я пытаюсь скомпилировать какой-либо фрагмент моего проекта небольшого или среднего размера, я получаю задержку IOWait от трех до пяти минут (да, минут ) до того, как она действительно скомпилируется.Как только он завершит чтение того, что читает, сама компиляция займет всего несколько секунд.

Если бы это было все, я бы просто ухмыльнулся и вытерпел это, но если бы я делал по существу что-нибудь между компиляциями- даже просто переключаясь в окно Firefox на несколько минут исследования - я снова получаю ту же задержку.Трудно оставаться сосредоточенным на таких долгих сессиях с большим пальцем.

Система использует больше гигабайта дискового кеша.Мой тщательно скомпилированный предварительно скомпилированный заголовочный файл имеет размер чуть более 200 МБ - большой, но недостаточно большой для переполнения кэша.Что ищет GCC, что так чертовски долго ?!Или, альтернативно, как я могу узнать?У GCC есть изумительный набор параметров отладки , но ни один из них, похоже, не показывает, какие файлы он просматривает.

Любые указатели будут оценены.

1 Ответ

0 голосов
/ 16 января 2012

Я не мог придумать, как определить, на что он смотрит, но я нашел решение.

Снижение давления в кэше со 100 до 10 (с помощью команды sudo sysctl -w vm.vfs_cache_pressure=10) очень помогло, сказав системе, что данные файловой системы должны храниться в кеше в предпочтении относительно содержимого файла; время компиляции одного тестового файла cpp сократилось до 16 секунд, даже после нескольких часов.

Но после оставления системы работающей на ночь, компиляция вернулась к 3:18 в первый раз и упала до 1:04 во второй (и 1:01 в третий); единственное отличие заключалось в том, что другие части системы захватили больше памяти за одну ночь. Поэтому я укусил пулю и выделил ей около половины гигабайта памяти ... с настройкой давления кеша, которая, кажется, полностью решила проблему.

Я все еще хотел бы точно знать, о чем он так много читает, что более гигабайта кеш-памяти не может вместить все это, но пока этого будет достаточно.

...