[linux] SO_SNDLOWAT мы не умеем?

sergey_m



#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>
#include <err.h>
#define HOST "194.87.0.50"
int main {
int s;
struct sockaddr_in sin;
int sndlowat;
socklen_t int_size = sizeof(int);
int err;
if s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP == -1)
errx(1, "Error from socket: %s", strerror(errno;
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
if err = inet_pton(AF_INET, HOST, (void *)&(sin.sin_addr == -1)
errx(1, "Error from inet_pton: %s", strerror(errno;
if err = connect(s, (struct sockaddr *)&sin, sizeof(struct sockaddr_in == -1)
errx(1, "Error from connect: %s", strerror(errno;
if err = getsockopt(s, SOL_SOCKET, SO_SNDLOWAT,
(void *)&sndlowat, &int_size == -1)
errx(1, "Error from getsockopt: %s", strerror(errno;
printf("Send low water mark is %d\n", sndlowat);
sndlowat = 16384;
if err = setsockopt(s, SOL_SOCKET, SO_SNDLOWAT,
(void *)&sndlowat, sizeof(int == -1)
errx(1, "Error from setsockopt: %s", strerror(errno;
printf("Send low water mark is %d\n", sndlowat);
}

sergey_m

FreeBSD 5.2-CURRENT


think:/tmp:|>./sndlowat-test
Send low water mark is 2048
Send low water mark is 16384


Linux 2.4.25-1-686 Tue Feb 24 10:55:59 EST 2004 i686 GNU/Linux


banana% ./sndlowat-test
Send low water mark is 1
sndlowat-test: Error from setsockopt: Protocol not available


дефолтное значение кстати далеко не оптимально

Marinavo_0507



/* We implement the SO_SNDLOWAT etc to
not be settable (1003.1g 5.3) */
default:
ret = -ENOPROTOOPT;
break;


похоже на то

Biglem

SO_RCVLOWAT and SO_SNDLOWAT
Specify the minimum number of bytes in the buffer until the socket layer will pass the data to the protocol (SO_SNDLOWAT) or the user on receiving (SO_RCVLOWAT). These two values are not changeable in Linux and their argument size is always fixed to 1 byte. getsockopt is able to read them; setsockopt will always return ENOPROTOOPT.

взято из man 7 socket

sergey_m

То есть Линус считает что это бесполезные и не нужные опции?
Хорошо. Тогда вопрос: нужно записать в сокет 16К данных без блокирования в write. Я это делаю так: повышаю SNDLOWAT, делаю select. Если сокет writable, то записываю. Значит под Linux так низзя. Как можно под Linux?
Пока вижу еще два способа: SO_SNDTIMEO или делать себе alarm перед write. Последнее считаю извратом. Попрубоем первое.

Marinavo_0507

> Я это делаю так: повышаю SNDLOWAT, делаю select. Если сокет writable, то записываю.
Делай стандартным образом, через O_NONBLOCK.
Без O_NONBLOCK никто не сможет гарантировать, что write не заблокируется.

sergey_m

SNDTIMEO может. Это та же фигня, только с определенным таймаутом. Кстати, вчера он мне такую же ошибку возвращал. Я тогда подумал, что накосячил где-то. Сейчас есть ощущение, что виноват Linux. Проверим.

Marinavo_0507

Хочешь извращаться - пожалуйста.
Но для non-blocking i/o придумали О_NONBLOCK

sergey_m

Ура-ура. Я ждал этого ответа. В Линуксе этого нет потому, что это извращение. Как же я сразу не догадался?

germafrodita

Оффтопик: почему бзд-юзеры так любят искать огрехи в linux? У них что-то с собственной неполноценностью? Или что? Даже тут ты ни при чём, я знаю достаточно много примеров.

sergey_m

SO_RCVTIMEO and SO_SNDTIMEO
Specify the sending or receiving timeouts until reporting an error.
They are fixed to a protocol specific setting in Linux and cannot be
read or written. Their functionality can be emulated using alarm(2) or
setitimer(2).
Заебца. Линус считает что это тоже извращение. В качестве альтернативы рекомендуется другое, реальное извращение. Интересно, а в тредах мне тоже с сигналами играться?

sergey_m

Потому, что когда они попадают в Linux environment, и находят херню, то не могут промолчать. Linux юзеры либо не попадают в BSD environment никогда, либо попадают, но не находят огрехов. Ты же не думаешь, что я себе поставил Linux что бы искать в нем огрехи? Просто я вынужден с ним работать.

sergey_m

ставлю 5 к одному: сейчас в этом треде начнется holy war, если нужные люди дочитают до поста .

sergey_m

Бляха-муха, вместо SO_REUSEPORT красуется вот это:


#define SO_LINGER 13
#define SO_BSDCOMPAT 14
/* To add :#define SO_REUSEPORT 15 */
#define SO_PASSCRED 16
#define SO_PEERCRED 17


, это я специально нашел

oleg_n

ограничение на стек в 64 кило в фрёвых птредах
как обойти?

sergey_m

В libc_r или в libthr и в libpthread?

oleg_n

скорее всего в libpthread
это всё user-space треды?

sergey_m

Рекомендую все таки запустить ldd, что бы не было "скорее всего". libpthread это ядреная m:n.

oleg_n

оказалось libc_r.so.4

sergey_m

Это EOL библиотека. Если ты пишешь тредовые приложения, то следует переходить на CURRENT, например на 5.2.1-RELEASE.

oleg_n

что значит EOL?
проблема в том, что прога на 4.x обязана запускаться

irinkina

Прокомментируй вот это:
http://www.web-hack.ru/exploit/exploit.php?go=3
Я конечно понимаю, что старое, но все же...

sergey_m

EOL - End of Life
Что мешает перейти на 5.2.1? Ну или ищи этот лимит в исходниках libc_r.

sergey_m

Вааааще не понял: каким боком это относится к этому треду?

sergey_m

По-моему ты сам сказал, что это очень старо. Что тут еще комментировать? Ок, можно еще добавить:
1) Можешь просмотреть дыры в Linux за последние три года. Вот непосредственно вчера нашлось local root vulnerability.
2) Кстати, сколько ты в своей жизни видел машин с включенным telnetd?
3) Ошибка в legacy коде от 4.3BSD, а не в коде написанном FreeBSD. Только не говори, что в Linux нет legacy кода от BSD.
Так что на этот раз, ты не ту ссылку дал. Если бы я был своим оппонентом, я бы нашел другую.
P.S. Почему-то и в качестве аргументов в споре используют "а вот в BSD ...", хотя к сабжу это не имеет отношения. Учитесь конструктивному флейму, например у .

oleg_n

Linux юзеры либо не попадают в BSD environment никогда, либо попадают, но не находят огрехов

oleg_n

программа совсем не для внутреннего использования

irinkina

Не знаю, как , но в 90% cлучаев у меня, просто к сожалению, нет времени копаться в исходнике, для решения тривиальных задач по меркам Linux, применяя методы мат. моделирования и хакерской логики, чуть-чуть отступили от Handbooka, потребовалось решить нетривиальную задачу или есть не совсем стандартное по меркам FreeBSD железо-приехали.
Запаса прочности у FreeBSD мало.

sergey_m

программа совсем не для внутреннего использования

Не понял. Если ты делаешь программу для человечества, то не стоит привязываться к ветке, которая будет закрыта в этом году. Я могу понять если корпоративный стандарт FreeBSD 4.9 и апгрейд не предвидится.

irinkina

Даже у Microsoft поддержка лучше.
Не говоря уж о том, что 2.0.x Linux ядра суппортятся до сих пор...

oleg_n

программа должна запускаться на большом спектре серверных платформ (в том числе FreeBSD 4.x)
а вот смысл остальной части твоего высказывания от меня ускользает, при чём здесь человечество?

sergey_m

но в 90% cлучаев у меня, просто к сожалению, нет времени копаться в исходнике, для решения тривиальных задач по меркам Linux, применяя методы мат. моделирования и хакерской логики, чуть-чуть отступили от Handbooka, потребовалось решить нетривиальную задачу или есть не совсем стандартное по меркам FreeBSD железо-приехали.
Запаса прочности у FreeBSD мало.

Киря, ты как всегда произнес кучу пышных фраз. Но я не вижу примеров, ссылок и прочего. Такими способами можно что-то рекламировать, например, "инет Кири", что у тебя удачно получается. Но такими способами нельзя обсуждать технические вопросы. Ты говоришь что не любишь читать исходники, применять методы матмоделирования и хакерской логики. Тогда ты больше похож на sales person, чем на системного архитектора.

sergey_m

Конец поддержки 4.x не предвидится. "Закроется" означает, что будет остановлена её разработка.
Не говоря уж о том, что 2.0.x Linux ядра суппортятся до сих пор...
Какой-то перец, не имеющий никакого отношения к разработчикам Linux продолжает выпускать патчи к 2.0.x.

sergey_m

То есть на приложение делается на продажу?

oleg_n

да, разумеется

irinkina

Я говорю, что мне, к сожалению , некогда читать исходники.
Применять методы матмоделирования и хакерской логики меня заставляет идеология Freebsd, за примерами далеко ходить не буду:
==========================================================================
* Forwarded by Kirill Yushkov <parkline.ru>
* Newsgroup: fido7.ru.unix.bsd
* From: "Kirill Yushkov" <kirya.ru>
* Date: Thu, 22 Apr 2004 11:03:42 +0000 (UTC)
* To: Gleb Smirnoff
* Subj: Re: Какой фаерволл справиться или что посоветуете ?
==========================================================================
Hello, Gleb!
You wrote to "Kirill Yushkov" <kirya.ru> on Wed, 21 Apr 2004 15:51:12
+0000 (UTC):
GS> Kirill Yushkov <kirya.ru> wrote:
KY>> Есть список сетей, ~1500 префиксов, нужно зашейпить все, кроме них, по
KY>> исходящему трафику, поток 20-30 mbit. После добавления всех этих сетей
KY>> в правила ipfw начинаются дикие тормоза, т.е видно, что не
KY>> хватает производительности на таком потоке. Машинка Celeron (p4 based)
KY>> 1700+256 ram. Freebsd 5.2 Что посоветуете ?
GS> Что значит "добавление в ipfw"? Как выглядят конкретные правила?
GS> Включен ли polling?
GS> Убраны ли из ядра всякие debug опции, которые существенно снижают
GS> производительность и в CURRENT есть по умолчанию?
00300 allow ip from xxx.xxx.xxx.xxx to 193.111.76.0/23
00300 allow ip from 193.111.76.0/23 to xxx.xxx.xxx.xxx
00300 allow ip from xxx.xxx.xxx.xxx to 193.111.91.0/24
00300 allow ip from 193.111.91.0/24 to xxx.xxx.xxx.xxx
.................
00500 pipe 1 ip from any to 217.16.26.42
Где, xxx.xxx.xxx.xxx мой адрес.
polling включен.
Загрузки на сетевушку не чувствуются.
Debug отключены.
HZ=1200
Загрузка под system 50%, а мне там еще ресурсы нужны, не дело тратить такие
мощности на firewall...
GS> P.S. firewall справиТСя, Киря, справиТСя
Не особо...
GS> P.S. А почему не linux ?
Был бы linux, сюда б не писал... .
With best regards, Kirill Yushkov. E-mail: kirya.ru
==========================================================================
* Forwarded by Kirill Yushkov <parkline.ru>
* Newsgroup: fido7.ru.unix.bsd
* From: "Kirill Yushkov" <kirya.ru>
* Date: Thu, 22 Apr 2004 11:10:56 +0000 (UTC)
* To: Anatoly Mashanov
* Subj: Re: Какой фаерволл справиться или что посоветуете ?
==========================================================================
Hello, Anatoly!
You wrote to Kirill Yushkov on Thu, 22 Apr 2004 17:39:02 +0400:
KY>> Есть список сетей, ~1500 префиксов, нужно зашейпить все, кроме них, по
KY>> исходящему трафику, поток 20-30 mbit. После добавления всех этих сетей
KY>> в правила ipfw начинаются дикие тормоза, т.е видно, что не
KY>> хватает производительности на таком потоке. Машинка Celeron (p4 based)
KY>> 1700+256 ram. Freebsd 5.2 Что посоветуете ?
AM> Поделить префиксы на две части - от 0.0.0.0 до 127.255.255.255 и от
AM> 128.0.0.0 до 255.255.255.255 и первым же оператором поставить skipto и
AM> перейти на соответствующую часть списка. При этом быстродействие
AM> вырастет вдвое (минус быстроедйствие первого skipto). Применяя метод
AM> фрактально к полученным половинкам, получим ускорение почти вдвое на
AM> каждую половинку.
Thx, сейчас попробуем, это мысль.
With best regards, Kirill Yushkov. E-mail: kirya.ru
А то, что параметр HZ пришлось реально подбирать методами мат моделирования, поверишь, или пошагово описывать ?
Как включался polling на realteke-это вообще песня, но встроена она в одноюнитывый сервак, мне из-за этого, или винт надо снимать, или с ней дальше было разбираться...

sergey_m

Тогда я тебе сильно сочувствую. На сегодняшний день POSIX threads ведут себя по разному на разных ОС. Если ты действительно добьешься идеальной работы, то весь твой код будет состоять из ifdefов. Конечно, все зависит от того, насколько сильно ты эксплуатируешь pthreads. Если тебе уже не хватает размера стека в libc_r, то вероятно ты не делаешь все по стандартным шаблонам. Когда ты будешь сравнивать работу своего приложения на Linux 2.2, Linux 2.4, Solaris, Digital UNIX, FreeBSD 4.x, FreeBSD 5.x, то под правильными тестами ты увидишь, что проблемы не только в libc_r, а еще и под другими ОС.
Если твое приложение будет действительно полезным и ценным, то покупатели будут ставить его на рекомендуемую тобой платформу и ОС. Что бы ощутить сущность последнего высказывания, рекомендую почитать http://mx.ru/Lists/CGatePro/List.html. Письма от Бутенко за 1 - 15 апреля.

irinkina

Changelog почитай 2.0.40, там конкретно написано, кто и что делал, и кто разработчики.

irinkina

По ссылке Sorry, the Server failed to retrieve the requested data.

oleg_n

проблем-то нет, пришлось просто большие обьекты не на стеке создавать
все мои посты к
Linux юзеры либо не попадают в BSD environment никогда, либо попадают, но не находят огрехов
возможно, перехожу на личности, но утверждение, имхо, не конструктивное

Marinavo_0507

> Linux юзеры либо не попадают в BSD environment никогда, либо попадают, но не находят огрехов.
Ещё как находят
Только что толку специально заводить треды об этом, да ещё на _этом_ форуме.
Лучше уж разработчикам написать, но ещё проще поставить таки Linux и не мучиться

Marinavo_0507

> Я ждал этого ответа. В Линуксе этого нет потому, что это извращение.
Не того ты ждал.
Сама возможность - не извращение, а по-видимому, какая-то настройка для повышения производительности,
но имеющая смысл только в конкретной реализации.
Вот использовать эту возможность не по назначению, когда есть стандартный, переносимый, проверенный O_NONBLOCK - извращение.

sergey_m

А то, что параметр HZ пришлось реально подбирать методами мат моделирования, поверишь, или пошагово описывать?
Конечно поверю. Если бы в linux был polling, то для HZ была бы заебатая константа, и тебе бы не пришлось ничего подбирать. Так сказать, mandatory default. Linux изобилует mandatory defaults. Вернемся к сабжу - у линукса для опций SO_SNDLOWAT и SO_RCVLOWAT есть заебатый дефолт - 1 и изменить его нельзя.
Как включался polling на realteke-это вообще песня, но встроена она в одноюнитывый сервак, мне из-за этого, или винт надо снимать, или с ней дальше было разбираться...
Поддержке polling на rl - 1 неделя. Либо ты Киря ошибаешься, либо ты действительно поставил the very CURRENT и включил polling на rl. Так вот поллинг на rl сливает из-за ограничений в чипе RL81xx. Его transmission буфер говно:


The RealTek controllers use bus master DMA but do not use a descriptor-
based data transfer mechanism. The receiver uses a single fixed size
ring buffer from which packets must be copied into mbufs. For transmis-
sion, there are only four outbound packet address registers which require
all outgoing packets to be stored as contiguous buffers. Furthermore,
outbound packet buffers must be longword aligned or else transmission
will fail.


поэтому поллинг на нём лучше не включать, особенно в свете того, что коду одна неделя от роду.
Поэтому нечего удивляться, что у тебя тормозит. Нужно просто поставить нормальную сетевую карту. Я же не жалуюсь, что у меня Linux тормозит на Celeron 300.
P.S. Я конечно понимаю, что NNTP очень старый протокол (c) , но все таки предлагаю продолжить дискуссию в ru.unix.bsd, т.к. там много квалифицированных людей, которые могут тебе помочь. Только сначала смени сетевую карту.

sergey_m

Changelog почитай 2.0.40, там конкретно написано, кто и что делал, и кто разработчики.

Там написано (me). А где RELNOTES?

irinkina

Смена сетевой карты обходиться в выкидывания одного винчестера, реально уж лучше Linux поставить.
ps.А может и нет, "фрактальное разбиение" реально помогает. Пока этого достаточно.

sergey_m

> Linux юзеры либо не попадают в BSD environment никогда, либо попадают, но не находят огрехов
возможно, перехожу на личности, но утверждение, имхо, не конструктивное

Признаю, что это неверное высказывание предназначенное для разжигания holy war
Вот Савкин говорит, что замалчивает огрехи. На самом деле большинство его претензий к сильным различиям в идеологии роутинга и сетевых настроек. Возможно, к отсутствию какой-то функциональности. Последнее я бы не стал называть огрехами. Этот тред начался с того, что не поддерживаются стандартные опции, которым уже много лет. Я не завожу тред, когда нахожу отсутствие фичи в Linux, которая есть в FreeBSD.

NightRaven

Во-первых, писать в блокирующем режиме какие-либо данные в TCP сокет именно целым куском не имеет никакого смысла (пока не отключен алгоритм Нагла что следует из самой сути TCP, так что исходная постановка задачи не имеет смысла.
Во-вторых, как уже правильно заметили, неблокирующий режим легко реализуется на неблокирующих сокетах (либо же асинхронность достигается введением отдельной нити).
В-третьх, как опять же правильно заметили, даже при наличии watermarks никто не обещает, что ты их можешь делать какими тебе заблагорассудится (воспринимай, что в Linux максимум и минимум - по единице).
В-четвертых, надо почитать любую приличную книгу по сетевому программированию и вводу-выводу и потом уже что-либо писать. В Linux очень прозрачный сетевой стек и есть очень много что можно сделать, чего нельзя сделать у других (например, TCP_INFO но некоторых вещей сделать нельзя. При хорошем же стиле программирования это не играет никакой роли.
Вообще, не нужно ковырять сетевые опции без большой на то надобности.

sergey_m

Смена сетевой карты обходиться в выкидывания одного винчестера, реально уж лучше Linux поставить.
Не понял. Каким боком тут винчестер?
В ньюсах ты так и не ответил на вопрос "почему не линукс?"
P.S. обходиТСя, Киря, обходиТСя

irinkina

Корпус такой.
Почему не линукс, потому что, тяжело это машину снять просто.

irinkina

Ты сказал, что 2,0,40 ветку ведут никому не известные, люди,не имеющие отношения к разработчикам, я показал, что это не так, но раз тебе лень все-таки поинтересоваться, кто в changelog пишет "me", дам наводку David Weinehall <acc.umu.se> http://www.acc.umu.se/~tao/

sergey_m

Во-первых, писать в блокирующем режиме какие-либо данные в TCP сокет именно целым куском не имеет никакого смысла (пока не отключен алгоритм Нагла что следует из самой сути TCP, так что исходная постановка задачи не имеет смысла.
Я не согласен с этим утверждением. Если кусок данных больше MSS, я могу быть уверен что их часть будет отправлена, даже при включенном Нэйгле.
И про постановку задачи написано нигде не было.
Во-вторых, как уже правильно заметили, неблокирующий режим легко реализуется на неблокирующих сокетах (либо же асинхронность достигается введением отдельной нити).

Именно так я сделал. Других вариантов Линукс не оставляет.
В-третьх, как опять же правильно заметили, даже при наличии watermarks никто не обещает, что ты их можешь делать какими тебе заблагорассудится (воспринимай, что в Linux максимум и минимум - по единице).

Этого никто не сказал. Хотя я прочитал в POSIX что возможность их менять не является обязательной. Так же как и таймауты. Это спасает Linux от полного позора. Однако, возможность их менять является очень удобной и отрицание этого не дает плюсов ОС.
В-четвертых, надо почитать любую приличную книгу по сетевому программированию и вводу-выводу и потом уже что-либо писать. В Linux очень прозрачный сетевой стек и есть очень много что можно сделать, чего нельзя сделать у других (например, TCP_INFO но некоторых вещей сделать нельзя. При хорошем же стиле программирования это не играет никакой роли.
Пишу, глядя в Стивенса, 3е издание. Там не отмечено, что в Linux эти опции менять нельзя. Написать авторам, что бы следующем издании отметили?
Вообще, не нужно ковырять сетевые опции без большой на то надобности.
Да и вообще нафиг работать без большой надобности?
P.S. Это твой первый пост. Кто ты на самом деле?

Marinavo_0507

> На самом деле большинство его претензий к сильным различиям в идеологии роутинга и сетевых настроек.
Большинство, но не все.
sync не работает на softupdates - говорил.
диск я размечал по хендбуку (рекомендуемым способом, через /stand/sysinstall) - так вообще какая-то фигня произошла,
в общем он новый пустой раздел сразу каким-то боком смонтировал на /, со всеми вытекающими,
а всего-то нужно было систему на новый винт перенести
Про траблу с fsck, я тоже писал.
И это при том, что стараюсь поменьше дела с bsd иметь.
То есть вывод такой, не надо идеализировать, косяков везде хватает.
Даже в том, что в отличии от фрюниксов за серьёзные деньги продаётся.

sergey_m

Корпус такой.

Извини, но это уже абсурд Выбирать сетевуху по размеру. Intelы на 82559 немногим больше большинства realtekов. Может стоит попробовать?
Почему не линукс, потому что, тяжело это машину снять просто.
Разве линукс нельзя поставить на разбирая машины? Можно.

irinkina

Много также претензий по поддержке, как нового, так и уже относительно старого, по компьютерным меркам железа.
Например, случай с реалтеком, карты конечно не супер, но иногда другого выбора нет.

Marinavo_0507

> Много также претензий по поддержке, как нового, так и уже относительно старого, по компьютерным меркам железа.
Отклоняется.
Уровень поддержки грамотные люди выясняют до покупки железа.

sergey_m

Да, это и есть тот перец. Один человек который поддерживает 2.0.40. К сожалению (к счастью?) не нашлось такого человека, кто бы поддерживал FreeBSD 2.2.8. Хотя один перец в ru.unix.bsd долго постил портированные на 3.5.1 security патчи от STABLE. Но сейчас уже перестал.

sergey_m

sync не работает на softupdates - говорил.
Такова суть softupdates. Но, все же, это можно засчитать как недостаток. Напомню, что под Linux нет softupdates.
диск я размечал по хендбуку (рекомендуемым способом, через /stand/sysinstall) - так вообще какая-то фигня произошла,
в общем он новый пустой раздел сразу каким-то боком смонтировал на /, со всеми вытекающими,
а всего-то нужно было систему на новый винт перенести
Тут не понятно, что именно произошло, тк ты плохо описал Ты случайно не dangerously dedicated выбрал?
И я ж тебе советовал использовать fdisk и disklabel, а не менюшки.
Про траблу с fsck, я тоже писал.
напомни ссылку, плс

irinkina

Блин, еще раз. СЕТЕВУШКА ВСТРОЕННАЯ в мать, и места она не занимает совсем, любая внешняя займет PCI слот. ЛЮБАЯ.
А корпус, 1U (одноюнитывый, 1 дюйм в высоту) и встанет сетевушка параллельно материнской плате, после чего места для винта не останеться, там все впритык.
Корпус брал не я, да и FreeBSD cтавил тоже не я, мне пришлось разбираться c косяками когда машина стала работать на полную мощьность и пытаться выполнять функции, которые возникли в данном, определнном периоде времени.

sergey_m

Много также претензий по поддержке, как нового, так и уже относительно старого, по компьютерным меркам железа.
Например, случай с реалтеком, карты конечно не супер, но иногда другого выбора нет.

ну из примеров я только realtek пока вижу. Он поддерживается по мере своих возможностей. Из говна конфетку не сделаешь. Хотя вот к нему пол поллинга прикручивают.

NightRaven

Я не согласен с этим утверждением. Если кусок данных больше MSS, я могу быть уверен что их часть будет отправлена, даже при включенном Нэйгле.
И про постановку задачи написано нигде не было.
То есть ты признаешь, что смысла писать именно целым куском нет и переносимее не закладываться на то, что нельзя запихнуть 16 Кб куском?
Именно так я сделал. Других вариантов Линукс не оставляет.
Этого никто не сказал. Хотя я прочитал в POSIX что возможность их менять не является обязательной. Так же как и таймауты. Это спасает Linux от полного позора. Однако, возможность их менять является очень удобной и отрицание этого не дает плюсов ОС.
Полный позор - это сильно сказано, при том, как в разных BSD (Free, Net, Open) работает, скажем, mmap на открытый только на запись файл с PROT_WRITE (три разных поведения, ни одно из которых не соответствует в отличие от Linux спецификации SUS). Вообще, соответствие *BSD каким-либо стандартам - это большой миф, который я в свое время пытался развеивать (пока не надоело).
А вот не закладываться на числа - в том числе пределы тех или иных параметров сетевого стека - это однозначно хороший стиль.
Пишу, глядя в Стивенса, 3е издание. Там не отмечено, что в Linux эти опции менять нельзя. Написать авторам, что бы следующем издании отметили?
Стивенс - это хорошо, но надо смотреть шире.
Скажем, начать с "ядра Linux в комментариях", потом потихоньку переходить на исходный код.
Благо, сейчас такие времена, что глупости вроде сетевых стеков доступны в исходниках (даже кусочек от дядя Билла лежит, и даже почти читаемо).
Да и вообще нафиг работать без большой надобности?
Программистами? Не знаю Ими, по-моему, только студенты и работают и только по большой надобности - в самой лучшей стране мира.

irinkina

Я, конечно все понимаю, но различным модификациям данной карты уже 7 (семь !) лет.
И занимает она более 50% рынка 100 mbit чипов уже года 4...

sergey_m

Не повезло тебе. Но все же, Киря, роутер с одним realtek - это пиздец. Поставь в свой одноюнитовый корпус мать с двумя интегрированными Intel. Таким матерей полно. Даже с двумя гигабитами бывают. И что за такой корпус. где винт висит над матерью? Обычно они достаточно длинные.

irinkina

Я, вообще, пока линейку чипов не сменят, даже на километр к интеловским сетевушкам не подойду.
А вот, то ресурсов на разработку и продвижение FreeBSD у разработчиков явно не хватает-факт.
Хорошии идеи в нее были заложены. Еще годика два и можно будет сказать, была.
Также умирала полуось.
Помог бы чтоль, в команду разработчиков записался ?
ps. Где было хоть в одном месте написано, что это роутер ?
Это сервер.

sergey_m

То есть ты признаешь, что смысла писать именно целым куском нет и переносимее не закладываться на то, что нельзя запихнуть 16 Кб куском?
Не признаю. А 16Кб для примера.
Полный позор - это сильно сказано, при том, как в разных BSD (Free, Net, Open) работает, скажем, mmap на открытый только на запись файл с PROT_WRITE (три разных поведения, ни одно из которых не соответствует в отличие от Linux спецификации SUS). Вообще, соответствие *BSD каким-либо стандартам - это большой миф, который я в свое время пытался развеивать (пока не надоело).
Открывай тред. Завтра пофлеймим. Сегодня уже не могу.
Стивенс - это хорошо, но надо смотреть шире.
Скажем, начать с "ядра Linux в комментариях", потом потихоньку переходить на исходный код.
Благо, сейчас такие времена, что глупости вроде сетевых стеков доступны в исходниках (даже кусочек от дядя Билла лежит, и даже почти читаемо).

Извини, если для программирования сокетов с использованием только POSIX интерфейса мне нужно сверяться с исходниками ядра, то впесду такую ОС. Думаю, все не так плохо. Нужно просто знать несколькие важные моменты, на один из которых я сегодня натолкнулся.

sergey_m

Я, вообще, пока линейку чипов не сменят, даже на километр к интеловским сетевушкам не подойду.
Ладно. Спорить тут бесполезно. Только еще раз напомню, что ты сильно не прав. Этот подтред не продолжаю.

sergey_m

Я, конечно все понимаю, но различным модификациям данной карты уже 7 (семь !) лет.
Это не мешает ей быть дерьмом.

irinkina

Пока я редактировал, свой пост, ты уже ответ написал, посмотри, plz.

irinkina

Привязывать к пользователю определенное железо, игнорируя другие решения, возможно, конечно и более худшие, прерогатива платных операционок, Sun Solaris, например, для x86, нельза о сих пор поставить в одну машину 2, кстати, интеловские сетевушки. Но зачем это делать FreeBSD ? Или это политика разработчиков такая ?

Marinavo_0507

> Такова суть softupdates.
Не согласен.
sync мог бы и поторопить фоновые операции, а потом дождаться их завершения.
> Напомню, что под Linux нет softupdates.
А в *BSD нет журналирования
А в Linux на журналирующих ФС sync работает отлично
> Тут не понятно, что именно произошло, тк ты плохо описал
Конечно плохо, а знаешь как я испугался?
/bin/ls: No such file or directory
страшно
> Ты случайно не dangerously dedicated выбрал?
Нет, я же прочитал соотв. главу хендбука.
> И я ж тебе советовал использовать fdisk и disklabel, а не менюшки.
После того, как ты на фениксе переносил систему на новый винт, неделю пришлось
исправлять случаи, когда права на директории сменились
Куда после этого идут твои советы по поводу этого процесса, догадываешься?
Для сравнения: GNU cp с опцией '-a' копирует все права, мягкие и жёсткие ссылки, дыры,
и меня не подводила не разу.
В хендбуке способ через /stand/sysinstall описан первым, я решил, что он предпочтительнее.
Ещё там написано:
Ignore any errors from sysinstall that it could not mount the new partition.
Так вот, ошибок не было, а вместо этого оно, по-видимому, смонтировало новый пустой раздел на /.
По крайней мере, после выхода из sysinstall в корне было пусто, пришлось перезагружать,
когда шок прошёл
> напомни ссылку, плс
краткое содержание: после сбоя питания автоматически запущенный fsck
оставил ФС в некорректном состоянии, я запустил fsck руками (с теми же вроде опциями ошибка исправилась,
softupdates выключен.
Почему два раза понадобилось fsck запускать?
Для сравнения: e2fsck у меня всегда исправлял всё, что мог, с одного раза

germafrodita

Приходится ли тебе работать с windows? Или, может быть, с cisco?
Почему я редко читаю интересные посты про эти системы от пользователей bsd?

stm2389930stm

статистика от стороннего наблюдателя - флейм linux vs bsd тащит только Глебиус... даже смешно от него читать - ставлю 5 против одного, что флейм начнется
я могу добавить в спор много огня и с той и сдругой стороны - много фактов, причем кокретных, но не буду - потому, как Глебиус очень упертый, а делать вид, что я что -то защищаю - не хочу....

Marinavo_0507

> Почему я редко читаю интересные посты про эти системы от пользователей bsd?
Да что там интересного?

sergey_m

Мне никогда не приходится работать с Windows. Приходится работать с Cisco. Думаю никому не будет интересно читать про кривости, которые я замечаю в PIX.

stm2389930stm

потому как не с кем поспорить? или альтернативу не видишь?

sergey_m

> Напомню, что под Linux нет softupdates.
А в *BSD нет журналирования
Да. Продолжаем флейм в этом же духе или остановимся?

Конечно плохо, а знаешь как я испугался?
/bin/ls: No such file or directory
страшно
Нет, я же прочитал соотв. главу хендбука.
Все равно не ясно, что именно ты сделал не так, поэтому обсуждать это безполезно.
Handbook является неким HOW-TO, я его почти не читал, для того что бы работать с разделами и дисклейблами мне хватало мана, который исчерпывающ.
После того, как ты на фениксе переносил систему на новый винт, неделю пришлось
исправлять случаи, когда права на директории сменились
Куда после этого идут твои советы по поводу этого процесса, догадываешься?
Для сравнения: GNU cp с опцией '-a' копирует все права, мягкие и жёсткие ссылки, дыры,
и меня не подводила не разу.
а) FreeBSD не виновато, что я запустил cp без ключа "-p".
б) Зря ты напомнил про GNU cp с опцией "-a". Ибо POSIX говорит, что она должна быть "-p":
http://www.opengroup.org/onlinepubs/007904975/utilities/cp.html
краткое содержание: после сбоя питания автоматически запущенный fsck
оставил ФС в некорректном состоянии, я запустил fsck руками (с теми же вроде опциями ошибка исправилась,
softupdates выключен.
Почему два раза понадобилось fsck запускать?

Значит, не с теми же ключами. Если бы ты показал, на какой ошибке оно застопилось в первый раз, я бы может быть даже догадался чего не хватало.

sergey_m

Потому, что единственный кому это интересно - , но в этой области он со мной согласен. Возможно Киря еще чего нибудь скажет, но как всегда искаженную информацию от старших товарищей.

sergey_m

Привязывать к пользователю определенное железо, игнорируя другие решения, возможно, конечно и более худшие, прерогатива платных операционок, Sun Solaris, например, для x86, нельза о сих пор поставить в одну машину 2, кстати, интеловские сетевушки. Но зачем это делать FreeBSD ? Или это политика разработчиков такая ?
Киря нет злого заговора. Многие производители железа даже не отдают спецификации не него. Они не заинтересованы в том, что бы железо работало под бесплатными ОС. Для того, что бы во FreeBSD появился драйвер чего-то экзотичного, то в одно время и в одном месте должны выполниться эти условия:
  • разработчик FreeBSD обладающий временем и навыками написания железных драйверов
  • данная железка
  • спеки на неё или open source драйвер под другую ОС

Я от тебя постоянно слышу про проблемы с поддержкой железа. Пока ты привел в качестве примера rl. rl поддерживается на столько хорошо, насколько это возможно, во всяком случае грузит машину меньше чем под виндой.
Зато я могу привести примеры железа, где драйвер под Linux либо отсутствует, либо обладает меньшей функциональностью чем под FreeBSD. Вполне себе серверно/роутерное железо: www.cronyx.ru, www.soekris.com.

Marinavo_0507

> а) FreeBSD не виновато, что я запустил cp без ключа "-p".
оно сохраняет жёсткие ссылки? man говорит, что нет
про дыры в мане я не нашёл
> б) Зря ты напомнил про GNU cp с опцией "-a". Ибо POSIX говорит, что она должна быть "-p"
конечно, в GNU cp есть и "-p", а что, были сомнения в этом?

sergey_m

Я пытался понять, что такое "дыры" с помощью man cp, но не понял:


-a, --archive
same as -dpR
-d, --no-dereference
preserve links
-p, --preserve
preserve file attributes if possible
-R, --recursive
copy directories recursively


Слово "hard" я тоже не вижу в мане.

Marinavo_0507

> Я пытался понять, что такое "дыры" с помощью man cp, но не понял
Это надо на ман читать, а книжку про юниксы
> Слово "hard" я тоже не вижу в мане.
в мане нет, но работает

sergey_m


> Я пытался понять, что такое "дыры" с помощью man cp, но не понял
Это надо на ман читать, а книжку про юниксы
> Слово "hard" я тоже не вижу в мане.
в мане нет, но работает
Мануалы в линуксе ацтой, чтд

Marinavo_0507

> Handbook является неким HOW-TO, я его почти не читал, для того что бы работать с разделами и дисклейблами мне хватало мана,
> который исчерпывающ.
Ок.
В хендбуке написана лажа, и читать его вредно.
Так и запишем
Вопрос исчерпан, когда я следующий раз занялся таким делом, я читал уже man, естественно,
а данные копировал rsync'ом
>> Почему два раза понадобилось fsck запускать?
> Значит, не с теми же ключами.
В треде написано, с какими.
> Если бы ты показал, на какой ошибке оно застопилось в первый раз, я бы может быть даже догадался чего не хватало.
Перечитай тред.
Ошибок не было, а вместо этого fsck сделало вид, что всё хорошо, только вот ФС не починило.
В результате проблема была замечена не сразу, а когда пользователи стали жаловаться, что что-то не работает.

sergey_m

В хендбуке написана лажа, и читать его вредно.
Так и запишем
Такого не было сказано.

Marinavo_0507

Ну а как ещё объяснить?
Лажа, так как поведение sysinstall не совпадает с описанным.
Читать вредно, так как приводит к странным проблемам, в отличии от изучения fdisk и disklabel по манам.

hoha32

Я с этим sysinstall'ом добился такого же результата
И нафик ему эти разделы сразу маунтить

sergey_m


краткое содержание: после сбоя питания автоматически запущенный fsck
оставил ФС в некорректном состоянии, я запустил fsck руками (с теми же вроде опциями ошибка исправилась,
softupdates выключен.
Почему два раза понадобилось fsck запускать?
В этом треде есть совет написать PR. Я не видел PR от тебя.

Marinavo_0507

> В этом треде есть совет написать PR.
... если ещё раз случится. Пока не случалось, перебои с питанием к счастью не так уж часто бывают.
> Я не видел PR от тебя.
И вряд ли увидишь. Если я захочу потратить время на этот сервер, я поставлю туда Linux.

Filan

А чем не устраивает dump (8)?
(Я так понял задача была перенести систему на другой винт?)
Оставить комментарий
Имя или ник:
Комментарий: