У меня сбитая с толку проблема. У меня есть библиотека, которая использует sg для выполнения настраиваемых CDB. Есть несколько систем, которые обычно имеют проблемы с распределением памяти в sg . Обычно драйвер sg имеет жесткое ограничение около 4 МБ, но мы видим его на этих нескольких системах с ~ 2,3 МБ запросов. То есть CDB готовятся выделить для передачи 2,3 Мб. Здесь не должно быть никаких проблем: 2.3 <4.0.
Теперь о профиле машины. Это 64-битный процессор, но работает с 32-битным CentOS 6.0 (я их не собирал и не имею никакого отношения к этому решению). Версия ядра для этого дистрибутива CentOS - 2.6.32. У них 16 ГБ оперативной памяти.
Вот как выглядит использование памяти в системе (хотя, поскольку эта ошибка возникает во время автоматического тестирования, я еще не проверил, отражает ли это состояние, когда это errno возвращается из sg ).
top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21
Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 15888480k total, 9460408k used, 6428072k free, 258280k buffers
Swap: 4194296k total, 0k used, 4194296k free, 8497424k cached
Я нашел эту статью из Linux Journal, которая посвящена распределению памяти в ядре. Статья датирована, но, похоже, относится к 2.6 (некоторые комментарии об авторе во главе). В статье упоминается, что ядро ограничено примерно 1 ГБ памяти (хотя из текста не совсем ясно, если этот 1 ГБ каждый для физического и виртуального или общего объема). Мне интересно, если это точное утверждение для 2.6.32. В конечном счете, мне интересно, достигают ли эти системы этого предела.
Хотя это не совсем ответ на мою проблему, я задаюсь вопросом о правдивости претензии к 2.6.32. Итак, каков фактический предел памяти для ядра? Это может потребоваться для устранения неполадок. Любые другие предложения приветствуются. То, что делает это настолько озадачивающим, - то, что эти системы идентичны многим другим, которые не показывают ту же самую проблему.