В Linux 100% CPU — это одно ядро. Если ядер несколько, то максимум — это N*100%, где N — число ядер всех процессоров.
По этому 77% — это будет меньше одного ядра, а не 3 ядра из 4-х, как предполагается выделить под компиляцию.
Лаги от IO самые неприятные. Если вам дают 10% CPU вместо ожидаемых 100, вы всего лишь в 10 раз снижаете скорость. А если вас поймали на IO, то придётся тупить до завершения всех тех, кто перед тобой. С вытекающими «вообще ничего не делает и висит».
Вот так можно процесс по памяти ограничить (иногда бывает полезно при отладке прожорливых программ — чтоб систему в OOM/SWAP не загнать случайно отожрав всю доступную память) twitter.com/seriyps/status/364154421866790912
С cpulimit как-то попроще всё. Мало того, её на ходу можно к уже запущенным процессам применять, например, к skype, дав ему прогрузиться, а потом ограничив его 0.5% проца, чтобы не расходился особо.
локальная компиляция без лагов