LINUX.ORG.RU

Два простых вопроса по distcc

 , , ,


0

1

Пользовался пару лет назад distcc — нравилось, отлично работало, но тогда спека была: десктоп Intel + ноут Intel и пакеты для ноута собирались на десктопе.

Теперь же меня интересует несколько другая работа, интересует возможно ли это, два вопроса:

1.

  • десктоп AMD
  • ноут Intel

Разумно в данном случае было бы впердолить для нормальной разпердоленной работы в настройках -march=native , но вики говорит:

Не используйте -march=native в переменных CFLAGS и CXXFLAGS файла make.conf.
Если march установлен в native, то distccd не сможет распределить работу по другим машинам.
Подходящее значение для march можно получить с помощью следующей команды:

user $gcc -v -E -x c -march=native -mtune=native - < /dev/null 2>&1 | grep cc1 | perl -pe 's/ -mno-\S+//g; s/^.* - //g;'
ну так, понятно, что на AMD будет -march=bdver3 , а на ноуте -march=sandybridge , сможет ли в таком случае работать?

2.

Второй и самый важный вопрос: могут ли машины компилить одновременно, т.е. господин (ноут) собирает себе пакетики и компилит, а раб (десктоп) просто помогает ему компилить, а не компилит исключительно сам?

Спасибо.


distcc вот для второго вопроса и придуман. По сути с помощью утилиты distcc ты распределяешь компиляцию на несколько машин для этого надо точно знать под какую архитектуру собираешь. Команда из примера это помогает определить и занести в конфиг. Этот конфиг будет передаваться на все машины задействованые в компиляции. Если ты заюзаешь native то ты тупо сломаешь систему такой сборкой (скорее всего ни один пакет вообще не собирется) т.к. на одном компе это часть файлов собирается с одними флагами, а на другом с другими. В итоге получишь кошмар который вряд ли скрутиться в конце в нормальное приложение.

deterok ★★★★★
()
Ответ на: комментарий от deterok

Так у меня так и настроенно уже, на десктопе:

CFLAGS="-march=bdver3 -mtune=bdver3 -O2 -pipe -fno-stack-protector"
на ноуте:
CFLAGS="-march=sandybridge -mtune=sandybridge -O2 -pipe -fno-stack-protector"
(хотя еще где-то полгода назад и ранее выдавало не sandybridge, а -march=corei7-avx , наверное что-то поменяли в gcc).

Если ты заюзаешь native то ты тупо сломаешь систему такой сборкой

Ясно, я почему-то думал, что наоборот, он одними инструкциями будет компилить на другую архитектуру, которая их не поддерживает, и всё должно быть как-бы generic, но кажется я начинаю понимать, в чём тут дело, хотя сформулировать не могу.

kep
() автор топика
Ответ на: комментарий от Deleted

У меня на сервере вот так:

-march=amdfam10 -mmmx -m3dnow -msse -msse2 -msse3 -msse4a -mcx16 -msahf -mpopcnt -mabm -mlzcnt -mprfchw -mfxsr --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=amdfam10 -fstack-protector-strong

На клиенте вот так:

-march=bdver2 -mmmx -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -maes -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mtbm -mavx -msse4.2 -msse4.1 -mlzcnt -mf16c -mprfchw -mfxsr -mxsave --param l1-cache-size=16 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=bdver2 -fstack-protector-strong

И при этом никаких проблем нет, если не ставить нестабильный gcc и не накладывать сомнительных патчей.

И на содержимое make.conf на клиентской машине distcc действительно пофиг, если считать сервером машину, для которой ты собираешь пакеты, а клиентами все остальные.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.