clone vs. pthread_create

Тема в разделе "WASM.UNIX", создана пользователем Quantum, 21 июн 2006.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Заменил вызов стандартного LIBC!pthread_create на системный вызов clone с флагами CLONE_VM и CLONE_FILES. Получил вполне рабочий тред без использования сишной либы, НО тред получился "тормознее" (примерно в 2 раза), чем был раньше с pthread_create. Порывшись в доках, обнаружил, что в ядре 2.4 появилась поддержка групп тредов. Если задать клону флаг CLONE_THREAD, то новый процесс (косящий под тред) впишется в одну с основным процессом группу и процессорное время они якобы будут делить более эффективно. Но с этим новым флагом клон вообще не создаётся: сискол возвращает отрицательное значение.



    Вопрос(ы):

    Действительно ли тормоза могут быть связаны с этой относительно новой фичей - группами?

    Чтоб заюзать CLONE_THREAD нужны какие-то дополнительные танцы с бубном?

    Может, pthread_create как-то поднимает приоритет новым тредам (как и зачем?)
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Видимо, я вчера просто неправильно замерял скорость. Сегодня после мелких исправлений с выравниванием стека и секций всё заработало практически в 2 раза быстрее, чем старый сишный билд. Тему можно считать закрытой.
     
  3. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    Quantum

    можешь еще использовать kernel_thread() (правда этот вызов доступен только из другого потока ядра, и он сводится к clone с флагом CLONE_VM).
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Iceberg
    Спасибо, но обычный clone неплохо себя зарекомендовал в плане скорости и совместимости.