共享缓存代码:ld.so目录缓存机制解析

版权申诉
0 下载量 114 浏览量 更新于2024-10-23 收藏 4KB RAR 举报
资源摘要信息:"缓存机制在现代计算环境中扮演着至关重要的角色,尤其是在提高程序启动速度和运行效率方面。本资源文件以“cache_common.rar_caching”为标题,重点讨论了ld.so(动态链接器)目录缓存中的通用代码实现。ld.so是Linux系统中用于在程序运行时动态加载共享库的组件。在资源描述中提到的“ld.so directory caching: common code”指出了资源文件关注的是动态链接器目录缓存机制中那些普遍适用的核心代码部分。而“caching”标签则进一步明确,该资源文件专注于缓存相关的技术细节。至于压缩包内的文件“cache_common.c”,它很可能是实现缓存逻辑的核心源代码文件。" 1. 动态链接器ld.so的角色和功能: - 动态链接器(ld.so)是Linux系统中的一个核心组件,它负责在程序执行时加载所需的共享库。 - 在程序运行之前,编译器和链接器会生成可执行文件,但该文件并不会包含程序运行时所需要的所有库函数代码,这些库函数代码通常存放在共享库(如.so文件)中。 - 当程序被调用执行时,ld.so会负责解析执行文件中的依赖关系,并加载正确的共享库到内存中。 2. 动态链接器目录缓存的作用: - 为了提高性能,ld.so维护了一个缓存目录,其中记录了共享库的位置和相关信息。 - 当一个程序需要被加载时,ld.so首先会检查缓存目录,如果缓存命中,就可以快速定位到共享库,避免了每次都进行全路径搜索的性能损耗。 - 缓存目录通常位于/lib或者/usr/lib目录下,并可能有对应的配置文件如/etc/ld.so.conf来指定额外的搜索路径。 3. 共享库的动态加载过程: - 当一个动态链接的可执行文件启动时,操作系统会启动动态链接器。 - 动态链接器开始解析执行文件中的DT_NEEDED标签,确定需要加载的共享库。 - 之后,动态链接器会查找缓存目录中是否已经存在所需求的库,如果存在则直接使用,如果不存在则会从配置文件或默认路径中搜索并加载库到内存中。 - 库加载完毕后,动态链接器执行地址空间布局随机化(ASLR)等安全机制,然后进行地址空间的重定位,最后将控制权交给程序。 4. 缓存目录的维护和优化: - 维护缓存目录的一个重要方面是保持其数据的准确性。如果共享库更新或者被移动,缓存也需要相应更新,以防止错误的库被加载。 - 优化方面包括缓存数据结构的选择、缓存淘汰策略和缓存的同步机制等,以确保缓存的有效性和一致性。 - 另外,随着系统运行,缓存可能变得庞大并且包含过时的条目,因此需要合理的清理和维护策略来保证性能。 5. cache_common.c文件分析: - cache_common.c作为核心代码文件,可能包含了缓存目录数据结构的定义,缓存条目的创建、删除、查询和更新等基本操作的实现。 - 此文件可能还涉及到与操作系统特定功能的接口,比如文件监控、同步互斥锁等,来确保缓存数据的一致性和线程安全。 - 此外,根据不同的系统和需求,cache_common.c还可能实现多种缓存管理策略,例如最近最少使用(LRU)策略、基于时间的过期策略等。 总结来说,本资源文件深入探讨了Linux环境下动态链接器ld.so在执行动态链接过程中所采用的目录缓存机制。这一机制显著提高了应用程序的启动速度和运行效率,是现代操作系统不可或缺的一部分。通过分析cache_common.c文件,我们可以更细致地了解这些缓存机制的实现细节,并理解如何在实际应用中优化和管理这些缓存策略。这对于系统程序员和系统架构师来说是一份宝贵的资源,因为它不仅提供了一个优化系统性能的工具,而且还展示了如何构建高效且可靠的动态链接环境。

File "C:\Users\Administrator\anaconda3\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 565, in _run_script exec(code, module.__dict__) File "D:\Users\Downloads\12-可视化\app.py", line 29, in <module> con = get_con() File "C:\Users\Administrator\anaconda3\lib\site-packages\streamlit\runtime\caching\cache_utils.py", line 194, in wrapper return cached_func(*args, **kwargs) File "C:\Users\Administrator\anaconda3\lib\site-packages\streamlit\runtime\caching\cache_utils.py", line 223, in __call__ return self._get_or_create_cached_value(args, kwargs) File "C:\Users\Administrator\anaconda3\lib\site-packages\streamlit\runtime\caching\cache_utils.py", line 248, in _get_or_create_cached_value return self._handle_cache_miss(cache, value_key, func_args, func_kwargs) File "C:\Users\Administrator\anaconda3\lib\site-packages\streamlit\runtime\caching\cache_utils.py", line 302, in _handle_cache_miss computed_value = self._info.func(*func_args, **func_kwargs) File "D:\Users\Downloads\12-可视化\app.py", line 8, in get_con return create_engine('postgresql+psycopg2://postgres:12344321@localhost:5432/traffic').connect() File "<string>", line 2, in create_engine File "C:\Users\Administrator\anaconda3\lib\site-packages\sqlalchemy\util\deprecations.py", line 309, in warned return fn(*args, **kwargs) File "C:\Users\Administrator\anaconda3\lib\site-packages\sqlalchemy\engine\create.py", line 560, in create_engine dbapi = dialect_cls.dbapi(**dbapi_args) File "C:\Users\Administrator\anaconda3\lib\site-packages\sqlalchemy\dialects\postgresql\psycopg2.py", line 782, in dbapi import psycopg2

2023-06-03 上传

OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and it looks like THUDM/chatglm-6b is not the path to a directory containing a file named config.json. Checkout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'. Traceback: File "C:\Users\SICC\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 552, in _run_script exec(code, module.__dict__) File "D:\chatglm\chatglm-6b\web_demos.py", line 78, in <module> st.session_state["state"] = predict(prompt_text, 4096, 1.0, 1.0, st.session_state["state"]) File "D:\chatglm\chatglm-6b\web_demos.py", line 41, in predict tokenizer, model = get_model() File "C:\Users\SICC\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\caching\cache_utils.py", line 211, in wrapper return cached_func(*args, **kwargs) File "C:\Users\SICC\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\caching\cache_utils.py", line 240, in __call__ return self._get_or_create_cached_value(args, kwargs) File "C:\Users\SICC\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\caching\cache_utils.py", line 266, in _get_or_create_cached_value return self._handle_cache_miss(cache, value_key, func_args, func_kwargs) File "C:\Users\SICC\AppData\Roaming\Python\Python310\site-packages\streamlit\runtime\caching\cache_utils.py", line 320, in _handle_cache_miss computed_value = self._info.func(*func_args, **func_kwargs) File "D:\chatglm\chatglm-6b\web_demos.py", line 31, in get_model tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) File "C:\Users\SICC\.conda\envs\SICC-CGL\lib\site-packages\transformers\models\auto\tokenization_auto.py", line 634, in from_pretrained config = AutoConfig.from_pretrained( File "C:\Users\SICC\.conda\envs\SICC-CGL\lib\site-packages\transformers\models\auto\configuration_auto.py", line 896, in from_pretrained config_dict, unused_kwargs = PretrainedConfig.get_config_dict(pretrained_model_name_or_path, **kwargs) File "C:\Users\SICC\.conda\envs\SICC-CGL\lib\site-packages\transformers\configuration_utils.py", line 573, in get_config_dict config_dict, kwargs = cls._get_config_dict(pretrained_model_name_or_path, **kwargs) File "C:\Users\SICC\.conda\envs\SICC-CGL\lib\site-packages\transformers\configuration_utils.py", line 628, in _get_config_dict resolved_config_file = cached_file( File "C:\Users\SICC\.conda\envs\SICC-CGL\lib\site-packages\transformers\utils\hub.py", line 443, in cached_file raise EnvironmentError(

2023-07-21 上传