Is there a hard limit on dbus string size?
Ryan Heniser
ryanh at dneg.com
Thu Apr 15 04:30:09 PDT 2010
Simon and Will,
Sorry, juggling a lot here. I overlooked that in the docs (how? I'll
RTFM better next time) :-) Thanks for pointing it out.
Well, I imagine 1-3 MB would be the absolute worst case scenario. I just
wanted to put some error handling on the server side. I think a typical
string size would be in the ballpark of 5-250k.
What I've got is a model-view-controller design. A graphics program (the
controller and the first view) is communicating with a persistent and
interactive rendering program (the 2nd view). They're both reading from
the same geometric data set (the model). Now I want to send commands to
the interactive rendering program (the 2nd view) via dbus to change the
way the model is viewed/rendered (lighting, shading, and etc.). I'd like
to send the commands in the rendering program's native format as I don't
want that process burning cycles on anything but keeping the rendering
as interactive as possible. The other alternative would be to send the
data as variants and unpack and reformat them on the client's (the
rendering program's) side, which I think would be too costly. If I
separate the commands into individual ones and send them one at a time,
the strings should stay in the 1-2K range, which I am hoping will not
starve the rendering program. Does that sound like a more reasonable use
of dbus? :-)
Ryan
BTW, as a new user of dbus, I've got to say it rocks!
Simon McVittie wrote:
> On Thu, 15 Apr 2010 at 10:48:50 +0100, Will Thompson wrote:
>
>> On 15/04/10 10:36, Ryan Heniser wrote:
>>
>>> Can't find it in the docs. So, I'd assume the size is limited by memory
>>> size, like most string implementations.
>>>
>
> <http://dbus.freedesktop.org/doc/dbus-specification.html> says:
>
> "Given all this, the types are marshaled on the wire as follows:
> ...
> STRING. A UINT32 indicating the string's length in bytes excluding its
> terminating nul, followed by non-nul string data of the given length,
> followed by a terminating nul byte."
>
> so you have a 2**32 byte limit imposed by the serialization format; but in a
> D-Bus message,
>
> "The maximum length of a message, including header, header alignment
> padding, and body is 2 to the 27th power or 134217728"
>
> which is 128MB.
>
> The default session bus configuration allows messages this large (actually
> larger, but I suspect the 128MB limit is also enforced):
>
> /etc/dbus-1/session.conf:
> <limit name="max_message_size">1000000000</limit>
>
> but the default system bus configuration does not override the hard-coded
> default of 32MB, which limits it further:
>
> bus/bus.c:
> parser->limits.max_message_size = _DBUS_ONE_MEGABYTE * 32;
>
> (yes, this would be more visible if system.conf explicitly repeated all the
> default settings).
>
>
>> (But I'm suspicious of passing 3MB strings over D-Bus. :))
>>
>
> What Will said - there is likely to be a way to do this that doesn't involve
> copying the string into the D-Bus daemon, then back out into the client,
> checking it for UTF-8 validity at each step.
>
> Regards,
> Simon
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dbus/attachments/20100415/ea89c229/attachment.html>
More information about the dbus
mailing list