<div dir="ltr"><span id="gmail-m_-5762457673747631971gmail-result_box" class="gmail-m_-5762457673747631971gmail-" lang="en"><span title="Здравствуйте,">Hello,<br></span><span title="прошу прощения за мой ужасный английский,">I apologize for my terrible English,<br></span><span title="у меня проблема с переполнением буфера.">I have a problem with buffer overflow.<br></span><span title="Подскажите, пожалуйста, какие меры оптимизации вы применяете при работе?">Tell me, please, what optimization measures do you use when working?<br><br></span><span title="Как наблюдается проблема:">How the problem is observed:<br></span><span title="Имею 6 девайсов b205mini , и я заметил что уперся в суммарно максимум 205МГц  в секунду.">I have 6 b205mini devices, and I noticed that I was up to a maximum of 205MHz per second. </span><span title="т. е., либо 5 девайсов по 41МГц, либо 6 девайсов по 34МГц.">ie, either 5 devices on 41 MHz, or 6 devices on 34 MHz. </span><span title="Если больше - оверфлов.">If more - overflow.<br><br></span><span title="Что я предпринял:">What I undertook:<br></span><span title="Сначала я использовал гнурадио, потом попробовал написать свое решение на С++, что позволило мне операции чтения и записи выбросить на отдельные потоки.">First I used the foul language, then I tried to write my solution in C
 ++, which allowed me to throw read and write operations into separate 
streams.<br></span><span title="Поток занимающийся чтением в основном только и делает что ожидает на завершение блокирующей функции rx_stream->recv , после чего быстренько выбрасывает полученный буфер в очередьт на запись.">The thread doing the reading basically only does what it expects at 
the end of the blocking function rx_stream-> recv, and then quickly 
throws the resulting buffer into the write queue.<br></span><span title="Поток занимающийся записью ожидает пока в очереди на запись появится новый буфер, в ином случае спит на несколькол миллисекунд.">The write stream waits until a new buffer appears in the write queue, otherwise it sleeps for several milliseconds. </span><span title="Если буфер находится, то сразу записывает его в named FIFO file .">If the buffer is located, it immediately writes it to the named FIFO file.<br></span><span title="Получается, эти два потока не могут друг-другу мешать.">It turns out that these two streams can not interfere with each other. </span><span title="Заодно, в качестве бонуса, получается дополнительная подстраховка в виде очереди буферов если принимающая сторона (которая читает named FIFO files и ничего не делает) не будет успевать.">At the same time, as a bonus, additional insurance is obtained in the 
form of a queue of buffers if the receiving party (which reads named 
FIFO files and does nothing) will not succeed.<br></span><span title="Беферы, которые крутяться в очереди, переиспользуются, а значит не тратится дополнительное время на их создание.">Beefers who spin in the queue are re-used, which means that no extra time is spent to create them.<br><br></span><span title="Далее, я установил приоритет">Next, I set the priority<br></span><span title="uhd::set_thread_priority_safe(1.0, true);">uhd :: set_thread_priority_safe (1.0, true);<br></span><span title="Все эьт манипуляции позволили мне, в некотором роде, "отодвтинуть" время наступления переполнения.">All this manipulation allowed me, in some way, to "undo" the time of the onset of overflow. </span><span title="Но не за счет очереди буферов: когда настает переполнение видно что очередь не переполнилась, принимающая сторона успевает обрабатывать приходящией ей данные.">But not at the expense of the queue of buffers: when the overflow 
comes it is clear that the queue has not overflowed, the receiving party
 manages to process incoming data to it.<br><br></span><span title="И в реализации на гнурадио, и в реализации на С++, я не наблюдаю какого-то сильного потребления ЦПУ-ресурсов.">And
 in the implementation of the foul language, and in the implementation 
of C ++, I do not observe any strong consumption of CPU resources. </span><span title="Получается, процессор справляется.">It turns out, the processor manages.<br><br></span><span title="Далее, если я в С++ раелизации НЕ буду записывать результат (поток записывающий данные в файлы - не будет их записывать =) ) - то получаю новое значение лимита - теперь лимит уже составляет ~270МГц.">Further, if I in C ++ do not write the result (the stream writing data
 to files - will not write them =)) - then I get a new limit value - now
 the limit is already ~ 270MHz.<br></span><span title="Как так?">How so?<br><br></span><span title="Поэтому вопрос можно сформулировать так:">Therefore, the question can be formulated as follows:<br></span><span title="1 Из за чего возникает лимит в 205МГц?">1 Why does the limit in 205 MHz arise? </span><span title="Неужто из-за названия модели?))">Really because of the name of the model?))<br></span><span title="2 Если лимит существует, то почему С++ реализация все-таки дает некоторый "бонус" в виде более позднего возникновения переполнения?">2
 If the limit exists, then why does C ++ implementation still give some 
"bonus" in the form of a more recent overflow occurrence? </span><span title="Чем может быть обусловлен этот лимит и как понять его природу?">What can be the reason for this limit and how to understand its nature? </span><span title="Как пояснить слабое потребление ЦПУ?">How to explain the weak CPU consumption?<br><br></span><span title="И еще, как я говорил в начале: интересны все возможные хорошие практики при работе с USRP">And yet, as I said at the beginning: all possible good practices are interesting when working with USRP<br><br></span><span title="В качестве дополнительной информации:">For additional information:<br></span><span title="Материнская плата Z10PE-D16 WS (может дело в чипсете?)">The motherboard Z10PE-D16 WS (can it matter in the chipset?)<br></span><span title="Процессор intel xeon e5-2430v4">Intel xeon e5-2430v4 processor<br></span><span title="Оперативная память DDR4 1866">Memory DDR4 1866<br><br></span><span title="Спасибо за затраченное время,">Thanks for taking the time,<br></span><span title="буду рад получить отклик,">I will be glad to receive a response,<br></span><span title="с уважением, Андрей.">With all respect, Andrew.</span></span></div>