Как добиться бесперебойной работы аудио при большой нагрузке?

hoha32

А там есть ответ на вопрос "Как добиться бесперебойной работы аудиопроигрывателя при большой нагрузке на процессор и дисковую подсистему?"

Vantucha

если аудиопроигрыватель майкрософтовский - возможно, что-нибудь есть
иначе, лучше обращаться в техподдержку аудиопроигрывателя, который ты используешь
я бы, наверное, в таком случае ответил "никак" из вежливости =)

bastii

там ответят ждать следующей версии винды
кстати WMP при проигрывании музыки очень неплохо переживает большые нагрузки на проц и винт (с видео уже конечно больше проблем)
думаю можно найти плагин, который повышает приоритет процесса
пишется этот плагин очень лекго (это всего лишь inproc COM компонет, который при создании и разрушении увеличивает и соотв уменьшает приоритет процесса)
если очень хочется, то можно поставить Media SDK, там будет визард, с пом его генерируешь background plugin
там будут два пустих метода, куда можно вписать изменения приоритета

hoha32

Я юзаю STP. Он позволяет менять собственный приоритет - иногда это ощущается, а иногда - нет.

ppplva

Для аудио-проигрывателя важнее i/o priority - есть такая штука в виндах ?

hoha32

не видел. и в унихе своём не видел - правда, и повода не было.

bastii

Для аудио-проигрывателя важнее i/o priority - есть такая штука в виндах ?
Нет, вроде
Зато в Longhorn появиятся определенные фишки. Типа можно будет забивать определенное кол-во мощи проца и io, которое будет гарантировано доставаться потоку.

ppplva

Longhorn - это фантастика.

hoha32

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

Ivan8209

В твоём унихе у этой задачи есть единственное назначение:
пихать музыку в /dev/dsp*.
Поэтому её приоритет совпадает с приоритетом ввода-вывода.
---
...Я работаю антинаучным аферистом...

hoha32

Неверно. Это лишь третье назначение. Первое - считывание музыки в закодированном виде с винта, второе - декодирование (включая эффекты).

sergey_m

Зато в Longhorn появиятся определенные фишки. Типа можно будет забивать определенное кол-во мощи проца и io, которое будет гарантировано доставаться потоку.
В FreeBSD 8.0 или Linux 2.10.0 и не такие фишки будут.

bastii

Не знаю. Я в этом мало понимаю. Но, что мешает просто учитывать это шедулером. Давать сначала проц время застолбившим потокам, а потом уже согласно приоритетам.
Тут ведь еще проблема в проигрывателем в том, что винда повышает приоритет потока с активным окошком. Получается, что если ты разбтаешь с прогой, которая сильно проц нагружает, то она еще к тому же будет иметь боле высокий приоритет чем твой плеер, который висит на заднем плане. Увеличение приоритета процесса плеера эту проблему решает.
В Longhorn у них задача обеспечить плавность анимации, чтобы не дергалась. Даже если все это будет хорошо ускорятся аппаратно, т.е. в общем все это обилие анимации не будет жрать большой процент проц мощи, нужно регулярно управлять этим процессом анимации. Получается, что нужно мало проц мощности, но часто. Понятно, что управление чрез приоритет это не совсем то в этом случае. Короче интересно, что у них получится.

bastii

Ну расскажи. Просвети, так сказать.

hoha32

Увеличение приоритета процесса плеера эту проблему решает.
Ставил real time. До определённого момента помогает, но не более того.
Получается, что нужно мало проц мощности, но часто.
в БСД эта проблема решается строкой в ядре HZ = 1000 - частота переключения между процессами.
Нее... Боюсь, мелкософтовцы без двухъядерных процессоров не обойдутся

Ivan8209

Любопытно как моллюски будут пихать нераскодированные данные в свой /dev/dsp*.
В рамках данной задачи это (почти) одно и то же.
---
...Я работаю антинаучным аферистом...

Ivan8209

Только надо обещать Linux 3.x.
---
...Я работаю антинаучным аферистом...

hoha32

Задача _считывания_ с винта, который может быть under heavy load, намеренно пропущена? Собсно, всё из-за неё.

bastii

в БСД эта проблема решается строкой в ядре HZ = 1000 - частота переключения между процессами
И что это решает проблему. Двадцать потоков будут гарантированно получать по 1% проц мощи каждую секунду, если при этом остальные 80% жрут другие проги. Что-то я в этом сомневаюсь.
Ведь нужно переключать не чаще, а "разумнее". Сегодня шедулер оперирует в терминах приоритетов. А это управление в относительных терминах. А для анимации нужны определенные гарантии без относительно того, какая общая нагрузка на проц в данный момент.
С приоритетами каждый тянет одеяло на себя. Можно конечно сделать реал тайм приоритет, делать что нужно, а потом засыпать до следующего раза. Но эта схема плохо работает, когда тебе нужно 20 таких потоков.

Marinavo_0507

> Собсно, всё из-за неё.
Не только, ещё memory pressure норовит вытеснить страницы памяти, используемые игралкой.

bastii

Задача _считывания_ с винта, который может быть under heavy load, намеренно пропущена? Собсно, всё из-за неё.
С этим собираются поступать аналогично.

sergey_m

А для анимации нужны определенные гарантии без относительно того, какая общая нагрузка на проц в данный момент.
Операционная система, в которой память может быть высвоплена не может давать никаких гарантий.

sergey_m

>> Задача _считывания_ с винта, который может быть under heavy load, намеренно пропущена? Собсно, всё из-за неё.
> С этим собираются поступать аналогично.
И получится хуйня. Во сколько порядков различается время переключения контекста процессора и время перемешения головки винта?

Julie16

Почему же? А если в ней есть механизм для фиксирования страниц в памяти?

bastii

Да, но мало вероятно, что с этим могут быть проблемы у проги, которая регулятно эту память юзает.

Ivan8209

На самом деле, это тоже не вопрос.
Надо забацать что-то наподобие

nice -n read-pri cat /there/this.mp3 | nice -n dec-pri mpg321 -s - | nice -n play-pri mpg321 -

---
...Я работаю антинаучным аферистом...

bastii

И получится хуйня. Во сколько порядков различается время переключения контекста процессора и время перемешения головки винта?
Просто сегодня запросы на io иду в очередь запросов, а потом в каком-то порядке выполняются. Соответственно можно как-то помечать запросы, чтобы согласно определенным квотам отдавать предпочтение сначала помеченным запросам.

sergey_m

> Почему же? А если в ней есть механизм для фиксирования страниц в памяти?
Это конечно лечит. Но вот можно ли сделать mlock не на heap, а на свой собственный text?

sergey_m

> Да, но мало вероятно, что с этим могут быть проблемы у проги, которая регулятно эту память юзает.
Вот и ощути разницу между "мало вероятно", и "гарантировать".

Marinavo_0507

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

Marinavo_0507

А за гарантии, как сказано выше в треде, надо платить.
В данном случае - взять ОСРВ, и соответствующие приложения для неё.

Julie16

А почему? во всяком случае в С++ ты можешь написать свой собственный аллокатор, который берет память из залоченного участка.

Marinavo_0507

> во всяком случае в С++ ты можешь написать свой собственный аллокатор, который берет память из залоченного участка
Как ты узнаешь, сколько памяти надо зарезервировать?

Ivan8209

А в Си не можешь?
---
...Я работаю антинаучным аферистом...

Julie16

Ыыыыыыыыы.... А почему ее надо резервировать? Я видимо чего-то не догоняю.

Ivan8209

Как бы, голова для этого есть.
---
...Я работаю антинаучным аферистом...

sergey_m

Просто сегодня запросы на io иду в очередь запросов, а потом в каком-то порядке выполняются. Соответственно можно как-то помечать запросы, чтобы согласно определенным квотам отдавать предпочтение сначала помеченным запросам.
Назови мне IO систему, которая гарантирует время ответа.

Marinavo_0507

Потому что, если в процессе проигрования фильма потребуется дополнительная память, неизвестно, сколько времени потребуется на её выделение.

Marinavo_0507

> Назови мне IO систему, которая гарантирует время ответа.
Сначала надо назвать, какая модель жёсткого диска гарантирует время ответа (при своей исправности
потом, какой контроллер и шина ввода/вывода гарантируют время доставки данных в память.
У диска может быть куча запросов в очереди, шину могут надолго занять другие приложения.
Но домохозяйкам гарантия не нужна, иначе они не использовали бы систему,
в EULA к которой содержится полный WARRANTY DISCLAIMER.

bastii

Если память, к которой обрашается прога по несколько раз в сек, вытесняется в своп, то значит в системе большие траблы в наличием достаточного кол-ва оперативки. Какая тут плавная анимация.
Хотя тоже можно ввести понятие гарантированной памяти. Т.е. локать, но не давать залокать больше 80% оперативки.

sergey_m

Если память, к которой обрашается прога по несколько раз в сек, вытесняется в своп, то значит в системе большие траблы в наличием достаточного кол-ва оперативки. Какая тут плавная анимация.
Вот видишь, не каких гарантий.
Хотя тоже можно ввести понятие гарантированной памяти. Т.е. локать, но не давать залокать больше 80% оперативки.
И так разрешить каждому процессу?

Marinavo_0507

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

Julie16

Real-time operating systems, on the other hand, solve this quandry by altogether avoiding both memory fragmentation and "garbage collection", and their consequences. RTOSs offer non-fragmenting memory allocation techniques instead of heaps. They do this by limiting the variety of memory chunk sizes they make available to application software. While this approach is less flexible than the approach taken by memory heaps, they do avoid external memory fragmentation and avoid the need for defragmentation. For example, the "Pools" memory allocation mechanism allows application software to allocate chunks of memory of perhaps 4 or 8 different buffer sizes per pool. Pools totally avoid external memory fragmentation, by not permitting a buffer that is returned to the pool to be broken into smaller buffers in the future. Instead, when a buffer is returned the pool, it is put onto a "free buffer list" of buffers of its own size that are available for future re-use at their original buffer size. This is shown in Figure 7.

Figure 7: A Memory Pool's Free Buffer Lists
Memory is allocated and de-allocated from a pool with deterministic, often constant, timing.

Ivan8209

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

Marinavo_0507

Угу.
RTOS, а не Windows.
С приложениями, которые довольствуются memory chunks of limited variety вместо обычной кучи.

Marinavo_0507

> Вот видишь, не каких гарантий.
> И так разрешить каждому процессу?
Вот ты смеёшься, а примерно так и сделают.
И что характерно, у домохозяек фильмы будут играться без пауз.
А у тебя - нет, потому что ты захочешь, чтоб в фоне скажем cvsup работал,
и раздавались другие фильмы по домашней локалке со скоростью 1Гбит/c,
да ещё и компилировалось что-нибудь.

Marinavo_0507

> Для того, чтобы определить объём памяти для проигрывания одной
> песни, совершенно не надо заниматься низкоуровневым
> программированием.
И сколько памяти нужно для Windows Media Player?

Ivan8209

1. Откуда я знаю?
2. Меня это волнует?
---
...Я работаю антинаучным аферистом...

bastii

Назови мне IO систему, которая гарантирует время ответа.
Тут имеется в виду, что тебе будет гарантировано, что предпочтение в доступе к винту получат проги, которым важно получать регулярно данные, а не те, которым все равно на пол секунды раньше или позже.
Как мне кажется, что с такими механизмами (какой-то гарантированный доступ к процу и диску плеер сможет, используя кэши определенного размера, выдавать плавную анимацию при довольно больших нагрузках на систему. Этого сегодня нет. Никто не собирается делать эти механизми идеальными. Ничего страшного, если при запуске какой-нибудь проги плеер пропустит пару кадров.

Marinavo_0507

> 1. Откуда я знаю?
Вот и никто не знает.
> 2. Меня это волнует?
Никого не волнует. Поэтому проигрывание иногда затыкается.

bastii

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

Julie16

Блин. Тут говорят о гарантированности. Это решение не обеспечивает никаких гарантий.

bastii

При определенных условиях обеспечит. А кто сказал, что целесообразно обеспечивать более сильные гарантии. Сегодня вообще никто ничего не обеспечивает. Что-то можно сделать сегодня, но с очень большими усилиями. А так хоть появится api и поддержка со стороне кернеля. Собственно я только про этом и хотел сказать, когда упомянул новые фичи Longhorna.

Ivan8209

Тебе уже указали: про новые фичи Longhorna не надо.
---
...Я работаю антинаучным аферистом...

bastii

я не заметил

sergey_m

> я не заметил
FreeBSD 8.0 и Linux 2.10.0 были шуткой

Marinavo_0507

> Тут говорят о гарантированности. Это решение не обеспечивает никаких гарантий.
"Гарантии" тут понимаются общепринятым в IT-индустрии образом: никаких гарантий.
Except for the Limited Warranty and to the maximum extent permitted by applicable law, Microsoft and its suppliers provide the Productand support services (if any) AS IS AND WITH ALL FAULTS, and hereby disclaim all other warranties and conditions, either express, implied or statutory, including, but not limited to, any (if any) implied warranties, duties or conditions of merchantability, of fitness for a particular purpose, of reliability or availability, of accuracy or completeness of responses, of results, of workmanlike effort, of lack of viruses, and of lack of negligence, all with regard to the Product, and the provision of or failure to provide support or other services, information, software, and related content through the Product or otherwise arising out of the use of the Product.

Ivan8209

Тем не менее, Longhorn-а нет точно так же, как и FreeLSD 8.0.
---
...Я работаю антинаучным аферистом...

bastii

летом должна быть бета 1

Ivan8209

1. До лета ещё далеко.
2. К лету навыходит столько разных альф и бет.
---
...Я работаю антинаучным аферистом...

hoha32

Млин, под 800 мегов оперативы, а винда всё равно свопится

hoha32

Поясню ещё раз: в БСД послушать музыку без перебоев почему-то гораздо проще, нежели в винде - уже сейчас. Да вот вопрос: что можно делать на компе под виндой, если с компа скачивают фильмы в 40 потоков? При условии, что винт в системе единственный и ему уже три года, то есть особой скоростью работы он не отличается (5400 оборотов).

bastii

Я вот своп отключаю, тогда винда гораздо лучше себя ведет. У нее какая-то болезь свопится постоянно, причем в самые неподходящие моменты.
Про шары - это да, проблема. Нет вообще почти никаких настроек. И bandwidthcontroller не во всем помогает. Отойдешь от компа на пару минут, так даже при bandwidthcontroler все твои проги вытеснены в своп.
Короче маза одна: купить гиг оперативки и отключить своп.

sergey_m

> Короче маза одна: купить гиг оперативки и отключить своп.
И ждать Longhorn.

bastii

тогда лучше еще гиг прикупить

garikus

Поясню ещё раз: в БСД послушать музыку без перебоев почему-то гораздо проще, нежели в винде - уже сейчас.
Как ? HZ = 1000 ?

sergey_m

> Как ? HZ = 1000 ?
Через rtprio.

durka82

А мб мелкомягкие решат проблему аппаратно?
Например, мамки, рекомендуемые под лонгхорн, будут нести в своем конструктиве аппаратный mp3-плеер

sergey_m

> Например, мамки, рекомендуемые под лонгхорн, будут нести в своем конструктиве аппаратный mp3-плеер
И отдельный винчестер, на котором будут храниться только mp3.

durka82

И отдельный винчестер, на котором будут храниться только mp3.
Не обязательно.
Достаточно иметь свою память (можно даже не флаш)
128-256 Мб вполне достаточно.

Julie16

Всем: может быть это будет вам интересно. В Линукс недавно появились несколько патчей, динамически меняющих некоторые системные параметры по генетическому алгоритму. Утверждается, что скоросто прогона тестов возрасла примерно на 2%, и значительно повысилась интерактивность(т.е. уменьшилась латентность, что является немаловажным фактором для мультимедиа приложений). http://kerneltrap.org/node/4751#comment

hoha32

HZ = 100
Я не знаю, почему так, но когда с меня качают в 40 потоков под БСД, у меня не возникает желания отойти от компьютера. Всё просто работает, хоть реакция GUI и помедленней.

sergey_m

Кстати дефолт уже 1000.

hoha32

Да, мне mplayer об этом постоянно напоминает, только руки как-то не доходят

Ivan8209

Я вот подумал, тонкостей не знаю, но такое возможно в напалме.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: