Переменные dql можно установить из сетевых драйверов, используя API библиотеки dql .
РЕДАКТИРОВАТЬ :Существует этот API netdev_tx_completed_queue
, который будет обновлять значения dql. Я использовал собственный драйвер igb, и он никогда не вызывал этот API. Вот почему я получаю сообщения об истечении времени передачи.
Краткий ответ:Если ваша физическая память не может обслуживаться процентной частью (90% ), в конечном итоге будет использоваться своп. Когда ввод-вывод превышает указанный процент, возникают ошибки ввода-вывода.
Длинный ответ:Процент представляет собой часть вашей памяти (физической памяти + раздел подкачки или файл подкачки}. Предполагая, что у вас есть 1TiB DIMM (RAM )и установлен swap 100GiB, как в соответствии с рекомендацией Redhat, теоретически любой ввод-вывод в /data выше 0,989 TiB будет вызывать ошибки ввода-вывода, как и любая другая файловая система. На практике, поскольку память и пространство подкачки используются всеми остальными компонентами, остерегайтесь взаимоблокировок, вызванных OOM не сможет очистить память в случае чрезмерного роста.
Вот доказательство того, о чем я говорю, выполненное на моем ноутбуке:
Состояние системы перед записью ввода-вывода.
ceto@dell:~$ free
total used free shared buff/cache available
Mem: 8041716 2110100 3461592 208904 2470024 5464012
Swap: 2097148 0 2097148
ceto@dell:~$ cat /etc/fstab | grep data
tmpfs /data tmpfs rw,nodev,nosuid,size=90% 0 0
ceto@dell:~$ mv rh/rhel-8.1-x86_64-dvd.iso /var/lib/libvirt/images/^C
ceto@dell:~$ findmnt /data
TARGET SOURCE FSTYPE OPTIONS
/data tmpfs tmpfs rw,nosuid,nodev,relatime,size=7237548k
ceto@dell:~$ df /data
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 7237548 0 7237548 0% /data
Я использовал приведенный ниже сценарий для создания операции ввода-вывода, которая превышает 90 процентов пути монтирования /data.
ceto@dell:~$ cat deadlock.sh
dd if=/dev/urandom of=/data/test.img bs=16M count=454 > deadlock.txt 2>&1
df /data >> deadlock.txt
free >> deadlock.txt
sleep 1
rm -rf /data/test.img
sync /data
Давайте сгенерируем IO и посмотрим, что произойдет
ceto@dell:~$ sudo sh deadlock.sh
В выходном файле мы видим, что возникают ошибки ввода-вывода и система работает неряшливо
ceto@dell:~$ cat deadlock.txt
dd: error writing '/data/test.img': No space left on device
442+0 records in
441+0 records out
7411249152 bytes (7.4 GB, 6.9 GiB) copied, 39.6605 s, 187 MB/s
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 7237548 7237548 0 100% /data
total used free shared buff/cache available
Mem: 8041716 2284836 126108 5358092 5630772 139840
Swap: 2097148 2097084 64