The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Facebook присоединился к организации Rust Foundation, opennews (ok), 29-Апр-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


100. "Facebook присоединился к организации Rust Foundation"  +/
Сообщение от uis (ok), 01-Май-21, 10:45 
>"скачай, собери и прилинкуй libcurl статически"

А чем динамический не угодил? Libcurl гарантированно есть даже на ведроиде. Разве-что в openwrt его нет, но там статику ссаными тряпками гонят, ибо места мало.

>Никаких дополнительних динамических линков

Будет 30 файлов по 30 метров(900 всего) вместо 50 файлов по одному метру(50 всего)

Такое есть смысл использовать в закрытых проектах. Ну ещё иногда для микроконтроллеров, но пихать туда libcurl изначально гиблая идея.

Ответить | Правка | К родителю #84 | Наверх | Cообщить модератору

106. "Facebook присоединился к организации Rust Foundation"  –1 +/
Сообщение от Ordu (ok), 02-Май-21, 04:56 
https://lore.kernel.org/lkml/CAHk-=whs8QZf3YnifdLv57+FhBi5_W.../

Динамическая линковка внезапно добавляет рантайм косты, накидывает ряд других проблем, взамен чего она позволяет иногда экономить память. За пределами glibc не нужно.

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

Но реально, это ж убожество. Ну ты сам прикинь: на каждую динамическую библиотеку при старте приложения надо сделать mmap, потом пройтись по табличке релоков/фиксапов, чтобы адреса в своём коде все поправить, но ведь всё это можно было сделать статически, причём даже лучше сделать: lto, pgo, заинлайнить функций, выкинуть неиспользуемое из библиотеки, а оставшееся рпзместить компактнее и более кеш-френдли. Можно сделать офигенно, и один раз на все запуски приложения, но вместо этого почемуто предпочитают делать кое-как, наспех, и при каждом старте. Ппц какой-то. Очередное наследие старпёров, протухший юниксвей, феласофея, скрепы, духовность... а инженерная сторона вопроса никому не интересна.

Ответить | Правка | Наверх | Cообщить модератору

113. "Facebook присоединился к организации Rust Foundation"  +/
Сообщение от uis (ok), 10-Май-21, 01:39 
> Динамическая линковка внезапно добавляет рантайм косты, накидывает ряд других проблем

Как бы это странно не звучало, но статика тоже может. Кеш-то не резиновый. Как процессорный, так и io. Да и так получается быстрее грузить систему с хардов или ещё чего с медленной скоростью чтения или случайного доступа.
>За пределами glibc не нужно.

Ну и перекомпилирую систему после обновления, например, libcurl.

> Не совсем понятно, чё все линуксодистры так озабочены динамической линковкой.

Драсты и правда озабочены. А лигуксоиды не все. Я знаю как минимум двух людей, которым всё равно.

> Но реально, это ж убожество. Ну ты сам прикинь: на каждую динамическую библиотеку при старте приложения надо сделать mmap

Дисковый кеш может спать спокойно
> потом пройтись по табличке релоков/фиксапов, чтобы адреса в своём коде все поправить

Относительная адресация
> это можно было сделать статически, причём даже лучше сделать: lto, pgo,

Это про оптимизацию. Зубилом хлеб не режут, ножём не делают статуи.

Ну и напоследок
>https://lore.kernel.org/lkml/CAHk-=whs8QZf3YnifdLv57+FhBi5_W...

Тут немного про другое. Тут про черезмерное использование динамичечкой линковки. И да, со статикой модет работать быстрее. Но это не повод запрещать динамику.

Ответить | Правка | Наверх | Cообщить модератору

115. "Facebook присоединился к организации Rust Foundation"  +/
Сообщение от Ordu (ok), 10-Май-21, 08:10 
>> потом пройтись по табличке релоков/фиксапов, чтобы адреса в своём коде все поправить
> Относительная адресация

Что относительная адресация? Вот написал ты в своей программе:

printf("Hello, world\n");

Это сведётся к:

call printf

какой адрес у printf? Этот адрес станет известным только в процессе работы динамического линкера. И никакая относительная адресация тебе не поможет.

pic код, как я понимаю, использует глобальную табличку оффсетов, и этот call становится косвенным вызовом, и требует дополнительного обращения к памяти. То есть, во-первых, ту табличку надо заполнить на этапе динамической линковки. Во-вторых, при _каждом_ вызове printf будет дополнительная стоимость для процессора -- обращение к глобальной табличке оффсетов, таким образом процессорный кеш, внезапно, вынужден постоянно эту табличку хранить.

> Как бы это странно не звучало, но статика тоже может. Кеш-то не резиновый. Как процессорный, так и io. Да и так получается быстрее грузить систему с хардов или ещё чего с медленной скоростью чтения или случайного доступа.

Ты замерял этот эффект? Я как-то очень сомневаюсь, что будет быстрее. Во-первых, процессорный кеш инструкций вылетает от любого чиха, и надеятся на то, что переключение процессов его сохранит... Лучше бы не сохраняло, потому как мы знаем о том к каким дырам в процессорах оно приводит. А значит возможность шарить код между процессами -- это антифича.

Во-вторых, дисковый кеш, по-моим наблюдениям, вылетает не из-за кода, а из-за данных. Данных на порядки больше кода, и тормоза там лезут именно из-за данных, которые надо читать с диска. Мне приходилось неоднократно сталкиваться с исследованиями о том, как необходимость взаимодействия с жёстким диском для чтения данных приводит к тормозам. Разного уровня исследованиями, начиная от "гляньте чуваки, у меня программа тормозила, но я тут алгоритм поменял, чтобы он читал в другом порядке, и хоп, она стала тормозить в разы меньше", и заканчивая почти уровнем научной статьи, где использовались различные способы измерений (один подтверждает/опровергает другой), проверялись альтернативные гипотезы, где человек шёл на очень серьёзные меры, чтобы показать, что тормоза возникают именно таким образом, каким он говорит. Мне попадались такие исследования про данные, но я не видел ни одного исследования, которое показывало бы превосходство динамической линковки над статической по скорости выполнения.

Я отмечу, что я не искал специально, может они и есть такие? Но вот тут как раз у меня и возникает вопрос: что ты знаешь, и почему ты думаешь, что ты это знаешь? Тебе известны такие исследования? Сейчас будет очень кстати поделиться ссылками на них. Потому как я в этом месте склонен делать вывод, что отсутствие свидетельств -- это свидетельство отсутствия: если проблему никто не подтвердил измерениями, значит проблемы нет.

>> это можно было сделать статически, причём даже лучше сделать: lto, pgo,
> Это про оптимизацию. Зубилом хлеб не режут, ножём не делают статуи.

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

> Тут немного про другое. Тут про черезмерное использование динамичечкой линковки. И да, со статикой модет работать быстрее. Но это не повод запрещать динамику.

А раст не запрещает динамику. Тебе никто не мешает объявлять extern-символы. Единственное что, есть ограничения на то, что может быть extern. Параметризованную функцию, например, ты не сделаешь extern. В целом, в rust'е, ты можешь создавать API для динамических библиотек, и использовать эти API, но эти API будут выглядеть так, как выглядят API C.

Ответить | Правка | Наверх | Cообщить модератору

116. "Facebook присоединился к организации Rust Foundation"  +/
Сообщение от uis (ok), 13-Май-21, 23:45 
> pic код, как я понимаю, использует глобальную табличку оффсетов, и этот call
> становится косвенным вызовом, и требует дополнительного обращения к памяти. То есть,
> во-первых, ту табличку надо заполнить на этапе динамической линковки. Во-вторых, при
> _каждом_ вызове printf будет дополнительная стоимость для процессора -- обращение к
> глобальной табличке оффсетов, таким образом процессорный кеш, внезапно, вынужден постоянно
> эту табличку хранить.

Если надо несколько раз вызвать одну и ту же функцию, то можно хранить её адрес в регистре. +PIC - это ASLR.

> Ты замерял этот эффект? Я как-то очень сомневаюсь, что будет быстрее. Во-первых,
> процессорный кеш инструкций вылетает от любого чиха, и надеятся на то,
> что переключение процессов его сохранит... Лучше бы не сохраняло, потому как
> мы знаем о том к каким дырам в процессорах оно приводит.
> А значит возможность шарить код между процессами -- это антифича.

Это делают разные кеши. Кэш инструкций реализован аппаратно, а кеш страниц ВНЕЗАПНО через MMU. Ну и без него придётся для каждого процесса выделять кучу реального пространства.

> но я не видел ни одного исследования, которое показывало
> бы превосходство динамической линковки над статической по скорости выполнения.

Я такого не заявлял. Я наоборот, говорил, что статика быстрее.
>И да, со статикой модет работать быстрее.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру