I think you understand by "load balancing" "assignment of a core to a process or thread".
This is normally done on the operating system. But you can assign your own processes/threads to specific cores. You will find the ugly details under "man taskset" (a command) or "man sched_setaffinity" (API call) etc. The man pages contain references to many other commands and API calls.
No, I am talking about dynamic load balancing. After the allocation of a particular core to a process or thread, an imbalance of load may occur. To balance the load, linus performs the dynamic load balancing. I want the documentation related to that.
A quick search on the Internet with the keywords "linux dynamic load balancing" results in quite a number of articals. My impression is that they interprete "dynamic load balancing" as a concept in the world of distributed servers and that there is no common approach for that. Other articles refer to specific application scenarios, among them dynamic balancing of load in WEB servers.
In the world of a single server with multiple cores you may find help by typing "man 7 sched" - this worked for me on my vanilla Debian multicore machine. As I said before: the man page produces may links to related man pages. There also I have the impression that there is no automatic dynamic load balancing but that you can influence scheduler strategies. But you can influence the scheduling paramters of you processes/threads by calling API methods like sched_setparam() or sched_setscheduler().
I have never tested more than these basic API calls - so I am probably not the specialist of choice.