Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 28.10.16 08:03
Оценка: 52 (5)
Шпайш машт флоу
Автор: Sinix
Дата: 15.09.16
, шоу то го он
Автор: Sinix
Дата: 04.10.16
и всё в таком духе.

Сегодня — How does the 'fixed' keyword work от Matt Warren.

Под капотом — магия реализации RuntimeHelpers.OffsetToStringData
  спойлер
add rcx, 12

, немножко наблюдений за JIT в естественной среде обитания и совсем чуть-чуть о неприятных последствиях для GC. Как обычно, кому недостаточно — больше матчасти прячется по ссылкам в самой статье.
И чтоб два раза не вставать, про борьбу с неприятными последствиями для gc — раз, два, три.
Отредактировано 09.01.2017 11:52 Sinix . Предыдущая версия . Еще …
Отредактировано 31.10.2016 9:03 Sinix . Предыдущая версия .
минутка хардкора
Re: Минутка хардкора-3: there, I fixed it.
От: Sharov Россия  
Дата: 28.10.16 11:37
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Шпайш машт флоу
Автор: Sinix
Дата: 15.09.16
, шоу то го он
Автор: Sinix
Дата: 04.10.16
и всё в таком духе.


S>Сегодня — How does the 'fixed' keyword work от Matt Warren.


S>Под капотом — магия реализации RuntimeHelpers.OffsetToStringData

S>
  спойлер
S>
add rcx, 12



В чем магия? Почему должно быть как-то иначе или сложнее?
Кодом людям нужно помогать!
Re[2]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 28.10.16 11:43
Оценка:
Здравствуйте, Sharov, Вы писали:

S>В чем магия? Почему должно быть как-то иначе или сложнее?


Сорри, забыл.
Re: Минутка хардкора-3: there, I fixed it.
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.16 17:36
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Под капотом — магия реализации RuntimeHelpers.OffsetToStringData


А много ли народ вообще fixed и тем более GCHandle в своем коде используют?

Потом если уж ты перешел на такой хардкор, то не проще ли буферы занимать у ОС напрямую?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 03.11.16 18:23
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>А много ли народ вообще fixed и тем более GCHandle в своем коде используют?

interop же. И в особенности с async io. Решается разнообразно, с вводом Memory<T> (массивы поверх любой памяти, от unmanaged и mem-mapped files и до stackalloc) вопрос полуокончательно закроется. Общую повестку на сегодня (неполную) можно глянуть тут.

И вот тут подробней про проблему.
Re[3]: Минутка хардкора-3: there, I fixed it.
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.16 20:04
Оценка:
Здравствуйте, Sinix, Вы писали:

S>interop же. И в особенности с async io. Решается разнообразно, с вводом Memory<T> (массивы поверх любой памяти, от unmanaged и mem-mapped files и до stackalloc) вопрос полуокончательно закроется.


В интерпопе тебе не нужно самому пины ставить. Просто опиши маршилинг и спи спокойно. Плюс там пин делается на короткое время. Так что это никого не напрягает.

S>Общую повестку на сегодня (неполную) можно глянуть тут.


S>И вот тут подробней про проблему.


Это все "хотелки" или у МС серьезные намерения?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 03.11.16 20:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В интерпопе тебе не нужно самому пины ставить. Просто опиши маршилинг и спи спокойно. Плюс там пин делается на короткое время. Так что это никого не напрягает.

Напрягает, если код абы как написан и куча async IO — соседние объекты очень быстро в gen2 переезжают. Приходится следить.

VD>Это все "хотелки" или у МС серьезные намерения?

А кто ж их знает. По CLR вообще только начали что-то делать, до этого в основном аврально портировали и чинили поломанное при портировании.

Так-то простор для оптимизаций неимоверный, особенно с native-компиляцией, но по факту даже слухов нет на тему "мы серьёзно занялись перфомансом".
Re[5]: Минутка хардкора-3: there, I fixed it.
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.16 21:10
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Напрягает, если код абы как написан и куча async IO — соседние объекты очень быстро в gen2 переезжают. Приходится следить.


Тут оно как? Если код написан абы как, то помочь может только смена команды и полное переписывание.

S>А кто ж их знает. По CLR вообще только начали что-то делать, до этого в основном аврально портировали и чинили поломанное при портировании.


А начали? Дык этому радоваться надо. А то 16 лет пресс-релизов.

S>Так-то простор для оптимизаций неимоверный, особенно с native-компиляцией, но по факту даже слухов нет на тему "мы серьёзно занялись перфомансом".


Так начали или не начали?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 04.11.16 08:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так начали или не начали?


Официально ничего нет, текущая задача — наконец завести полноценный дотнет на основных платформах, неофициально — в тикетах всё-таки попадаются исправления, связанные с производительностью. Как пример — недавнее
Автор: rameel
Дата: 03.11.16
от ув. rameel.
Re[7]: Минутка хардкора-3: there, I fixed it.
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.11.16 12:40
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Официально ничего нет, текущая задача — наконец завести полноценный дотнет на основных платформах


А полноценный это значит с поддержкой ГУЯ? Или имеется в виду только ядро?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 04.11.16 13:01
Оценка: 88 (2)
Здравствуйте, VladD2, Вы писали:

VD>А полноценный это значит с поддержкой ГУЯ? Или имеется в виду только ядро?

Ядро.

Про гуй ходят два упорных слуха — про попытку сделать portable wpf и второй, не менее упорный, про "в итоге купили xamarin".

Что интересно, никаких первоисточников, максимум чего попадалось — видео с упоминанием про WPFLocal.
Re[8]: Минутка хардкора-3: there, I fixed it.
От: Слава  
Дата: 04.11.16 13:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А полноценный это значит с поддержкой ГУЯ? Или имеется в виду только ядро?


На некоторых платформах (не будем показывать пальцем) такой гуй, что он как бы есть — но всё равно его нет.
Re[9]: Минутка хардкора-3: there, I fixed it.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.11.16 09:11
Оценка:
Здравствуйте, Слава, Вы писали:

С>На некоторых платформах (не будем показывать пальцем) такой гуй, что он как бы есть — но всё равно его нет.


GTK+ вроде везде есть, и GTK# вполне стабилен. Но да, пользоваться этим можно только если совсем припрет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[9]: Минутка хардкора-3: there, I fixed it.
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.11.16 15:31
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, VladD2, Вы писали:


VD>>А полноценный это значит с поддержкой ГУЯ? Или имеется в виду только ядро?

S>Ядро.

S>Про гуй ходят два упорных слуха — про попытку сделать portable wpf и второй, не менее упорный, про "в итоге купили xamarin".


S>Что интересно, никаких первоисточников, максимум чего попадалось — с упоминанием про WPFLocal.


Кстати, а что там с silverlight?
https://www.microsoft.com/rus/silverlight/overview/ria/ria-details.aspx#mac

ОС Mac, Windows, Linux
При создании приложений для Silverlight вы фактически создаете приложение, которое будет одинаково выполняться в Internet Explorer, Firefox и Safari в операционных системах Windows, Mac и Linux. Silverlight в разных платформах и браузерах содержит абсолютно одинаковые функции, обеспечивающие одинаковый результат для всех ваших пользователей.
Корпорация Microsoft сотрудничает с компанией Novell, в целях обеспечения поддержки Silverlight для платформы Linux. Mono – проект по созданию программного обеспечения с открытым исходным кодом, размещенный по адресу http://www.mono-project.com/Moonlight. Он доступен для всех основных дистрибутивов Linux. Moonlight 2.0 поддерживает C# и другие динамические языки и содержит элементы управления, схему размещения и мультимедиа.
Помимо этого можно перенаправлять приложение в графическую подсистему Windows Presentation Foundation (WPF). Это обеспечивает полный доверительный доступ к машине с предоставлением усовершенствованного аппаратного ускорения, полной трехмерной графикой, возможностью записи в файловую систему и поддержкой устройств. Silverlight и WPF используют одни и те же API, XAML, элементы управления и инструменты.

и солнце б утром не вставало, когда бы не было меня
Re[10]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 05.11.16 15:58
Оценка: 2 (1)
Здравствуйте, Serginio1, Вы писали:

S>>Что интересно, никаких первоисточников, максимум чего попадалось — с упоминанием про WPFLocal.


S> Кстати, а что там с silverlight?

А всё с silverlight. RIP в смысле.


Опс, про wpf local забыл дописать. Саму идею забросили, т.к. требовалось поставлять библиотеки для взрослого фреймворка, распространять их через ClickOnce и ещё и ngen-ить их для сохранения совместимости, вот тут подробней. Каким боком из этой затеи появились слухи про кроссплатформенный wpf — науке неизвестно, других первоисточников не попадалось.
Re[9]: Минутка хардкора-3: there, I fixed it.
От: TK Лес кывт.рф
Дата: 05.11.16 19:18
Оценка:
Здравствуйте, Слава, Вы писали:

С>На некоторых платформах (не будем показывать пальцем) такой гуй, что он как бы есть — но всё равно его нет.


VS Code вполне ничего получился
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Минутка хардкора-3: there, I fixed it.
От: rameel https://github.com/rsdn/CodeJam
Дата: 06.11.16 15:50
Оценка: 121 (4)
Здравствуйте, VladD2, Вы писали:

VD>Так начали или не начали?


Судя по комитам в coreclr, там не так много человек занимаются тюнингом джита. Но подвижки все же есть. Сразу все и не вспомнить. В основном это касается инлайнинга. Как я понял, эту часть чуть ли не полностью переписали. Теперь он более агрессивный с рядом дополнительных эвристик, чтобы не ухудшать характеристики, как например вот здесь: https://github.com/dotnet/coreclr/issues/7569. Также идет работа над тем, чтобы джит мог инлайнить методы с fixed переменными. Возможно включат поддержку cmove для x != null ? 1 : 0, а не использовать генерацию 2 условных переходов как сейчас. Более качественный VALUE NUMBERING и CONSTANT PROPOGATION. Включают поддержку Span на уровне джита, и вот собираются делать что-то со стейт-машиной для асинхронного кода, который генерирует C# для async методов.

В общем, понемногу улучшают качество генерируемого кода, не так как хотелось бы конечно, но все же.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[7]: Минутка хардкора-3: there, I fixed it.
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.11.16 16:11
Оценка: +1
Здравствуйте, rameel, Вы писали:

R>В общем, понемногу улучшают качество генерируемого кода, не так как хотелось бы конечно, но все же.


Хорошо, конечно, что хоть что-то делают. Но действительно не так как хотелось бы. Основные проблемы с производительностью все же проистекают из поддержки ЖЦ. Под нее генерируется куча кода, который далек от "сишного" идеала. Ну, и сам ЖЦ конечно накладывает ограничения.

Дотнету нужны качественный эскейп-анализ с перекладкой локальных объектов на стек или в отдельную кучу. Возможность использования отдельных куч в том числе привязанных к потоку.

Хотя если инлайнинг сделать действительно куртым, то можно инлайнить/переписывать linq-код, что было бы очень полезно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Минутка хардкора-3: there, I fixed it.
От: VladCore  
Дата: 08.11.16 13:12
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Шпайш машт флоу
Автор: Sinix
Дата: 15.09.16
, шоу то го он
Автор: Sinix
Дата: 04.10.16
и всё в таком духе.


S>Сегодня — How does the 'fixed' keyword work от Matt Warren.


S>Под капотом — магия реализации RuntimeHelpers.OffsetToStringData

S>
  спойлер
S>
add rcx, 12


S>, немножко наблюдений за JIT в естественной среде обитания и совсем чуть-чуть о неприятных последствиях для GC. Как обычно, кому недостаточно — больше матчасти прячется по ссылкам в самой статье.
S>И чтоб два раза не вставать, про борьбу с неприятными последствиями для gc — раз, два, три.

на x64 насколько я понимаю фрагментация памяти долгоживушими pinned "объектами" то не проблема жеж
главное что бы время таких pinned было ограничено таймаутами
Re[2]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 08.11.16 13:22
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>на x64 насколько я понимаю фрагментация памяти долгоживушими pinned "объектами" то не проблема жеж

VC>главное что бы время таких pinned было ограничено таймаутами

Сам по себе pinned проблем не создаёт. Проблема в соседних объектах, которые уезжают в старшие поколения и вызывают mid-life crisis.
Re[3]: Минутка хардкора-3: there, I fixed it.
От: VladCore  
Дата: 08.11.16 18:57
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, VladCore, Вы писали:


VC>>на x64 насколько я понимаю фрагментация памяти долгоживушими pinned "объектами" то не проблема жеж

VC>>главное что бы время таких pinned было ограничено таймаутами

S>Сам по себе pinned проблем не создаёт. Проблема в соседних объектах, которые уезжают в старшие поколения и вызывают mid-life crisis.


если из за них GC процессор жрёт, то асинхронный IO не нужен

но с другой стороны набрать одновременно хотя бы миллион асинхронных IO это надо постараться. Тут вверху правильно написали что долгоживущих pinned мало кто пишут. при всем уважении тема похоже экзотическая и в природе не встречается.
Отредактировано 08.11.2016 19:03 VladCore . Предыдущая версия .
Re[4]: Минутка хардкора-3: there, I fixed it.
От: Sinix  
Дата: 08.11.16 19:15
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>если из за них GC процессор жрёт, то асинхронный IO не нужен

Ну, это из серии "если зуб болит — то и фиг с ней, с головой".
Решается всё. Обычно — использованием buffer pool / object pool, в clr vNext обещают [url=https://github.com/dotnet/coreclr/issues/5851]Span<T>/Memory<T>[url] — аналог массивов, но поверх любой памяти, unmanaged — тоже. С поддержкой interop, разумеется. Т.е. проблема с pinned уйдёт окончательно для большинства вещей, как насчёт делегатов — пока не известно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.