**TL;DR** Basically, a preconditioner is meant to speed up the convergence of iterative linear solvers. A preconditioner in Mathematica is the inverse of what is called preconditioner in numerical Mathematics.

--------

The computational backend for `LinearSolve[A,b,Method->"Krylov" ]` is ``SparseArray`KrylovLinearSolve``. 

More or less,

    SparseArray`KrylovLinearSolve[A,b, "Method" -> "BiCGSTAB", "Preconditioner" -> f]

should be equivalent to

    LinearSolve[A,b, Method -> {
      "Krylov", 
      "Method" -> "BiCGSTAB", "Preconditioner" -> "ILU0"
      }]

However, calling ``SparseArray`KrylovLinearSolve`` directly is usually a bit faster because `LinearSolve` seems to have some overhead. 

Other supported Krylov methods are `"ConjugateGradient"` (only for symmetric positive-definite matrices) and `"GMRES"`
See the documentation of `LinearSolve`, section Options, subsection Methods subsubsection "Krylov".

You can use an arbitrary function `f` as preconditioner. Here an example for a built-in preconditioner (incomplete LU-factorization without fill-in):

    precdata = SparseArray`SparseMatrixILU[A, "Method" -> "ILU0"]
    f = x \[Function] SparseArray`SparseMatrixApplyILU[precdata, x]

Other accepted values for the option `"Method"` in ``SparseArray`SparseMatrixILU`` are "ILUT" and "ILUTP".

Another example is this:

    f = x \[Function] Evaluate[1/Diagonal[A] x]

It is the well-known [Jacobi preconditioner](https://en.wikipedia.org/wiki/Preconditioner#Jacobi_(or_diagonal)_preconditioner) 
-- or rather its inverse. 


In constrast to the mathematical nomenclature, a preconditioner itself gets applied, not its inverse, in Mathematica. That's very plausible from an algorithmic point of view.

See [this](https://en.wikipedia.org/wiki/Preconditioner#Jacobi_(or_diagonal)_preconditioner) and the standard literature about numerical linear equations for more information about what a preconditioner is. Basically, a preconditioner `f` is meant to speed up the convergence of iterative linear solvers. Sloppily formulated, $f$ is a good preconditioner for the matrix $A$ if 1. $f(x)$ is easy to compute for each vector $x$ and 2. $A \,f(x)$ is close to $x$. So, a good preconditioner $f$ should best be almost an inverse of $A$ - but orders of magnitude faster than computing $A^{-1} x$ with direct methods.