Я использую атомарный счетчик nr_active для каждого аппаратного контекста, чтобы измерить, сколько активных запросов у ядра в данный момент имеется. Когда количество активных запросов превышает определенный порог, я пытаюсь переключить запрос на другое ядро с меньшим количеством активных запросов.
Однако я наблюдаю, что загрузка ЦП, показанная такими инструментами, как htop, указывает на то, что только одно ядро обрабатывает большую часть нагрузки. Кроме того, мой более простой резервный код, который просто меняет назначение ЦП без проверки нагрузки, работает лучше, чем мой код управления с учетом нагрузки.
Вот упрощенная версия моего кода управления с учетом нагрузки:
Код: Выделить всё
static void blk_switch_select_ctx(struct blk_mq_alloc_data *data)
{
struct request_queue *q = data->q;
struct blk_mq_hw_ctx *iter_hctx;
unsigned int cur_cpu = data->ctx->cpu;
unsigned int target_cpu = cur_cpu;
int ptr_cpu;
int T_active = 0;
int min_active = UINT_MAX;
int thresh = 16;
iter_hctx = data->ctx->hctxs[HCTX_TYPE_DEFAULT];
T_active = atomic_read(&iter_hctx->nr_active);
if (T_active queue_ctx, ptr_cpu)->hctxs[HCTX_TYPE_DEFAULT];
T_active = atomic_read(&iter_hctx->nr_active);
if (T_active ctx = per_cpu_ptr(q->queue_ctx, target_cpu);
}
}
Код: Выделить всё
static void blk_switch_select_ctx(struct blk_mq_alloc_data *data)
{
struct request_queue *q = data->q;
unsigned int cpu = data->ctx->cpu;
unsigned int next_cpu = (cpu + 1) % nr_cpu_ids;
data->ctx = per_cpu_ptr(q->queue_ctx, next_cpu);
}
Моя среда:
Код: Выделить всё
Linux Kernel: 5.10
Ubuntu-20.04
NUMA node: 1
CPUs: 12
Код: Выделить всё
#!/bin/bash
sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
fio \
--name=random_read \
--filename=/dev/nvme0n1 \
--rw=randread \
--direct=1 \
--ioengine=libaio \
--size=1G \
--gtod_reduce=0 \
--cpus_allowed_policy=split \
--thread \
--group_reporting \
--time_based \
--runtime=30 \
--ramp_time=10 \
--bs=4k \
--iodepth=128 \
--cpus_allowed=0 \
--numjobs=6
Извините, если это простой вопрос, я все еще изучаю внутренние механизмы уровня блоков ядра. Будем очень признательны за любые советы и рекомендации!
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-in-lin
Мобильная версия