gpt4 book ai didi

quic - HTTP/3 QPACK 中重复编码器指令的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 09:11:59 30 4
gpt4 key购买 nike

在 HTTP/3 QPACK 中,存在复制动态表中现有条目的指令;据说它用于避免添加对可能阻止插入新条目的旧条目的引用。
但是,我看不出这有什么帮助。

If the dynamic table does not contain enough room for a new entry without evicting other entries, and the entries that would be evicted are not evictable, the encoder MUST NOT insert that entry into the dynamic table (including duplicates of existing entries).


To ensure that the encoder is not prevented from adding new entries, the encoder can avoid referencing entries that are close to eviction. Rather than reference such an entry, the encoder can emit a Duplicate instruction (Section 4.3.4), and reference the duplicate instead.

   +--------+---------------------------------+----------+
| Unused | Referenceable | Draining |
| Space | Entries | Entries |
+--------+---------------------------------+----------+
^ ^ ^
| | |
Insertion Point Draining Index Dropping
Point
(摘自 IETF-QUIC-QPACK-DRAFT16)
这里的想法是,一旦一个字段通过排空索引,我们想让它存在的优先级较低,所以我们将添加一个对它的引用,使任何新请求引用该引用,以便旧字段变为未引用它将被删除?在它被删除和新引用被添加之间,那些中间请求可以填充到动态表中,否则会被阻塞?
谢谢你。

最佳答案

旧条目的复制是该表条目的新副本;它不引用旧条目。这允许旧条目老化(被驱逐)。
Duplicate 指令实现了三个目标:

  • 它允许旧条目被驱逐(上面已介绍)。
  • 它允许连续使用动态表,而不是再次插入新条目(旧条目的副本)并可能冒着阻塞听者的风险;和
  • 从需要通过网络发送的字节数的角度来看,复制旧条目比插入新条目更便宜;这提高了压缩性能。

  • QPACK 互联网草案 touches upon发出重复指令时可能有利可图。选择何时以及是否发出 Duplicate 指令是一个重要的决定,它可能会极大地影响压缩性能。每个编码器都会选择自己的策略。
    例如, ls-qpack包含 this code :
        candidate = NULL;
    STAILQ_FOREACH(entry, &enc->qpe_all_entries, ete_next_all)
    {
    if (!qenc_entry_is_draining(enc, entry))
    break;
    if (candidate && ETE_SIZE(entry) < ETE_SIZE(candidate))
    continue;
    for (next = STAILQ_NEXT(entry, ete_next_nameval); next;
    next = STAILQ_NEXT(next, ete_next_nameval))
    if (next->ete_nameval_hash == entry->ete_nameval_hash
    && next->ete_name_len == entry->ete_name_len
    && next->ete_val_len == entry->ete_val_len
    && 0 == memcmp(ETE_NAME(next), ETE_NAME(entry),
    next->ete_name_len)
    && 0 == memcmp(ETE_VALUE(next), ETE_VALUE(entry),
    next->ete_val_len))
    break;
    if (!next
    && qenc_hist_seen(enc, HE_NAMEVAL, entry->ete_nameval_hash)
    && qenc_has_or_can_evict_at_least(enc, ETE_SIZE(entry)))
    candidate = entry;
    }
    代码说:找到一个尚未被复制的排空条目,其名称和值最近已被使用( qenc_hist_seen() ),并且可以复制( qenc_has_or_can_evict_at_least() )。

    关于quic - HTTP/3 QPACK 中重复编码器指令的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63333261/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com