DPDK rte_eth_tx_burst reliability Subscribe to RSS

Использование параметра PsDscRunAsCredential с составными ресурсами DSCUsing PsDscRunAsCredential with DSC composite resources

Добавлена поддержка использования параметра PsDscRunAsCredential с составными ресурсами DSC.We have added support for using PsDscRunAsCredential with DSC Composite resources.

Теперь можно указать значение параметра PsDscRunAsCredential при использовании составных ресурсов в конфигурации.You can now specify a value for PsDscRunAsCredential when using composite resources inside configurations. Если значение задано, все ресурсы, включенные в составной ресурс, будут запущены от имени этого пользователя.When specified, all resources run inside a composite resource as a RunAs user. Если составной ресурс вызывает другой составной ресурс, то все такие ресурсы также будут запущены от имени этого пользователя.If a composite resource calls another composite resource, all those resources are also executed as RunAs user. Учетные данные запуска от имени распространяются на любой уровень иерархии составных ресурсов.RunAs credentials are propagated to any level of the composite resource hierarchy. Если для одного из ресурсов, входящих в составной ресурс, указано собственное значение параметра PsDscRunAsCredential, при компиляции конфигурации возникает ошибка слияния.If any resource inside a composite resource specifies its own value for PsDscRunAsCredential, a merge error results during configuration compilation.

В этом примере показано, как использовать этот параметр с составным ресурсом WindowsFeatureSet, включенным в модуль PSDesiredStateConfiguration.This example shows usage with the WindowsFeatureSet composite resource included in PSDesiredStateConfiguration module.

Using the UPDATE_TIMESTAMP flag

In some applications, flushing an entire buffer may result in too long of a delay between bursts. As suggested earlier in this page, a user may instead manually zero pad their samples to achieve short discontinuities, or have libbladeRF do this for them using the flag.

The general usage of this is:

  • Set to the desired start of transmission, and to . Call with the initial samples in the burst.

  • Optional: Call with as needed to transmit samples that are contiguous with the previous samples. is not used in this state.

  • Call with set to and set to the desired timestamp. libbladeRF will schedule the provided samples for the specified timestamp, manually zero-padding a buffer if needed.

  • Optional: Call with as needed to transmit samples that are contiguous with the newly scheduled samples. is not used in this state.

  • When done transmitting, call with set to and two or more zero samples. This will ensure the analog front end DACs are held at a zero value.

The above procedure is shown in the below example:

int sync_tx_meta_update_example(struct bladerf *dev,
int16_t *samples,
unsigned int num_samples,
unsigned int tx_count,
unsigned int samplerate,
unsigned int timeout_ms)
{
int status = 0;
unsigned int i;
struct bladerf_metadata meta;
int16_t zero_sample[] = { 0, 0 };

const uint64_t ts_inc_5ms = ((uint64_t)samplerate) * 5 / 1000;

const uint64_t ts_inc_1_25ms = ((uint64_t)samplerate) * 125 / 100000;

memset(&meta, 0, sizeof(meta));

meta.flags = ;

status = (dev, , &meta.timestamp);
if (status != 0) {
fprintf(stderr, «Failed to get current TX timestamp: %s\n»,
(status));
return ;
} else {
printf(«Current TX timestamp: %016» PRIu64 «\n», meta.timestamp);
}

meta.timestamp += ts_inc_5ms;

for (i = 0; i

produce_samples(samples, num_samples);

status = (dev, samples, num_samples, &meta, timeout_ms);
if (status != 0) {
fprintf(stderr, «TX failed: %s\n», (status));
return ;
} else {
printf(«TX’d @ t=%016» PRIu64 «\n», meta.timestamp);
}

meta.flags = ;

meta.timestamp += num_samples + ts_inc_1_25ms;
}

meta.flags = ;
status = (dev, zero_sample, 1, &meta, timeout_ms);
meta.timestamp++;

if (status == 0) {
meta.timestamp += 2 * num_samples;

status =
wait_for_timestamp(dev, , meta.timestamp, timeout_ms);

if (status != 0) {
fprintf(stderr, «Failed to wait for timestamp.\n»);
}
} else {
fprintf(stderr, «Failed to complete burst: %s\n»,
(status));
}

return ;
}

Установка WMF 5.1 для Windows Server 2012 R2, Windows Server 2012 и Windows 8.1Install WMF 5.1 for Windows Server 2012 R2, Windows Server 2012, and Windows 8.1

Установка из проводника WindowsInstall from Windows File Explorer

  1. Перейдите в папку, куда был скачан MSU-файл.Navigate to the folder into which you downloaded the MSU file.
  2. Дважды щелкните этот файл для его запуска.Double-click the MSU to run it.

Установка из командной строкиInstalling from the Command Prompt

  1. После скачивания подходящего пакета для архитектуры вашего компьютера откройте окно командной строки с повышенными правами (используйте «Запуск от имени администратора»).After downloading the correct package for your computer’s architecture, open a Command Prompt window with elevated user rights (Run as Administrator). При выборе варианта «Установка основных серверных компонентов» для Windows Server 2012 R2, Windows Server 2012 или Windows Server 2008 R2 с пакетом обновления 1 (SP1) командная строка по умолчанию открывается с повышенными правами.On the Server Core installation options of Windows Server 2012 R2, Windows Server 2012, or Windows Server 2008 R2 SP1, Command Prompt opens with elevated user rights by default.
  2. Перейдите в папку, куда был скачан или скопирован пакет установки WMF 5.1.Change directories to the folder into which you have downloaded or copied the WMF 5.1 installation package.
  3. Выполните одну из следующих команд:Run one of the following commands:

    • На компьютерах с ОС Windows Server 2012 R2 или Windows 8.1 (64-разрядная версия) выполните команду .On computers that are running Windows Server 2012 R2 or Windows 8.1 x64, run .
    • На компьютерах с ОС Windows Server 2012 выполните команду .On computers that are running Windows Server 2012, run .
    • На компьютерах с ОС Windows 8.1 (32-разрядная версия) выполните команду .On computers that are running Windows 8.1 x86, run .

Примечание

При установке WMF 5.1 требуется перезагрузка.Installing WMF 5.1 requires a reboot. Параметр инициирует перезагрузку системы без предупреждения.Using the option will reboot the system without warning. Чтобы избежать перезагрузки, используйте параметр .Use the option to avoid rebooting. Однако установка WMF 5.1 не будет выполнена, пока вы не перезагрузите систему.However, WMF 5.1 will not be installed until you have rebooted.

Using the TX_NOW flag

In some cases, one may wish to transmit a burst immediately while using the format. As shown in the below example, this is possible by setting the flag. When using this flag the field is not used.

int sync_tx_meta_now_example(struct bladerf *dev,
int16_t *samples,
unsigned int num_samples,
unsigned int tx_count,
unsigned int timeout_ms)
{
int status = 0;
struct bladerf_metadata meta;
unsigned int i;

memset(&meta, 0, sizeof(meta));

meta.flags = | |
;

for (i = 0; i

produce_samples(samples, num_samples);

status = (dev, samples, num_samples, &meta, timeout_ms);
if (status != 0) {
fprintf(stderr, «TX failed: %s\n», (status));
} else {
uint64_t curr_ts;

status = (dev, , &curr_ts);
if (status != 0) {
fprintf(stderr, «Failed to get current TX timestamp: %s\n»,
(status));
} else {
printf(«TX’d at approximately t=%016» PRIu64 «\n», curr_ts);
}

usleep(5000);
}
}

if (status == 0) {
status = (dev, , &meta.timestamp);
if (status != 0) {
fprintf(stderr, «Failed to get current TX timestamp: %s\n»,
(status));
return ;
} else {
status = wait_for_timestamp(
dev, , meta.timestamp + 2 * num_samples, timeout_ms);
if (status != 0) {
fprintf(stderr, «Failed to wait for timestamp.\n»);
}
}
}

return ;
}

Using the UPDATE_TIMESTAMP flag

In some applications, flushing an entire buffer may result in too long of a delay between bursts. As suggested earlier in this page, a user may instead manually zero pad their samples to achieve short discontinuities, or have libbladeRF do this for them using the flag.

The general usage of this is:

  • Set to the desired start of transmission, and to . Call with the initial samples in the burst.

  • Optional: Call with as needed to transmit samples that are contiguous with the previous samples. is not used in this state.

  • Call with set to and set to the desired timestamp. libbladeRF will schedule the provided samples for the specified timestamp, manually zero-padding a buffer if needed.

  • Optional: Call with as needed to transmit samples that are contiguous with the newly scheduled samples. is not used in this state.

  • When done transmitting, call with set to and two or more zero samples. This will ensure the analog front end DACs are held at a zero value.

The above procedure is shown in the below example:

int sync_tx_meta_update_example(struct bladerf *dev,
int16_t *samples,
unsigned int num_samples,
unsigned int tx_count,
unsigned int samplerate,
unsigned int timeout_ms)
{
int status = 0;
unsigned int i;
struct bladerf_metadata meta;
int16_t zero_sample[] = { 0, 0 };

const uint64_t ts_inc_5ms = ((uint64_t)samplerate) * 5 / 1000;

const uint64_t ts_inc_1_25ms = ((uint64_t)samplerate) * 125 / 100000;

memset(&meta, 0, sizeof(meta));

meta.flags = ;

status = (dev, , &meta.timestamp);
if (status != 0) {
fprintf(stderr, «Failed to get current TX timestamp: %s\n»,
(status));
return ;
} else {
printf(«Current TX timestamp: %016» PRIu64 «\n», meta.timestamp);
}

meta.timestamp += ts_inc_5ms;

for (i = 0; i

produce_samples(samples, num_samples);

status = (dev, samples, num_samples, &meta, timeout_ms);
if (status != 0) {
fprintf(stderr, «TX failed: %s\n», (status));
return ;
} else {
printf(«TX’d @ t=%016» PRIu64 «\n», meta.timestamp);
}

meta.flags = ;

meta.timestamp += num_samples + ts_inc_1_25ms;
}

meta.flags = ;
status = (dev, zero_sample, 1, &meta, timeout_ms);
meta.timestamp++;

if (status == 0) {
meta.timestamp += 2 * num_samples;

status =
wait_for_timestamp(dev, , meta.timestamp, timeout_ms);

if (status != 0) {
fprintf(stderr, «Failed to wait for timestamp.\n»);
}
} else {
fprintf(stderr, «Failed to complete burst: %s\n»,
(status));
}

return ;
}

Burst Transmissions

The synchronous interface allows a burst of samples to be transmitted at a specified timestamp value. The hardware will output zeros after the burst.

The general procedure for transmitting a burst is as follows

  • Call with set to and set to the timestamp at which samples should be transmitted.

  • Make successive calls with set to 0. These samples will be contiguously appended to the previous samples. The field is not used at this point; the caller does not need to worry about advancing it.

  • Call with the final samples in the burst and the set to . This will complete the burst, flush any remaining samples in the synchronous interface’s current internal buffer, and write the buffer to the device. Similar to the previous step, any samples provided at this points will be contiguously appended to prior samples, and the field will not be used.

The above procedure is useful when the samples for the burst are actively being produced.

If all the samples for the burst are available ahead of time, all of the above steps can be performed with a single function call, with:

  • set to:

  • set to the timestamp at which the samples should be transmitted.

Note that when completing a burst with , up to one of the synchronous interface’s buffers may be flushed. This is important to consider, since this defines the minimum value of the next timestamp can be provided.

If small bursts need to be scheduled back to back, consider either manually zero-padding between them, or using the flag, as described in one of the following sections.

Соглашение об именовании для частичной опрашивающей конфигурацииPull partial configuration naming convention

В предыдущем выпуске соглашение об именовании для частичной конфигурации было таким, что имя MOF-файла в опрашивающем сервере или службе должно было соответствовать имени частичной конфигурации, указанному в параметрах локального диспетчера конфигурации, которое, в свою очередь, должно соответствовать имени конфигурации, включенному в MOF-файл.In the previous release, the naming convention for a partial configuration was that the MOF file name in the pull server/service should match the partial configuration name specified in the local configuration manager settings that in turn must match the configuration name embedded in the MOF file.

См. моментальные снимки ниже.See the snapshots below:

  • Параметры локальной конфигурации, определяющие частичную конфигурацию, которую разрешено получать узлу.Local configuration settings which defines a partial configuration that a node is allowed to receive.

  • Пример определения частичной конфигурации.Sample partial configuration definition

  • Имя конфигурации (ConfigurationName), включенное в созданный MOF-файл.’ConfigurationName’ embedded in the generated MOF file.

  • Имя файла в репозитории конфигураций извлечения.FileName in the pull configuration repository

    Служба автоматизации Azure создавала MOF-файлы с именами .Azure Automation service name generated MOF files as . Поэтому следующая конфигурация компилируется в файл PartialOne.Localhost.mof.So the configuration below compiles to PartialOne.localhost.mof.

    Это делало невозможным запрос к одной из частичных конфигураций из службы автоматизации Azure.This made it impossible to pull one of your partial configuration from Azure Automation service.

    В WMF 5.1 частичная конфигурация на опрашивающем сервере или в службе может иметь имя .In WMF 5.1, a partial configuration in the pull server/service can be named as . Кроме того, если компьютер запрашивает одну конфигурацию с опрашивающего сервера или службы, то файл конфигурации в репозитории конфигураций опрашивающего сервера может иметь любое имя.Moreover, if a machine is pulling a single configuration from a pull server/service then the configuration file on the pull server configuration repository can have any file name. Эта гибкость в именовании позволяет управлять узлами, которые находятся под частичным управлением службы автоматизации Azure. В этом случае часть конфигурации узла поступает из DSC службы автоматизации Azure, а другой частью конфигурации вы управляете локально.This naming flexibility allows you to manage your nodes partially by Azure Automation service, where some configuration for your node is coming from Azure Automation DSC and with a partial configuration that you manage locally.

    В следующей метаконфигурации узел находится как под локальным управлением, так и под управлением службы автоматизации Azure.The metaconfiguration below sets up a node to be managed both locally as well as by Azure Automation service.

Избыточные коды

Такая дополнительная обработка
заключается в логическом блочном
кодировании, когда одна группа бит по
определенному алгоритму заменяется другой
группой. Наиболее распространенными типами
подобного кодирования являются избыточные
коды 4B/5B, 8B/6T и 8B/10T.

В этих кодах исходные группы бит заменяются на новые, но более длинные группы.
В коде 4B/5B группе из четырех бит ставится в соответствие группа из пяти бит.
Возникает вопрос — для чего нужны все эти усложнения? Дело в том, что такое
кодирование является избыточным. К примеру, в коде 4B/5B в исходной последовательности
из четырех бит существует 16 различных битовых комбинаций нулей и единиц, а
в группе из пяти бит таких комбинаций уже 32. Поэтому в результирующем коде
можно выбрать 16 таких комбинаций, которые не содержат большого количества нулей
(напомним, что в исходных кодах NRZI и MLT-3 длинные последовательности нулей
приводят к потере синхронизации). При этом остальные не используемые комбинации
можно считать запрещенными последовательностями. Таким образом, кроме улучшения
самосинхронизирующих свойств исходного кода избыточное кодирование позволяет
приемнику распознавать ошибки, так как появление запрещенной последовательности
бит свидетельствует о возникновении ошибки. Соответствие исходных и результирующих
кодов приведено в табл. 1.

Из таблицы видно, что после
использования избыточного кода 4B/5B в
результирующих последовательностях не
встречается более двух нулей подряд, что
гарантирует самосинхронизацию битовой
последовательности.

В коде 8B/6T последовательность восьми бит исходной информации заменяется последовательностью
из шести сигналов, каждый из которых может принимать три состояния. В восьмибитной
последовательности имеется 256 различных состояний, а в последовательности шести
трехуровневых сигналов таких состояний уже 729 (36=729), поэтому
473 состояния считаются запрещенными.

В коде 8B/10T каждая
восьмибитная последовательность
заменяется на десятибитную. При этом в
исходной последовательности содержится 256
различных комбинаций нулей и единиц, а в
результирующей 1024. Таким образом, 768
комбинаций являются запрещенными.

Все рассмотренные
избыточные коды находят применение в сетях Ethernet.
Так, код 4B/5B используется в стандарте 100Base-TX,
а код 8B/6T — в стандарте 100Base-4T,
который в настоящее время практически уже
не используется. Код 8B/10T используется в
стандарте 1000Base-Х (когда в качестве среды
передачи данных используется оптоволокно).

Кроме использования
избыточного кодирования широкое
применение находит и другой способ
улучшения исходных свойств кодов — это так
называемое скрэмблирование.

Резюме файла WMF

Расширение файла WMF имеет два тип (-ов) файла (-ов) и связано с семь различными программными обеспечениями, но главным образом с Adobe Illustrator CC, разработанным Adobe Systems Incorporated. Часто они представлены в формате Windows Metafile.

Большинство файлов WMF относятся к Vector Image Files, однако они также могут относится к Game Files.

Просматривать файлы WMF можно с помощью операционных систем Windows, Mac и Linux. Они обычно находятся на настольных компьютерах (и ряде мобильных устройств) и позволяют просматривать и иногда редактировать эти файлы.

Рейтинг популярности данных файлов составляет «Низкий» и они обычно не используются.

Улучшенная регистрация опрашивающего сервераImproved pull server registration

В более ранних версиях WMF одновременные запросы регистрации или отчетов к опрашивающему серверу DSC при использовании базы данных ESENT привели бы к ошибке в LCM при регистрации или получении отчета.In the earlier versions of WMF, simultaneous registrations/reporting requests to a DSC pull server while using the ESENT database would lead to LCM failing to register and/or report. В журналах событий на опрашивающем сервере в таких случаях появляется ошибка «Имя экземпляра уже используется».In such cases, the event logs on the pull server has the error «Instance Name already in use.» Эта ошибка вызывалась тем, что для доступа к базе данных ESENT в сценарии с несколькими потоками использовался неправильный шаблон.This was caused by an incorrect pattern being used to access the ESENT database in a multi-threaded scenario. В WMF 5.1 эта проблема устранена.In WMF 5.1, this issue has been fixed. Одновременные запросы регистрации или отчетов (с использованием базы данных ESENT) выполняются корректно в WMF 5.1.Concurrent registrations or reporting (involving ESENT database) works fine in WMF 5.1. Эта проблема относится только к базе данных ESENT и не касается базы данных OLEDB.This issue is applicable only to the ESENT database and does not apply to the OLEDB database.

Треллис-кодирование

Рассмотрим принципы треллис-кодирования на основе простейшего кодера, состоящего
из двух запоминающих ячеек и элементов XOR (рис. 15). Пусть
на вход такого кодера поступает со скоростью k бит/с последовательность бит
0101110010. Если на выходе кодера установить считывающую ячейку, работающую
с вдвое большей частотой, чем скорость поступления бит на вход кодера, то скорость
выходного потока будет в два раза выше скорости входного потока. При этом считывающая
ячейка за первую половину такта работы кодера считывает данные сначала с логического
элемента XOR 2, а вторую половину такта — с логического элемента XOR 3. В результате
каждому входному биту ставится в соответствие два выходных бита, то есть дибит,
первый бит которого формируется элементом XOR 2, а второй — элементом XOR 3.
По временной диаграмме состояния кодера нетрудно проследить, что при входной
последовательности бит 0101110010 выходная последовательность будет 00 11 10
00 01 10 01 11 11 10.

Отметим одну важную особенность принципа формирования дибитов. Значение каждого
формируемого дибита зависит не только от входящего информационного бита, но
и от двух предыдущих бит, значения которых хранятся в двух запоминающих ячейках.
Действительно, если принято, что Ai — входящий бит, то значение элемента
XOR 2 определится выражением , а значение
элемента XOR 3 — выражением . Таким образом,
дибит формируется из пары битов, значение первого из которых равно ,
а второго — . Следовательно, значение дибита
зависит от трех состояний: значения входного бита, значения первой запоминающей
ячейки и значения второй запоминающей ячейки. Такие кодеры получили название
сверточных кодеров на три состояния (K = 3) с выходной скоростью ½.

Работу кодера удобно
рассматривать на основе не временных
диаграмм, а так называемой диаграммы
состояния. Состояние кодера будем
указывать с помощью двух значений —
значения первой и второй запоминающих
ячеек. К примеру, если первая ячейка хранит
значение 1 (Q1=1),
а вторая — 0 (Q2=0),
то состояние кодера описывается значением
10. Всего возможно четыре различных
состояния кодера: 00, 01, 10 и 11.

Пусть в некоторый момент времени состояние кодера равно 00. Нас интересует,
каким станет состояние кодера в следующий момент времени и какой дибит будет
при этом сформирован. Возможны два исхода в зависимости от того, какой бит поступит
на вход кодера. Если на вход кодера поступит 0, то следующее состояние кодера
также будет 00, если же поступит 1, то следующее состояние (то есть после сдвига)
будет 10. Значение формируемых при этом дибитов рассчитывается по формулам
и . Если на вход кодера поступает 0, то
будет сформирован дибит 00 (), если же
на вход поступает 1, то формируется дибит 11 ().
Приведенные рассуждения удобно представить наглядно с помощью диаграммы состояний
(рис. 16), где в кружках обозначаются состояния кодера,
а входящий бит и формируемый дибит пишутся через косую черту. Например, если
входящий бит 1, а формируемый дибит 11, то записываем: 1/11.

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

Используя диаграмму состояний кодера, несложно построить временную диаграмму
переходов для уже рассмотренной нами входной последовательности бит 0101110010.
Для этого строится таблица, в столбцах которой отмечаются возможные состояния
кодера, а в строках — моменты времени. Возможные переходы между различными состояниями
кодера отображаются стрелками (на основе полной диаграммы состояний кодера —
рис. 17), над которыми обозначаются входной бит, соответствующий
данному переходу, и соответствующий дибит. Например, для двух первых моментов
времени диаграмма состояния кодера выглядит так, как показано на рис.
18. Красной стрелкой отображен переход, соответствующий рассматриваемой
последовательности бит.

Продолжая отображать возможные и реальные переходы между различными состояниями
кодера, соответствующие различным моментам времени (рис. 19,
, ), получим полную временную
диаграмму состояний кодера (рис. 22).

Основным достоинством изложенного выше
метода треллис-кодирования является его
помехоустойчивость. Как будет показано в
дальнейшем, благодаря избыточности
кодирования (вспомним, что каждому
информационному биту ставится в
соответствие дибит, то есть избыточность
кода равна 2) даже в случае возникновения
ошибок приема (к примеру, вместо дибита 11
ошибочно принят дибит 10) исходная
последовательность бит может быть
безошибочно восстановлена.

Для восстановления исходной
последовательности бит на стороне
приемника используется декодер Витерби.

Поддержка идентичных повторяющихся ресурсов в конфигурацииAllowing for Identical Duplicate Resources in a Configuration

DSC не допускает и не обрабатывает конфликтующие определения ресурсов в конфигурации.DSC does not allow or handle conflicting resource definitions within a configuration. Вместо того чтобы попытаться разрешить конфликт, он просто завершается со сбоем.Instead of trying to resolve the conflict, it simply fails. По мере того, как конфигурации все больше используются повторно с помощью составных ресурсов и т. п., конфликты будут возникать все чаще.As configuration reuse becomes more utilized through composite resources, etc. conflicts will occur more often. Если конфликтующие определения ресурсов идентичны, DSC необходимо разрешить такую работу.When conflicting resource definitions are identical, DSC should be smart and allow this. В этом выпуске мы включаем поддержку нескольких экземпляров ресурсов с одинаковыми определениями:With this release, we support having multiple resource instances that have identical definitions:

Если бы в предыдущих выпусках имелся конфликт между экземплярами WindowsFeature FE_IIS и WindowsFeature Worker_IIS, пытающимися проверить установку роли «Веб-сервер», компиляция завершилась бы сбоем.In previous releases, the result would be a failed compilation due to a conflict between the WindowsFeature FE_IIS and WindowsFeature Worker_IIS instances trying to ensure the ‘Web-Server’ role is installed

Обратите внимание, что в этих двух конфигурациях все настраиваемые свойства идентичны.Notice that all of the properties that are being configured are identical in these two configurations. И именно благодаря идентичности всех свойств в этих двух ресурсах компиляция теперь выполняется успешно.Since all of the properties in these two resources are identical, this will result in a successful compilation now

Если же какие-либо свойства между двумя ресурсами не совпадают, они не считаются идентичными, и компиляция завершается ошибкой.If any of the properties are different between the two resources, they will not be considered identical and compilation will fail.

Ссылка на основную публикацию