Что означает [Векторы] в перфомансе?

Это будет работать очень хорошо, если входной URL не является полным нежелательным. Он удаляет субдомен.

$host = parse_url( $Row->url, PHP_URL_HOST );
$parts = explode( '.', $host );
$parts = array_reverse( $parts );
$domain = $parts[1].'.'.$parts[0];

Пример

Вход: http://www2.website.com:8080/some/file/structure?some=parameters

Выход: website.com

1
задан Leonardo Physh 13 July 2018 в 08:12
поделиться

1 ответ

Этот [vectors] предназначен для страницы диапазона векторов для рук, имя определено в aarch32_setup_vectors_page функции arch/arm64/kernel/vdso.c

#define AARCH32_VECTORS_BASE    0xffff0000
....

int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp)
{
...
    unsigned long addr = AARCH32_VECTORS_BASE;
    static const struct vm_special_mapping spec = {
        .name   = "[vectors]",
        .pages  = vectors_page,
    };
    ...
    current->mm->context.vdso = (void *)addr;

    /* Map vectors page at the high address. */
    ret = _install_special_mapping(mm, addr, PAGE_SIZE,
                       VM_READ|VM_EXEC|VM_MAYREAD|VM_MAYEXEC,
                       &spec);
    ...
}

и в arch_vma_name arch / arm / kernel / process.c

/*
 * The vectors page is always readable from user space for the
 * atomic helpers. Insert it into the gate_vma so that it is visible
 * through ptrace and /proc/<pid>/mem.
 */
static struct vm_area_struct gate_vma = {
    .vm_start   = 0xffff0000,
    .vm_end     = 0xffff0000 + PAGE_SIZE,
    .vm_flags   = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYEXEC,
};
...

const char *arch_vma_name(struct vm_area_struct *vma)
{
    return is_gate_vma(vma) ? "[vectors]" : NULL;
}

Я не уверен, что perf покажет правильный адрес для профилирования образцов в этой области, он может быть смещен внутри раздела ...

Еще один вопрос о векторной странице руки: Отображение страниц в векторных файлах для ARM

«Таблица векторных исключений» на arm32 является сопоставлено с 0xffff0000, согласно https://doar-e.github.io/blog/2014/04/30/corrupting-arm-evt/ Вы можете проверить вывод cat /proc/self/maps на платформе и выгрузить страницу из смещения 0xffff0000 с помощью gdb x/1024wx 0xffff0000.

Презентация о новых vdso на arm64 https://blog.linuxplumbersconf.org/2016/ocw/system/presentations/3711/original /LPC_vDSO.pdf

2
ответ дан osgx 17 August 2018 в 13:29
поделиться
  • 1
    Я сбросил память, оказалось, что 0xffff0fc4 является входом цикла. --- (gdb) x / 1024ih 0xffff0fc0 0xffff0fc0: dmb ish 0xffff0fc4: ldrex r3, [r2] 0xffff0fc8: subs r3, r3, r0 0xffff0fcc: strexeq r3, r1, [r2] 0xffff0fd0: teqeq r3, # 1 0xffff0fd4: beq 0xffff0fc4 --- Скорее всего, 00000fc4 было смещением внутри раздела. – Leonardo Physh 16 July 2018 в 07:30
  • 2
    @LeonardoPhysh, спасибо! Да, perf может рассматривать это сопоставление, как будто это какой-то файл, и будет показывать смещения. Комментарии говорят, что «атомные помощники» и ldrex являются атомарными, поэтому этот код может быть реализацией некоторого примитива атомной синхронизации стиля LL / SC . Проверьте многопоточную синхронизацию программы и аппаратные функции вашего процессора. – osgx 16 July 2018 в 22:57
Другие вопросы по тегам:

Похожие вопросы: