   The `DynamicSupervisor` is a single process responsible for starting
   other processes. In some applications, the `DynamicSupervisor` may
   become a bottleneck. To address this, you can start multiple instances
-  of the `DynamicSupervisor` and then pick a "random" instance to start
-  the child on.
-
-  Instead of:
+  of the `DynamicSupervisor` through a `PartitionSupervisor`, and then
+  pick a "random" instance to start the child on.
+
+  Instead of starting a single `DynamicSupervisor`:
 
       children = [
         {DynamicSupervisor, name: MyApp.DynamicSupervisor}


  ## Options

    * `:name` - an atom representing the name of the partition supervisor.

    * `:partitions` - a positive integer with the number of partitions.
      Defaults to `System.schedulers_online()` (typically the number of cores).


  Sometimes you want each partition to know their partition assigned number.
  This can be done with the `:with_arguments` option. This function receives
  the list of arguments of the child specification and the partition. It
  must return a new list of arguments that will be passed to the child specification
  of children.

  For example, most processes are started by calling `start_link(opts)`,
  where `opts` is a keyword list. You could inject the partition into the
  options given to the child:

      with_arguments: fn [opts], partition ->
        [Keyword.put(opts, :partition, partition)]
      end

  """
  def start_link(opts) do
    name = opts[:name]
